Chromium Code Reviews| Index: src/utils/SkLua.cpp |
| diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp |
| index a3a1685eae897625dc22b0f722ca081ffe98374d..94dab4ee6679f7ee28db55348836f01f57deb029 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); |
|
reed1
2016/08/01 21:17:21
indent is too far
Harry Stern
2016/08/01 22:07:33
Done.
|
| + 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; |
|
reed1
2016/08/01 21:17:21
indent?
Harry Stern
2016/08/01 22:07:33
Done.
|
| + 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; |
| + } |
|
reed1
2016/08/01 21:17:21
indent?
Harry Stern
2016/08/01 22:07:33
Done.
|
| + } 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 }, |