Index: src/utils/SkLua.cpp |
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp |
index d6ce0239e1c7edaa6c6bfd6c346da292b296ee9c..ec276db1f607b416efdea4bccdb8f3883fdf2d0d 100644 |
--- a/src/utils/SkLua.cpp |
+++ b/src/utils/SkLua.cpp |
@@ -976,6 +976,73 @@ static int lpath_getBounds(lua_State* L) { |
return 1; |
} |
+static const char* fill_type_to_str(SkPath::FillType fill) { |
+ switch (fill) { |
+ case SkPath::kEvenOdd_FillType: |
+ return "even-odd"; |
+ case SkPath::kWinding_FillType: |
+ return "winding"; |
+ case SkPath::kInverseEvenOdd_FillType: |
+ return "inverse-even-odd"; |
+ case SkPath::kInverseWinding_FillType: |
+ return "inverse-winding"; |
+ } |
+ return "unknown"; |
+} |
+ |
+static int lpath_getFillType(lua_State* L) { |
+ SkPath::FillType fill = get_obj<SkPath>(L, 1)->getFillType(); |
+ SkLua(L).pushString(fill_type_to_str(fill)); |
+ return 1; |
+} |
+ |
+static SkString segment_masks_to_str(uint32_t segmentMasks) { |
+ SkString result; |
+ bool first = true; |
+ if (SkPath::kLine_SegmentMask & segmentMasks) { |
+ result.append("line"); |
+ first = false; |
+ SkDEBUGCODE(segmentMasks &= ~SkPath::kLine_SegmentMask;) |
+ } |
+ if (SkPath::kQuad_SegmentMask & segmentMasks) { |
+ if (!first) { |
+ result.append(" "); |
+ } |
+ result.append("quad"); |
+ first = false; |
+ SkDEBUGCODE(segmentMasks &= ~SkPath::kQuad_SegmentMask;) |
+ } |
+ if (SkPath::kConic_SegmentMask & segmentMasks) { |
+ if (!first) { |
+ result.append(" "); |
+ } |
+ result.append("conic"); |
+ first = false; |
+ SkDEBUGCODE(segmentMasks &= ~SkPath::kConic_SegmentMask;) |
+ } |
+ if (SkPath::kCubic_SegmentMask & segmentMasks) { |
+ if (!first) { |
+ result.append(" "); |
+ } |
+ result.append("cubic"); |
+ SkDEBUGCODE(segmentMasks &= ~SkPath::kCubic_SegmentMask;) |
+ } |
+ SkASSERT(0 == segmentMasks); |
+ return result; |
+} |
+ |
+static int lpath_getSegementTypes(lua_State* L) { |
+ uint32_t segMasks = get_obj<SkPath>(L, 1)->getSegmentMasks(); |
+ SkLua(L).pushString(segment_masks_to_str(segMasks)); |
+ return 1; |
+} |
+ |
+static int lpath_isConvex(lua_State* L) { |
+ bool isConvex = SkPath::kConvex_Convexity == get_obj<SkPath>(L, 1)->getConvexity(); |
+ SkLua(L).pushBool(isConvex); |
+ return 1; |
+} |
+ |
static int lpath_isEmpty(lua_State* L) { |
lua_pushboolean(L, get_obj<SkPath>(L, 1)->isEmpty()); |
return 1; |
@@ -1058,6 +1125,9 @@ static int lpath_gc(lua_State* L) { |
static const struct luaL_Reg gSkPath_Methods[] = { |
{ "getBounds", lpath_getBounds }, |
+ { "getFillType", lpath_getFillType }, |
+ { "getSegmentTypes", lpath_getSegementTypes }, |
+ { "isConvex", lpath_isConvex }, |
{ "isEmpty", lpath_isEmpty }, |
{ "isRect", lpath_isRect }, |
{ "isNestedRects", lpath_isNestedRects }, |