Skip to content

Commit 828f7b0

Browse files
authored
Merge pull request #130 from ahmed605/skiasharp
Export sk_canvas_save_layer_rec to expose SkCanvas::SaveLayerRec functionality
2 parents fba3492 + d678a70 commit 828f7b0

File tree

5 files changed

+33
-0
lines changed

5 files changed

+33
-0
lines changed

include/c/sk_canvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ SK_C_API bool sk_canvas_get_local_clip_bounds(sk_canvas_t* ccanvas, sk_rect_t* c
3838
SK_C_API bool sk_canvas_get_device_clip_bounds(sk_canvas_t* ccanvas, sk_irect_t* cbounds);
3939
SK_C_API int sk_canvas_save(sk_canvas_t* ccanvas);
4040
SK_C_API int sk_canvas_save_layer(sk_canvas_t* ccanvas, const sk_rect_t* crect, const sk_paint_t* cpaint);
41+
SK_C_API int sk_canvas_save_layer_rec(sk_canvas_t* ccanvas, const sk_canvas_savelayerrec_t* crec);
4142
SK_C_API void sk_canvas_restore(sk_canvas_t* ccanvas);
4243
SK_C_API void sk_canvas_translate(sk_canvas_t* ccanvas, float dx, float dy);
4344
SK_C_API void sk_canvas_scale(sk_canvas_t* ccanvas, float sx, float sy);

include/c/sk_types.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,6 +1078,20 @@ typedef struct {
10781078
sk_mipmap_mode_t fMipmap;
10791079
} sk_sampling_options_t;
10801080

1081+
typedef enum {
1082+
NONE_SK_CANVAS_SAVELAYERREC_FLAGS = 0,
1083+
PRESERVE_LCD_TEXT_SK_CANVAS_SAVELAYERREC_FLAGS = 1 << 1,
1084+
INITIALIZE_WITH_PREVIOUS_SK_CANVAS_SAVELAYERREC_FLAGS = 1 << 2,
1085+
F16_COLOR_TYPE_SK_CANVAS_SAVELAYERREC_FLAGS = 1 << 4,
1086+
} sk_canvas_savelayerrec_flags_t;
1087+
1088+
typedef struct {
1089+
sk_rect_t* fBounds;
1090+
sk_paint_t* fPaint;
1091+
sk_imagefilter_t* fBackdrop;
1092+
sk_canvas_savelayerrec_flags_t fFlags;
1093+
} sk_canvas_savelayerrec_t;
1094+
10811095
/*
10821096
* Skottie Animation
10831097
*/

src/c/sk_canvas.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ int sk_canvas_save_layer(sk_canvas_t* ccanvas, const sk_rect_t* crect, const sk_
113113
return AsCanvas(ccanvas)->saveLayer(AsRect(crect), AsPaint(cpaint));
114114
}
115115

116+
int sk_canvas_save_layer_rec(sk_canvas_t* ccanvas, const sk_canvas_savelayerrec_t* crec) {
117+
return AsCanvas(ccanvas)->saveLayer(AsCanvasSaveLayerRec(crec));
118+
}
119+
116120
void sk_canvas_restore(sk_canvas_t* ccanvas) {
117121
AsCanvas(ccanvas)->restore();
118122
}

src/c/sk_enums.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,12 @@ static_assert ((int)SkRuntimeEffect::Uniform::Flags::kVertex_Flag == (i
395395
static_assert ((int)SkRuntimeEffect::Uniform::Flags::kFragment_Flag == (int)FRAGMENT_SK_RUNTIMEEFFECT_UNIFORM_FLAGS, ASSERT_MSG(SkRuntimeEffect::Uniform::Flags, sk_runtimeeffect_uniform_flags_t));
396396
static_assert ((int)SkRuntimeEffect::Uniform::Flags::kHalfPrecision_Flag == (int)HALF_PRECISION_SK_RUNTIMEEFFECT_UNIFORM_FLAGS, ASSERT_MSG(SkRuntimeEffect::Uniform::Flags, sk_runtimeeffect_uniform_flags_t));
397397

398+
// sk_canvas_savelayerrec_flags_t
399+
static_assert ((int)0 == (int)NONE_SK_CANVAS_SAVELAYERREC_FLAGS, ASSERT_MSG(SkCanvas::SaveLayerFlagsSet, sk_canvas_savelayerrec_flags_t));
400+
static_assert ((int)SkCanvas::SaveLayerFlagsSet::kPreserveLCDText_SaveLayerFlag == (int)PRESERVE_LCD_TEXT_SK_CANVAS_SAVELAYERREC_FLAGS, ASSERT_MSG(SkCanvas::SaveLayerFlagsSet, sk_canvas_savelayerrec_flags_t));
401+
static_assert ((int)SkCanvas::SaveLayerFlagsSet::kInitWithPrevious_SaveLayerFlag == (int)INITIALIZE_WITH_PREVIOUS_SK_CANVAS_SAVELAYERREC_FLAGS, ASSERT_MSG(SkCanvas::SaveLayerFlagsSet, sk_canvas_savelayerrec_flags_t));
402+
static_assert ((int)SkCanvas::SaveLayerFlagsSet::kF16ColorType == (int)F16_COLOR_TYPE_SK_CANVAS_SAVELAYERREC_FLAGS, ASSERT_MSG(SkCanvas::SaveLayerFlagsSet, sk_canvas_savelayerrec_flags_t));
403+
398404
#if defined(SK_GANESH)
399405

400406
// gr_surfaceorigin_t

src/c/sk_types_priv.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,14 @@ DEF_MAP(SkRuntimeEffect::Child, sk_runtimeeffect_child_t, RuntimeEffectChild)
184184
#include "include/core/SkCanvas.h"
185185
DEF_MAP(SkCanvas::Lattice, sk_lattice_t, Lattice)
186186

187+
static inline SkCanvas::SaveLayerRec AsCanvasSaveLayerRec(const sk_canvas_savelayerrec_t* rec) {
188+
return SkCanvas::SaveLayerRec(
189+
AsRect(rec->fBounds),
190+
AsPaint(rec->fPaint),
191+
AsImageFilter(rec->fBackdrop),
192+
(SkCanvas::SaveLayerFlags)rec->fFlags);
193+
}
194+
187195
#include "include/codec/SkCodec.h"
188196
DEF_MAP(SkCodec::FrameInfo, sk_codec_frameinfo_t, FrameInfo)
189197
DEF_MAP(SkCodec::Options, sk_codec_options_t, CodecOptions)

0 commit comments

Comments
 (0)