ferroui_base/rendering/composition/drawing/
render_data_payloads.rs1use super::RenderDataOpcode;
2use crate::media::{RenderOptions, TextOptions};
3use crate::media::imaging::BitmapBlendingMode;
4use crate::rendering::composition::transport::{BatchValue, BatchValueReader};
5use crate::{Matrix, Point, Rect, RoundedRect};
6
7pub trait IRenderDataPayload: BatchValue + Copy {
10 const OPCODE: RenderDataOpcode;
12}
13
14macro_rules! render_data_payload {
17 ($name:ident => $opcode:ident { $($field:ident : $fty:ty),* $(,)? }) => {
18 impl IRenderDataPayload for $name {
19 const OPCODE: RenderDataOpcode = RenderDataOpcode::$opcode;
20 }
21
22 impl BatchValue for $name {
23 #[inline]
24 fn write_to(&self, out: &mut Vec<u8>) {
25 $(self.$field.write_to(out);)*
26 }
27
28 #[inline]
29 fn read_from(input: &mut BatchValueReader<'_>) -> Self {
30 $(let $field = <$fty>::read_from(input);)*
31 Self { $($field,)* }
32 }
33 }
34 };
35}
36
37#[derive(Clone, Copy, Debug, Default, PartialEq)]
38pub struct DrawLinePayload {
39 pub server_pen: i32,
40 pub client_pen: i32,
41 pub p1: Point,
42 pub p2: Point,
43}
44
45render_data_payload!(DrawLinePayload => DrawLine { server_pen: i32, client_pen: i32, p1: Point, p2: Point });
46
47#[derive(Clone, Copy, Debug, Default, PartialEq)]
49pub struct DrawRectanglePayload {
50 pub server_brush: i32,
51 pub server_pen: i32,
52 pub client_pen: i32,
53 pub rect: RoundedRect,
54 pub box_shadow_count: i32,
55}
56
57render_data_payload!(DrawRectanglePayload => DrawRectangle {
58 server_brush: i32,
59 server_pen: i32,
60 client_pen: i32,
61 rect: RoundedRect,
62 box_shadow_count: i32,
63});
64
65#[derive(Clone, Copy, Debug, Default, PartialEq)]
66pub struct DrawEllipsePayload {
67 pub server_brush: i32,
68 pub server_pen: i32,
69 pub client_pen: i32,
70 pub rect: Rect,
71}
72
73render_data_payload!(DrawEllipsePayload => DrawEllipse {
74 server_brush: i32,
75 server_pen: i32,
76 client_pen: i32,
77 rect: Rect,
78});
79
80#[derive(Clone, Copy, Debug, Default, PartialEq)]
81pub struct DrawGeometryPayload {
82 pub server_brush: i32,
83 pub server_pen: i32,
84 pub client_pen: i32,
85 pub geometry: i32,
86}
87
88render_data_payload!(DrawGeometryPayload => DrawGeometry {
89 server_brush: i32,
90 server_pen: i32,
91 client_pen: i32,
92 geometry: i32,
93});
94
95#[derive(Clone, Copy, Debug, Default, PartialEq)]
96pub struct DrawGlyphRunPayload {
97 pub server_brush: i32,
98 pub glyph_run: i32,
99}
100
101render_data_payload!(DrawGlyphRunPayload => DrawGlyphRun { server_brush: i32, glyph_run: i32 });
102
103#[derive(Clone, Copy, Debug, Default, PartialEq)]
104pub struct DrawBitmapPayload {
105 pub bitmap: i32,
106 pub opacity: f64,
107 pub source_rect: Rect,
108 pub dest_rect: Rect,
109}
110
111render_data_payload!(DrawBitmapPayload => DrawBitmap { bitmap: i32, opacity: f64, source_rect: Rect, dest_rect: Rect });
112
113#[derive(Clone, Copy, Debug, Default, PartialEq)]
114pub struct DrawCustomPayload {
115 pub operation: i32,
116}
117
118render_data_payload!(DrawCustomPayload => DrawCustom { operation: i32 });
119
120#[derive(Clone, Copy, Debug, Default, PartialEq)]
121pub struct PushClipPayload {
122 pub clip: RoundedRect,
123}
124
125render_data_payload!(PushClipPayload => PushClip { clip: RoundedRect });
126
127#[derive(Clone, Copy, Debug, Default, PartialEq)]
128pub struct PushGeometryClipPayload {
129 pub geometry: i32,
130}
131
132render_data_payload!(PushGeometryClipPayload => PushGeometryClip { geometry: i32 });
133
134#[derive(Clone, Copy, Debug, Default, PartialEq)]
135pub struct PushOpacityPayload {
136 pub opacity: f64,
137}
138
139render_data_payload!(PushOpacityPayload => PushOpacity { opacity: f64 });
140
141#[derive(Clone, Copy, Debug, Default, PartialEq)]
142pub struct PushOpacityMaskPayload {
143 pub brush: i32,
144 pub bounds: Rect,
145}
146
147render_data_payload!(PushOpacityMaskPayload => PushOpacityMask { brush: i32, bounds: Rect });
148
149#[derive(Clone, Copy, Debug, Default, PartialEq)]
150pub struct PushTransformPayload {
151 pub matrix: Matrix,
152}
153
154render_data_payload!(PushTransformPayload => PushTransform { matrix: Matrix });
155
156#[derive(Clone, Copy, Debug, Default, PartialEq)]
157pub struct PushRenderOptionsPayload {
158 pub options: RenderOptions,
159}
160
161render_data_payload!(PushRenderOptionsPayload => PushRenderOptions { options: RenderOptions });
162
163#[derive(Clone, Copy, Debug, Default, PartialEq)]
164pub struct PushTextOptionsPayload {
165 pub options: TextOptions,
166}
167
168render_data_payload!(PushTextOptionsPayload => PushTextOptions { options: TextOptions });
169
170#[derive(Clone, Copy, Debug, Default, PartialEq)]
171pub struct PushEffectPayload {
172 pub effect: i32,
173 pub bounds: Rect,
174}
175
176render_data_payload!(PushEffectPayload => PushEffect { effect: i32, bounds: Rect });
177
178#[derive(Clone, Copy, Debug, Default, PartialEq)]
179pub struct PushCompositingLayerPayload {
180 pub blend: BitmapBlendingMode,
181 pub opacity: f64,
182 pub bounds: Rect,
183}
184
185render_data_payload!(PushCompositingLayerPayload => PushCompositingLayer {
186 blend: BitmapBlendingMode, opacity: f64, bounds: Rect,
187});