From 0eafc9b06cbfd47e9c3471c82580790cef0fdae5 Mon Sep 17 00:00:00 2001 From: reed Date: Tue, 23 Dec 2014 14:11:11 -0800 Subject: add maskfilter to c api BUG=skia: TBR= Review URL: https://codereview.chromium.org/822053002 --- src/c/sk_surface.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'src/c') diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp index 0a940022e8..6653a298c4 100644 --- a/src/c/sk_surface.cpp +++ b/src/c/sk_surface.cpp @@ -13,6 +13,7 @@ #include "SkCanvas.h" #include "SkImage.h" +#include "SkMaskFilter.h" #include "SkMatrix.h" #include "SkPaint.h" #include "SkPath.h" @@ -162,6 +163,14 @@ static SkCanvas* AsCanvas(sk_canvas_t* ccanvas) { return reinterpret_cast(ccanvas); } +static SkMaskFilter* AsMaskFilter(sk_maskfilter_t* cfilter) { + return reinterpret_cast(cfilter); +} + +static sk_maskfilter_t* ToMaskFilter(SkMaskFilter* filter) { + return reinterpret_cast(filter); +} + static SkShader* AsShader(sk_shader_t* cshader) { return reinterpret_cast(cshader); } @@ -257,6 +266,10 @@ void sk_paint_set_shader(sk_paint_t* cpaint, sk_shader_t* cshader) { AsPaint(cpaint)->setShader(AsShader(cshader)); } +void sk_paint_set_maskfilter(sk_paint_t* cpaint, sk_maskfilter_t* cfilter) { + AsPaint(cpaint)->setMaskFilter(AsMaskFilter(cfilter)); +} + /////////////////////////////////////////////////////////////////////////////////////////// sk_path_t* sk_path_new() { @@ -534,6 +547,49 @@ sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t pts[2], return (sk_shader_t*)s; } +/////////////////////////////////////////////////////////////////////////////////////////// + +#include "../../include/effects/SkBlurMaskFilter.h" +#include "sk_maskfilter.h" + +const struct { + sk_blurstyle_t fC; + SkBlurStyle fSk; +} gBlurStylePairs[] = { + { NORMAL_SK_BLUR_STYLE, kNormal_SkBlurStyle }, + { SOLID_SK_BLUR_STYLE, kSolid_SkBlurStyle }, + { OUTER_SK_BLUR_STYLE, kOuter_SkBlurStyle }, + { INNER_SK_BLUR_STYLE, kInner_SkBlurStyle }, +}; + +static bool find_blurstyle(sk_blurstyle_t csrc, SkBlurStyle* dst) { + for (size_t i = 0; i < SK_ARRAY_COUNT(gBlurStylePairs); ++i) { + if (gBlurStylePairs[i].fC == csrc) { + if (dst) { + *dst = gBlurStylePairs[i].fSk; + } + return true; + } + } + return false; +} + +void sk_maskfilter_ref(sk_maskfilter_t* cfilter) { + SkSafeRef(AsMaskFilter(cfilter)); +} + +void sk_maskfilter_unref(sk_maskfilter_t* cfilter) { + SkSafeUnref(AsMaskFilter(cfilter)); +} + +sk_maskfilter_t* sk_maskfilter_new_blur(sk_blurstyle_t cstyle, float sigma) { + SkBlurStyle style; + if (!find_blurstyle(cstyle, &style)) { + return NULL; + } + return ToMaskFilter(SkBlurMaskFilter::Create(style, sigma)); +} + /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3