[C API] Extra members on the SkCanvas API
authorMatthew Leibowitz <mattleibow@live.com>
Mon, 11 Jan 2016 23:32:33 +0000 (01:32 +0200)
committerMatthew Leibowitz <mattleibow@live.com>
Mon, 11 Jan 2016 23:32:33 +0000 (01:32 +0200)
include/c/sk_canvas.h
src/c/sk_surface.cpp

index 11f10408f5a60ff8d743436a78b241725b00b1e3..03b9c205d4d92b28badb6bd99477353b02974de2 100644 (file)
@@ -65,6 +65,19 @@ SK_API void sk_canvas_save_layer(sk_canvas_t*, const sk_rect_t*, const sk_paint_
     save_layer were called.
 */
 SK_API void sk_canvas_restore(sk_canvas_t*);
+/**
+    Returns the number of matrix/clip states on the SkCanvas' private stack.
+    This will equal # save() calls - # restore() calls + 1. The save count on
+    a new canvas is 1.
+*/
+SK_API int sk_canvas_get_save_count(sk_canvas_t*);
+/**
+    Efficient way to pop any calls to sk_canvas_save() that happened after the save
+    count reached saveCount. It is an error for saveCount to be greater than
+    getSaveCount(). To pop all the way back to the initial matrix/clip context
+    pass saveCount == 1.
+*/
+SK_API void sk_canvas_restore_to_count(sk_canvas_t*, int saveCount);
 
 /**
     Preconcat the current coordinate transformation matrix with the
index 40e6b662ac463301e762341f8857a9e3b7ff94be..06927663db38ee17e36701ce6e4ae364c568414d 100644 (file)
@@ -328,13 +328,21 @@ void sk_canvas_discard(sk_canvas_t* ccanvas) {
     AsCanvas(ccanvas)->discard();
 }
 void sk_canvas_save_layer(sk_canvas_t* ccanvas, const sk_rect_t* crect, const sk_paint_t* cpaint) {
-    AsCanvas(ccanvas)->drawRect(AsRect(*crect), AsPaint(*cpaint));
+    AsCanvas(ccanvas)->saveLayer(AsRect(crect), AsPaint(cpaint));
 }
 
 void sk_canvas_restore(sk_canvas_t* ccanvas) {
     AsCanvas(ccanvas)->restore();
 }
 
+int sk_canvas_get_save_count(sk_canvas_t* ccanvas) {
+    return AsCanvas(ccanvas)->getSaveCount();
+}
+
+void sk_canvas_restore_to_count(sk_canvas_t* ccanvas, int saveCount) {
+    AsCanvas(ccanvas)->restoreToCount(saveCount);
+}
+
 void sk_canvas_translate(sk_canvas_t* ccanvas, float dx, float dy) {
     AsCanvas(ccanvas)->translate(dx, dy);
 }