aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkLua.cpp
diff options
context:
space:
mode:
authorGravatar hstern <hstern@google.com>2016-08-02 09:17:59 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-02 09:17:59 -0700
commit0b401ce663ef80222e0eb3a54bdd4c42af8e48e1 (patch)
tree47ddeb87c605f20d65dbc0f7dbbda85e1a11a88a /src/utils/SkLua.cpp
parent86baf3d8de02a2118ac6e603b1152c3bc5d8b2b3 (diff)
Add code to lua paths to get the fill path and get lists of verbs and
Diffstat (limited to 'src/utils/SkLua.cpp')
-rw-r--r--src/utils/SkLua.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index a3a1685eae..3a335ad17c 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -221,6 +221,11 @@ static void setarray_scalar(lua_State* L, int index, SkScalar value) {
setarray_number(L, index, SkScalarToLua(value));
}
+static void setarray_string(lua_State* L, int index, const char str[]) {
+ lua_pushstring(L, str);
+ lua_rawseti(L, -2, index);
+}
+
void SkLua::pushBool(bool value, const char key[]) {
lua_pushboolean(fL, value);
CHECK_SETFIELD(key);
@@ -1159,6 +1164,19 @@ static int lpaint_getPathEffect(lua_State* L) {
return 0;
}
+static int lpaint_getFillPath(lua_State* L) {
+ const SkPaint* paint = get_obj<SkPaint>(L, 1);
+ const SkPath* path = get_obj<SkPath>(L, 2);
+
+ SkPath fillpath;
+ paint->getFillPath(*path, &fillpath);
+
+ SkLua lua(L);
+ lua.pushPath(fillpath);
+
+ return 1;
+}
+
static int lpaint_gc(lua_State* L) {
get_obj<SkPaint>(L, 1)->~SkPaint();
return 0;
@@ -1217,6 +1235,7 @@ static const struct luaL_Reg gSkPaint_Methods[] = {
{ "getShader", lpaint_getShader },
{ "setShader", lpaint_setShader },
{ "getPathEffect", lpaint_getPathEffect },
+ { "getFillPath", lpaint_getFillPath },
{ "__gc", lpaint_gc },
{ nullptr, nullptr }
};
@@ -1586,6 +1605,45 @@ static int lpath_countPoints(lua_State* L) {
return 1;
}
+static int lpath_getVerbs(lua_State* L) {
+ const SkPath* path = get_obj<SkPath>(L, 1);
+ SkPath::Iter iter(*path, false);
+ SkPoint pts[4];
+
+ lua_newtable(L);
+
+ bool done = false;
+ int i = 0;
+ do {
+ switch (iter.next(pts, true)) {
+ case SkPath::kMove_Verb:
+ setarray_string(L, ++i, "move");
+ break;
+ case SkPath::kClose_Verb:
+ setarray_string(L, ++i, "close");
+ break;
+ case SkPath::kLine_Verb:
+ setarray_string(L, ++i, "line");
+ break;
+ case SkPath::kQuad_Verb:
+ setarray_string(L, ++i, "quad");
+ break;
+ case SkPath::kConic_Verb:
+ setarray_string(L, ++i, "conic");
+ break;
+ case SkPath::kCubic_Verb:
+ setarray_string(L, ++i, "cubic");
+ break;
+ case SkPath::kDone_Verb:
+ setarray_string(L, ++i, "done");
+ done = true;
+ break;
+ }
+ } while (!done);
+
+ return 1;
+}
+
static int lpath_reset(lua_State* L) {
get_obj<SkPath>(L, 1)->reset();
return 0;
@@ -1628,6 +1686,7 @@ static const struct luaL_Reg gSkPath_Methods[] = {
{ "getBounds", lpath_getBounds },
{ "getFillType", lpath_getFillType },
{ "getSegmentTypes", lpath_getSegmentTypes },
+ { "getVerbs", lpath_getVerbs },
{ "isConvex", lpath_isConvex },
{ "isEmpty", lpath_isEmpty },
{ "isRect", lpath_isRect },