| Index: src/utils/SkLua.cpp
|
| diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
|
| index ec276db1f607b416efdea4bccdb8f3883fdf2d0d..282e4ef4405cba23a34781010677fd892e9ecfab 100644
|
| --- a/src/utils/SkLua.cpp
|
| +++ b/src/utils/SkLua.cpp
|
| @@ -6,8 +6,9 @@
|
| */
|
|
|
| #include "SkLua.h"
|
| +
|
| +#include "GrReducedClip.h"
|
| #include "SkCanvas.h"
|
| -#include "SkClipStack.h"
|
| #include "SkData.h"
|
| #include "SkDocument.h"
|
| #include "SkImage.h"
|
| @@ -273,29 +274,35 @@ void SkLua::pushClipStack(const SkClipStack& stack, const char* key) {
|
| const SkClipStack::Element* element;
|
| int i = 0;
|
| while (NULL != (element = iter.next())) {
|
| - lua_newtable(fL);
|
| - SkClipStack::Element::Type type = element->getType();
|
| - this->pushString(element_type(type), "type");
|
| - switch (type) {
|
| - case SkClipStack::Element::kEmpty_Type:
|
| - break;
|
| - case SkClipStack::Element::kRect_Type:
|
| - this->pushRect(element->getRect(), "rect");
|
| - break;
|
| - case SkClipStack::Element::kRRect_Type:
|
| - this->pushRRect(element->getRRect(), "rrect");
|
| - break;
|
| - case SkClipStack::Element::kPath_Type:
|
| - this->pushPath(element->getPath(), "path");
|
| - break;
|
| - }
|
| - this->pushString(region_op(element->getOp()), "op");
|
| - this->pushBool(element->isAA(), "aa");
|
| + this->pushClipStackElement(*element);
|
| lua_rawseti(fL, -2, ++i);
|
| }
|
| CHECK_SETFIELD(key);
|
| }
|
|
|
| +void SkLua::pushClipStackElement(const SkClipStack::Element& element, const char* key) {
|
| + lua_newtable(fL);
|
| + SkClipStack::Element::Type type = element.getType();
|
| + this->pushString(element_type(type), "type");
|
| + switch (type) {
|
| + case SkClipStack::Element::kEmpty_Type:
|
| + break;
|
| + case SkClipStack::Element::kRect_Type:
|
| + this->pushRect(element.getRect(), "rect");
|
| + break;
|
| + case SkClipStack::Element::kRRect_Type:
|
| + this->pushRRect(element.getRRect(), "rrect");
|
| + break;
|
| + case SkClipStack::Element::kPath_Type:
|
| + this->pushPath(element.getPath(), "path");
|
| + break;
|
| + }
|
| + this->pushString(region_op(element.getOp()), "op");
|
| + this->pushBool(element.isAA(), "aa");
|
| + CHECK_SETFIELD(key);
|
| +}
|
| +
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| @@ -444,6 +451,41 @@ static int lcanvas_getClipStack(lua_State* L) {
|
| return 1;
|
| }
|
|
|
| +int SkLua::lcanvas_getReducedClipStack(lua_State* L) {
|
| + const SkCanvas* canvas = get_ref<SkCanvas>(L, 1);
|
| + SkISize layerSize = canvas->getTopLayerSize();
|
| + SkIPoint layerOrigin = canvas->getTopLayerOrigin();
|
| + SkIRect queryBounds = SkIRect::MakeXYWH(layerOrigin.fX, layerOrigin.fY,
|
| + layerSize.fWidth, layerSize.fHeight);
|
| +
|
| + GrReducedClip::ElementList elements;
|
| + GrReducedClip::InitialState initialState;
|
| + int32_t genID;
|
| + SkIRect resultBounds;
|
| +
|
| + const SkClipStack& stack = *canvas->getClipStack();
|
| +
|
| + GrReducedClip::ReduceClipStack(stack,
|
| + queryBounds,
|
| + &elements,
|
| + &genID,
|
| + &initialState,
|
| + &resultBounds,
|
| + NULL);
|
| +
|
| + GrReducedClip::ElementList::Iter iter(elements);
|
| + int i = 0;
|
| + lua_newtable(L);
|
| + while(NULL != iter.get()) {
|
| + SkLua(L).pushClipStackElement(*iter.get());
|
| + iter.next();
|
| + lua_rawseti(L, -2, ++i);
|
| + }
|
| + // Currently this only returns the element list to lua, not the initial state or result bounds.
|
| + // It could return these as additional items on the lua stack.
|
| + return 1;
|
| +}
|
| +
|
| static int lcanvas_save(lua_State* L) {
|
| lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save());
|
| return 1;
|
| @@ -479,7 +521,7 @@ static int lcanvas_gc(lua_State* L) {
|
| return 0;
|
| }
|
|
|
| -static const struct luaL_Reg gSkCanvas_Methods[] = {
|
| +const struct luaL_Reg gSkCanvas_Methods[] = {
|
| { "drawColor", lcanvas_drawColor },
|
| { "drawRect", lcanvas_drawRect },
|
| { "drawOval", lcanvas_drawOval },
|
| @@ -490,6 +532,7 @@ static const struct luaL_Reg gSkCanvas_Methods[] = {
|
| { "getSaveCount", lcanvas_getSaveCount },
|
| { "getTotalMatrix", lcanvas_getTotalMatrix },
|
| { "getClipStack", lcanvas_getClipStack },
|
| + { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack },
|
| { "save", lcanvas_save },
|
| { "restore", lcanvas_restore },
|
| { "scale", lcanvas_scale },
|
|
|