diff options
author | reed <reed@chromium.org> | 2014-12-23 14:11:11 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-23 14:11:11 -0800 |
commit | 0eafc9b06cbfd47e9c3471c82580790cef0fdae5 (patch) | |
tree | deecffd9c2d96453dd8f4ba348762718ec61d077 /src/c | |
parent | 0e9ab4e3db33d91c8c8ab4d1af5fb8e56602189f (diff) |
add maskfilter to c api
BUG=skia:
TBR=
Review URL: https://codereview.chromium.org/822053002
Diffstat (limited to 'src/c')
-rw-r--r-- | src/c/sk_surface.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
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<SkCanvas*>(ccanvas); } +static SkMaskFilter* AsMaskFilter(sk_maskfilter_t* cfilter) { + return reinterpret_cast<SkMaskFilter*>(cfilter); +} + +static sk_maskfilter_t* ToMaskFilter(SkMaskFilter* filter) { + return reinterpret_cast<sk_maskfilter_t*>(filter); +} + static SkShader* AsShader(sk_shader_t* cshader) { return reinterpret_cast<SkShader*>(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() { @@ -535,6 +548,49 @@ sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t pts[2], } /////////////////////////////////////////////////////////////////////////////////////////// + +#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)); +} + +/////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// void sk_test_capi(SkCanvas* canvas) { |