45 cairo_surface_flush( surface );
47 int stride = cairo_image_surface_get_stride( surface );
48 unsigned char* data = cairo_image_surface_get_data( surface );
50 unsigned char* pixel = data + y * stride + x * 4;
53 double b = pixel[0] / 255.0;
54 double g = pixel[1] / 255.0;
55 double r = pixel[2] / 255.0;
56 double a = pixel[3] / 255.0;
79 const int width = 100;
80 const int height = 100;
83 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
84 cairo_t* destCtx = cairo_create( destSurface );
87 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
88 cairo_paint( destCtx );
91 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
92 cairo_t* srcCtx = cairo_create( srcSurface );
95 cairo_set_source_rgba( srcCtx, 1.0, 0.0, 0.0, 1.0 );
96 cairo_paint( srcCtx );
99 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
100 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
101 cairo_paint( destCtx );
108 "Identical colors should cancel to black. Got: ("
112 cairo_destroy( srcCtx );
113 cairo_surface_destroy( srcSurface );
114 cairo_destroy( destCtx );
115 cairo_surface_destroy( destSurface );
124 const int width = 100;
125 const int height = 100;
128 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
129 cairo_t* destCtx = cairo_create( destSurface );
131 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
132 cairo_paint( destCtx );
135 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
136 cairo_t* srcCtx = cairo_create( srcSurface );
138 cairo_set_source_rgba( srcCtx, 0.0, 1.0, 0.0, 1.0 );
139 cairo_paint( srcCtx );
142 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
143 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
144 cairo_paint( destCtx );
151 "Red - Green difference should be yellow. Got: ("
155 cairo_destroy( srcCtx );
156 cairo_surface_destroy( srcSurface );
157 cairo_destroy( destCtx );
158 cairo_surface_destroy( destSurface );
167 const int width = 100;
168 const int height = 100;
171 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
172 cairo_t* destCtx = cairo_create( destSurface );
175 cairo_set_source_rgba( destCtx, 0.0, 0.0, 0.0, 1.0 );
176 cairo_paint( destCtx );
179 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
180 cairo_t* srcCtx = cairo_create( srcSurface );
182 cairo_set_source_rgba( srcCtx, 0.0, 0.0, 1.0, 1.0 );
183 cairo_paint( srcCtx );
186 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
187 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
188 cairo_paint( destCtx );
195 "Blue on black should show blue. Got: ("
199 cairo_destroy( srcCtx );
200 cairo_surface_destroy( srcSurface );
201 cairo_destroy( destCtx );
202 cairo_surface_destroy( destSurface );
211 const int width = 100;
212 const int height = 100;
215 cairo_surface_t* destSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
216 cairo_t* destCtx = cairo_create( destSurface );
219 cairo_set_source_rgba( destCtx, 0.0, 0.0, 0.0, 1.0 );
220 cairo_paint( destCtx );
223 cairo_set_source_rgba( destCtx, 1.0, 0.0, 0.0, 1.0 );
224 cairo_rectangle( destCtx, 0, 0, 50, 100 );
225 cairo_fill( destCtx );
228 cairo_surface_t* srcSurface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, width, height );
229 cairo_t* srcCtx = cairo_create( srcSurface );
232 cairo_set_source_rgba( srcCtx, 0.0, 0.0, 0.0, 1.0 );
233 cairo_paint( srcCtx );
236 cairo_set_source_rgba( srcCtx, 1.0, 0.0, 0.0, 1.0 );
237 cairo_rectangle( srcCtx, 25, 0, 50, 100 );
238 cairo_fill( srcCtx );
241 cairo_set_operator( destCtx, CAIRO_OPERATOR_DIFFERENCE );
242 cairo_set_source_surface( destCtx, srcSurface, 0, 0 );
243 cairo_paint( destCtx );
254 COLOR4D expectedRed( 1.0, 0.0, 0.0, 1.0 );
255 COLOR4D expectedBlack( 0.0, 0.0, 0.0, 1.0 );
258 "Left-only region should be red. Got: ("
259 << leftOnly.
r <<
", " << leftOnly.
g <<
", " << leftOnly.
b <<
")" );
262 "Overlap region should be black (canceled). Got: ("
263 << overlap.
r <<
", " << overlap.
g <<
", " << overlap.
b <<
")" );
266 "Right-only region should be red. Got: ("
267 << rightOnly.
r <<
", " << rightOnly.
g <<
", " << rightOnly.
b <<
")" );
270 cairo_destroy( srcCtx );
271 cairo_surface_destroy( srcSurface );
272 cairo_destroy( destCtx );
273 cairo_surface_destroy( destSurface );
wxString result
Test unit parsing edge cases and error handling.