Re: [PATCH] skia: update the source to build with the latest skia
"Bryce W. Harrington" <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
LGTM, these changes only affect the skia backend (which currently is completely broken to build for me without this patch), so I think this is quite safe to apply to trunk. If no one has reservations, I can merge this to trunk later this week. Tested-by: Bryce Harrington <[email protected]> Bryce On Mon, Jun 23, 2014 at 02:14:36PM +0530, Ravi Nanjundappa wrote: > This fixes several build related issues for the skia backend > which is introduced due to skia source up-gradation. > > Signed-off-by: Ravi Nanjundappa <[email protected]> > --- > configure.ac | 12 ++++---- > src/skia/cairo-skia-context.cpp | 61 ++++++++++++++++++++++++++++++--------- > src/skia/cairo-skia-private.h | 4 +-- > src/skia/cairo-skia-surface.cpp | 9 ++---- > 4 files changed, 58 insertions(+), 28 deletions(-) > > diff --git a/configure.ac b/configure.ac > index fdcb2dc..04479ff 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -249,16 +249,16 @@ CAIRO_ENABLE_SURFACE_BACKEND(skia, Skia, no, [ > [directory to find compiled skia sources])], > [skia_DIR="$withval"], > [skia_DIR="`pwd`/../skia"]) > - AC_ARG_WITH([skia-bulid], > - [AS_HELP_STRING([--with-skia-build=(Release|Debug)] > + AC_ARG_WITH([skia-build-type], > + [AS_HELP_STRING([--with-skia-build-type=(Release|Debug)] > [build of skia to link with, default is Release])], > - [skia_BUILD="$withval"], > - [skia_BUILD="Release"]) > + [skia_BUILD_TYPE="$withval"], > + [skia_BUILD_TYPE="Release"]) > skia_NONPKGCONFIG_CFLAGS="-I$skia_DIR/include/config -I$skia_DIR/include/core -I$skia_DIR/include/effects" > - if test "x$skia_BUILD" = x"Release"; then > + if test "x$skia_BUILD_TYPE" = "xRelease"; then > skia_NONPKGCONFIG_CFLAGS="-DSK_RELEASE -DSK_CAN_USE_FLOAT $skia_NONPKGCONFIG_CFLAGS" > fi > - skia_NONPKGCONFIG_LIBS="--start-group $skia_DIR/out/$skia_BUILD/obj.target/gyp/libeffects.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libimages.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libutils.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libopts.a $skia_DIR/out/$skia_BUILD/obj.target/gyp/libcore.a -end-group" > + skia_NONPKGCONFIG_LIBS="-L$skia_DIR/out/$skia_BUILD_TYPE/lib.target/ -lskia -lstdc++" > AC_SUBST(skia_DIR) > ]) > > diff --git a/src/skia/cairo-skia-context.cpp b/src/skia/cairo-skia-context.cpp > index bbe5507..c2d9fba 100644 > --- a/src/skia/cairo-skia-context.cpp > +++ b/src/skia/cairo-skia-context.cpp > @@ -53,6 +53,7 @@ > #include "cairo-skia-private.h" > #include "cairo-surface-backend-private.h" > > +#include <SkPaint.h> > #include <SkShader.h> > #include <SkColorShader.h> > #include <SkGradientShader.h> > @@ -236,14 +237,15 @@ surface_to_sk_bitmap (cairo_surface_t *surface, SkBitmap& bitmap) > { > cairo_image_surface_t *img = (cairo_image_surface_t *) surface; > SkBitmap::Config config; > + SkColorType colorType; > bool opaque; > > if (unlikely (! format_to_sk_config (img->format, config, opaque))) > return false; > > bitmap.reset (); > - bitmap.setConfig (config, img->width, img->height, img->stride); > - bitmap.setIsOpaque (opaque); > + colorType = SkBitmapConfigToColorType(config); > + bitmap.setInfo (SkImageInfo::Make(img->width, img->height, colorType, kPremul_SkAlphaType), img->stride); > bitmap.setPixels (img->data); > > return true; > @@ -330,9 +332,18 @@ source_to_sk_shader (cairo_skia_context_t *cr, > if (surface->type == CAIRO_SURFACE_TYPE_SKIA) { > cairo_skia_surface_t *esurf = (cairo_skia_surface_t *) surface; > > - shader = SkShader::CreateBitmapShader (*esurf->bitmap, > + if(! _cairo_matrix_is_identity (&pattern->matrix)) > + { > + SkMatrix localMatrix = matrix_inverse_to_sk (pattern->matrix); > + shader = SkShader::CreateBitmapShader (*esurf->bitmap, > + extend_to_sk (pattern->extend), > + extend_to_sk (pattern->extend), > + &localMatrix); > + } else { > + shader = SkShader::CreateBitmapShader (*esurf->bitmap, > extend_to_sk (pattern->extend), > extend_to_sk (pattern->extend)); > + } > } else { > SkBitmap bitmap; > > @@ -351,9 +362,18 @@ source_to_sk_shader (cairo_skia_context_t *cr, > if (unlikely (! surface_to_sk_bitmap (surface, bitmap))) > return NULL; > > - shader = SkShader::CreateBitmapShader (bitmap, > - extend_to_sk (pattern->extend), > - extend_to_sk (pattern->extend)); > + if(! _cairo_matrix_is_identity (&pattern->matrix)) > + { > + SkMatrix localMatrix = matrix_inverse_to_sk (pattern->matrix); > + shader = SkShader::CreateBitmapShader (bitmap, > + extend_to_sk (pattern->extend), > + extend_to_sk (pattern->extend), > + &localMatrix); > + } else { > + shader = SkShader::CreateBitmapShader (bitmap, > + extend_to_sk (pattern->extend), > + extend_to_sk (pattern->extend)); > + } > } > } else if (pattern->type == CAIRO_PATTERN_TYPE_LINEAR > /* || pattern->type == CAIRO_PATTERN_TYPE_RADIAL */) > @@ -382,8 +402,17 @@ source_to_sk_shader (cairo_skia_context_t *cr, > SkFloatToScalar (linear->pd1.y)); > points[1].set (SkFloatToScalar (linear->pd2.x), > SkFloatToScalar (linear->pd2.y)); > - shader = SkGradientShader::CreateLinear (points, colors, pos, gradient->n_stops, > + > + if(! _cairo_matrix_is_identity (&pattern->matrix)) > + { > + SkMatrix localMatrix = matrix_inverse_to_sk (pattern->matrix); > + shader = SkGradientShader::CreateLinear (points, colors, pos, gradient->n_stops, > + extend_to_sk (pattern->extend), > + 0, &localMatrix); > + } else { > + shader = SkGradientShader::CreateLinear (points, colors, pos, gradient->n_stops, > extend_to_sk (pattern->extend)); > + } > } else { > // XXX todo -- implement real radial shaders in Skia > } > @@ -394,8 +423,8 @@ source_to_sk_shader (cairo_skia_context_t *cr, > } > } > > - if (shader && ! _cairo_matrix_is_identity (&pattern->matrix)) > - shader->setLocalMatrix (matrix_inverse_to_sk (pattern->matrix)); > + //if (shader && ! _cairo_matrix_is_identity (&pattern->matrix)) > + //shader->setLocalMatrix (matrix_inverse_to_sk (pattern->matrix)); > > return shader; > } > @@ -446,6 +475,7 @@ _cairo_skia_context_set_source (void *abstract_cr, > cr->paint->setColor (color); > } else { > SkShader *shader = source_to_sk_shader (cr, source); > + SkPaint::FilterLevel fLevel = (SkPaint::FilterLevel) pattern_filter_to_sk (source); > if (shader == NULL) { > UNSUPPORTED; > return CAIRO_STATUS_SUCCESS; > @@ -454,7 +484,9 @@ _cairo_skia_context_set_source (void *abstract_cr, > cr->paint->setShader (shader); > shader->unref (); > > - cr->paint->setFilterBitmap (pattern_filter_to_sk (source)); > + cr->paint->setFilterLevel(fLevel ? > + (SkPaint::kLow_FilterLevel) : > + (SkPaint::kNone_FilterLevel)); > } > > /* XXX change notification */ > @@ -496,7 +528,10 @@ _cairo_skia_context_set_source_surface (void *abstract_cr, > cr->paint->setShader (shader); > shader->unref (); > > - cr->paint->setFilterBitmap (true); > + cr->paint->setFilterLevel(true ? > + (SkPaint::kLow_FilterLevel) : > + (SkPaint::kNone_FilterLevel)); > + > > return CAIRO_STATUS_SUCCESS; > } > @@ -682,7 +717,7 @@ _cairo_skia_context_set_dash (void *abstract_cr, > intervals[i++] = SkFloatToScalar (dashes[j]); > } while (loop--); > > - SkDashPathEffect *dash = new SkDashPathEffect (intervals, num_dashes, SkFloatToScalar (offset)); > + SkDashPathEffect *dash = SkDashPathEffect::Create (intervals, num_dashes, SkFloatToScalar (offset)); > > cr->paint->setPathEffect (dash); > dash->unref (); > @@ -1264,7 +1299,7 @@ _cairo_skia_context_paint_with_alpha (void *abstract_cr, > if (CAIRO_ALPHA_IS_OPAQUE (alpha)) > return _cairo_skia_context_paint (cr); > > - cr->paint->setAlpha(SkScalarRound(255*alpha)); > + cr->paint->setAlpha(SkScalarRoundToInt(255*alpha)); > status = _cairo_skia_context_paint (cr); > cr->paint->setAlpha(255); > > diff --git a/src/skia/cairo-skia-private.h b/src/skia/cairo-skia-private.h > index de3897b..f538b48 100644 > --- a/src/skia/cairo-skia-private.h > +++ b/src/skia/cairo-skia-private.h > @@ -111,11 +111,9 @@ format_to_sk_config (cairo_format_t format, > case CAIRO_FORMAT_A8: > config = SkBitmap::kA8_Config; > break; > - case CAIRO_FORMAT_A1: > - config = SkBitmap::kA1_Config; > - break; > case CAIRO_FORMAT_RGB30: > case CAIRO_FORMAT_INVALID: > + case CAIRO_FORMAT_A1: > default: > return false; > } > diff --git a/src/skia/cairo-skia-surface.cpp b/src/skia/cairo-skia-surface.cpp > index bb785e1..682f3db 100644 > --- a/src/skia/cairo-skia-surface.cpp > +++ b/src/skia/cairo-skia-surface.cpp > @@ -207,9 +207,6 @@ sk_config_to_pixman_format_code (SkBitmap::Config config, > > case SkBitmap::kA8_Config: > return PIXMAN_a8; > - > - case SkBitmap::kA1_Config: > - return PIXMAN_a1; > case SkBitmap::kRGB_565_Config: > return PIXMAN_r5g6b5; > case SkBitmap::kARGB_4444_Config: > @@ -217,7 +214,6 @@ sk_config_to_pixman_format_code (SkBitmap::Config config, > > case SkBitmap::kNo_Config: > case SkBitmap::kIndex8_Config: > - case SkBitmap::kRLE_Index8_Config: > case SkBitmap::kConfigCount: > default: > ASSERT_NOT_REACHED; > @@ -236,6 +232,7 @@ _cairo_skia_surface_create_internal (SkBitmap::Config config, > cairo_skia_surface_t *surface; > pixman_image_t *pixman_image; > pixman_format_code_t pixman_format; > + SkColorType colorType; > > surface = (cairo_skia_surface_t *) malloc (sizeof (cairo_skia_surface_t)); > if (unlikely (surface == NULL)) > @@ -256,8 +253,8 @@ _cairo_skia_surface_create_internal (SkBitmap::Config config, > _cairo_image_surface_init (&surface->image, pixman_image, pixman_format); > > surface->bitmap = new SkBitmap; > - surface->bitmap->setConfig (config, width, height, surface->image.stride); > - surface->bitmap->setIsOpaque (opaque); > + colorType = SkBitmapConfigToColorType(config); > + surface->bitmap->setInfo (SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType), surface->image.stride); > surface->bitmap->setPixels (surface->image.data); > > surface->image.base.is_clear = data == NULL; > -- > 1.7.9.5 > > -- > cairo mailing list > [email protected] > http://lists.cairographics.org/mailman/listinfo/cairo -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo