diff options
| author | Bryce Harrington <b.harrington@samsung.com> | 2014-03-06 18:13:48 -0800 |
|---|---|---|
| committer | Bryce Harrington <b.harrington@samsung.com> | 2014-03-06 18:13:48 -0800 |
| commit | d3d4bfd8deea505624d0826a063cade2bb97c99c (patch) | |
| tree | 8c12e1b0ab155255e042a3451b4f48e53bd56aef /src | |
| parent | 9959f05f3fe0d2b0dc5b0c1aa38c7b8d870c63b9 (diff) | |
mask: Fix cairo masking case to stipple and clip
Diffstat (limited to 'src')
| -rw-r--r-- | src/cairo-tests/mask.cpp | 28 | ||||
| -rw-r--r-- | src/skia-tests/mask.cpp | 7 |
2 files changed, 32 insertions, 3 deletions
diff --git a/src/cairo-tests/mask.cpp b/src/cairo-tests/mask.cpp index e837343..b07b1ae 100644 --- a/src/cairo-tests/mask.cpp +++ b/src/cairo-tests/mask.cpp @@ -9,8 +9,20 @@ static cairo_pattern_t *mask; int ca_setup_mask(caskbench_context_t *ctx) { - // TODO: Create a stipple mask pattern - mask = cairo_pattern_create_rgba (0, 0, 0, 0.5); + // See https://git.gnome.org/browse/gtk+/tree/gtk/gtkcolorbutton.c?id=804c80097995bb0026544118a32b59e23ee2fbe3#n241 + static unsigned char data[16] = { 0xFF, 0x00, 0x00, 0xFF, + 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0xFF, }; + static cairo_surface_t *stippled = NULL; + + if (stippled == NULL) { + stippled = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_A8, 2, 2, 4); + } + mask = cairo_pattern_create_for_surface (stippled); + cairo_pattern_set_extend (mask, CAIRO_EXTEND_REPEAT); + cairo_pattern_set_filter (mask, CAIRO_FILTER_NEAREST); + return 1; } @@ -28,9 +40,19 @@ ca_test_mask(caskbench_context_t *ctx) for (i=0; i<ctx->size; i++) { // Apply mask on a circle + double red, green, blue, alpha; + red = (double)rand()/RAND_MAX; + green = (double)rand()/RAND_MAX; + blue = (double)rand()/RAND_MAX; + alpha = (double)rand()/RAND_MAX; + cairo_set_source_rgba (cr, red, green, blue, alpha); + cairo_arc (cr, 40*i, 40, 30, 0, 2*M_PI); - cairo_fill (cr); + cairo_save (cr); + cairo_clip (cr); cairo_mask (cr, mask); + cairo_fill (cr); + cairo_restore (cr); } return 1; } diff --git a/src/skia-tests/mask.cpp b/src/skia-tests/mask.cpp index dae7f58..2688d9d 100644 --- a/src/skia-tests/mask.cpp +++ b/src/skia-tests/mask.cpp @@ -21,9 +21,16 @@ sk_teardown_mask(void) int sk_test_mask(caskbench_context_t *ctx) { + unsigned char red, green, blue, alpha; int i; for (i=0; i<ctx->size; i++) { + red = int( 255 * (double)rand()/RAND_MAX ); + green = int( 255 * (double)rand()/RAND_MAX ); + blue = int( 255 * (double)rand()/RAND_MAX ); + alpha = int( 255 * (double)rand()/RAND_MAX ); + ctx->skia_paint->setARGB(alpha, red, green, blue); + // Apply mask on a circle ctx->skia_canvas->drawCircle(40*i, 40, 30, *ctx->skia_paint); } |