49 cairo_surface_flush( surface );
51 int stride = cairo_image_surface_get_stride( surface );
52 unsigned char* data = cairo_image_surface_get_data( surface );
54 unsigned char* pixel = data + y * stride + x * 4;
57 double b = pixel[0] / 255.0;
58 double g = pixel[1] / 255.0;
59 double r = pixel[2] / 255.0;
60 double a = pixel[3] / 255.0;
83 const int width = 100;
84 const int height = 100;
87 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
88 cairo_t* destCtx = cairo_create( destSurface );
91 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
92 cairo_paint( destCtx );
95 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
96 cairo_t* srcCtx = cairo_create( srcSurface );
99 cairo_set_source_rgba( srcCtx, 1.0, 0.0, 0.0, 1.0 );
100 cairo_paint( srcCtx );
103 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
104 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
105 cairo_paint( destCtx );
112 "Identical colors should cancel to black. Got: ("
116 cairo_destroy( srcCtx );
117 cairo_surface_destroy( srcSurface );
118 cairo_destroy( destCtx );
119 cairo_surface_destroy( destSurface );
128 const int width = 100;
129 const int height = 100;
132 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
133 cairo_t* destCtx = cairo_create( destSurface );
135 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
136 cairo_paint( destCtx );
139 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
140 cairo_t* srcCtx = cairo_create( srcSurface );
142 cairo_set_source_rgba( srcCtx, 0.0, 1.0, 0.0, 1.0 );
143 cairo_paint( srcCtx );
146 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
147 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
148 cairo_paint( destCtx );
155 "Red - Green difference should be yellow. Got: ("
159 cairo_destroy( srcCtx );
160 cairo_surface_destroy( srcSurface );
161 cairo_destroy( destCtx );
162 cairo_surface_destroy( destSurface );
171 const int width = 100;
172 const int height = 100;
175 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
176 cairo_t* destCtx = cairo_create( destSurface );
179 cairo_set_source_rgba( destCtx, 0.0, 0.0, 0.0, 1.0 );
180 cairo_paint( destCtx );
183 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
184 cairo_t* srcCtx = cairo_create( srcSurface );
186 cairo_set_source_rgba( srcCtx, 0.0, 0.0, 1.0, 1.0 );
187 cairo_paint( srcCtx );
190 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
191 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
192 cairo_paint( destCtx );
199 "Blue on black should show blue. Got: ("
203 cairo_destroy( srcCtx );
204 cairo_surface_destroy( srcSurface );
205 cairo_destroy( destCtx );
206 cairo_surface_destroy( destSurface );
215 const int width = 100;
216 const int height = 100;
219 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
220 cairo_t* destCtx = cairo_create( destSurface );
223 cairo_set_source_rgba( destCtx, 0.0, 0.0, 0.0, 1.0 );
224 cairo_paint( destCtx );
227 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
228 cairo_rectangle( destCtx, 0, 0, 50, 100 );
229 cairo_fill( destCtx );
232 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
233 cairo_t* srcCtx = cairo_create( srcSurface );
236 cairo_set_source_rgba( srcCtx, 0.0, 0.0, 0.0, 1.0 );
237 cairo_paint( srcCtx );
240 cairo_set_source_rgba( srcCtx, 1.0, 0.0, 0.0, 1.0 );
241 cairo_rectangle( srcCtx, 25, 0, 50, 100 );
242 cairo_fill( srcCtx );
245 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
246 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
247 cairo_paint( destCtx );
258 COLOR4D expectedRed( 1.0, 0.0, 0.0, 1.0 );
259 COLOR4D expectedBlack( 0.0, 0.0, 0.0, 1.0 );
262 "Left-only region should be red. Got: ("
263 << leftOnly.
r <<
", " << leftOnly.
g <<
", " << leftOnly.
b <<
")" );
266 "Overlap region should be black (canceled). Got: ("
267 << overlap.
r <<
", " << overlap.
g <<
", " << overlap.
b <<
")" );
270 "Right-only region should be red. Got: ("
271 << rightOnly.
r <<
", " << rightOnly.
g <<
", " << rightOnly.
b <<
")" );
274 cairo_destroy( srcCtx );
275 cairo_surface_destroy( srcSurface );
276 cairo_destroy( destCtx );
277 cairo_surface_destroy( destSurface );
wxString result
Test unit parsing edge cases and error handling.