| Index: src/utils/SkLua.cpp
|
| diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
|
| index a3a1685eae897625dc22b0f722ca081ffe98374d..3a335ad17c589441574fbe3b608fac4f8f2bd1eb 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 },
|
|
|