diff options
Diffstat (limited to 'src/cairo-skia-surface.cpp')
-rw-r--r--[-rwxr-xr-x] | src/cairo-skia-surface.cpp | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/src/cairo-skia-surface.cpp b/src/cairo-skia-surface.cpp index bf6b14a5e..0282c2b51 100755..100644 --- a/src/cairo-skia-surface.cpp +++ b/src/cairo-skia-surface.cpp @@ -51,6 +51,27 @@ #include <SkGradientShader.h> #include <SkDashPathEffect.h> +/** + * SECTION:cairo-skia + * @Title: Skia Surfaces + * @Short_Description: Rendering to Skia surfaces + * @See_Also: #cairo_surface_t + * + * Originally written by Vladimir Vukicevic to investigate using Skia for + * Mozilla, it provides a nice integration with a rather interesting code + * base. By hooking Skia underneath Cairo it allows us to directly compare + * code paths... which is interesting. + **/ + +/** + * CAIRO_HAS_SKIA_SURFACE: + * + * Defined if the Skia surface backend is available. + * This macro can be used to conditionally compile backend-specific code. + * + * Since: 1.10 + **/ + #if (CAIRO_FIXED_BITS == 32) && (CAIRO_FIXED_FRAC_BITS == 16) && defined(SK_SCALAR_IS_FIXED) # define CAIRO_FIXED_TO_SK_SCALAR(x) (x) #elif defined(SK_SCALAR_IS_FIXED) @@ -64,13 +85,20 @@ # define CAIRO_INT_STATUS_SUCCESS ((cairo_int_status_t) CAIRO_STATUS_SUCCESS) #endif -#define CAIRO_MAYBE_UNSUPPORTED CAIRO_INT_STATUS_UNSUPPORTED -//#define CAIRO_MAYBE_UNSUPPORTED _skia_unsupported () +#define DEBUG_SKIA 0 + +#if DEBUG_SKIA +#define UNSUPPORTED(reason) ({ \ + fprintf (stderr, \ + "cairo-skia : hit unsupported operation in %s(), line %d: %s\n", \ + __FUNCTION__, __LINE__, reason); \ + return CAIRO_INT_STATUS_UNSUPPORTED; \ +}) +#else +#define UNSUPPORTED(reason) ({ \ + return CAIRO_INT_STATUS_UNSUPPORTED; \ +})#endif -static cairo_int_status_t _skia_unsupported () { - printf ("unsupported!\n"); - return CAIRO_INT_STATUS_UNSUPPORTED; -} typedef struct cairo_skia_surface { cairo_surface_t base; @@ -542,8 +570,7 @@ _cairo_skia_surface_create_similar (void *asurface, if (! format_to_sk_config (_cairo_format_from_content (content), config, opaque)) { - _skia_unsupported (); - return NULL; + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT)); } return &_cairo_skia_surface_create_internal (config, opaque, @@ -781,7 +808,7 @@ _cairo_skia_surface_paint (void *asurface, shader = pattern_to_sk_shader (surface, source, &image, &image_extra); if (!bitmap && !shader) - return CAIRO_MAYBE_UNSUPPORTED; + return UNSUPPORTED("pattern to bitmap and shader conversion"); SkPaint paint; paint.setFilterBitmap (pattern_filter_to_sk (source)); @@ -838,7 +865,7 @@ _cairo_skia_surface_stroke (void *asurface, SkShader *shader = pattern_to_sk_shader (surface, source, &image, &image_extra); if (shader == NULL) - return CAIRO_MAYBE_UNSUPPORTED; + return UNSUPPORTED("pattern to shader conversion"); paint.setShader (shader); shader->unref (); @@ -941,7 +968,7 @@ _cairo_skia_surface_fill (void *asurface, SkShader *shader = pattern_to_sk_shader (surface, source, &image, &image_extra); if (shader == NULL) - return CAIRO_MAYBE_UNSUPPORTED; + return UNSUPPORTED("pattern to shader conversion"); paint.setShader (shader); shader->unref (); |