diff options
author | 2014-02-26 20:22:32 +0000 | |
---|---|---|
committer | 2014-02-26 20:22:32 +0000 | |
commit | 4ebe3821888d550d8a8b89341ec251ba942f0225 (patch) | |
tree | 19b88320d8eb8e0616754c4da672c629424ba205 /src/utils | |
parent | 16f418080ff6751e15e0193263149412de9c848a (diff) |
Revert "Revert of Add getReducedClipStack to lua canvas (https://codereview.chromium.org/180283004/)"
This reverts commit efded03a38d6147caaf2d951638d27fdd47eed64.
Fixes builds
Review URL: https://codereview.chromium.org/181903002
git-svn-id: http://skia.googlecode.com/svn/trunk@13599 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/SkLua.cpp | 92 |
1 files changed, 72 insertions, 20 deletions
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp index ec276db1f6..d1193a7693 100644 --- a/src/utils/SkLua.cpp +++ b/src/utils/SkLua.cpp @@ -6,8 +6,12 @@ */ #include "SkLua.h" + +#if SK_SUPPORT_GPU +#include "GrReducedClip.h" +#endif + #include "SkCanvas.h" -#include "SkClipStack.h" #include "SkData.h" #include "SkDocument.h" #include "SkImage.h" @@ -273,29 +277,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 +454,45 @@ static int lcanvas_getClipStack(lua_State* L) { return 1; } +int SkLua::lcanvas_getReducedClipStack(lua_State* L) { +#if SK_SUPPORT_GPU + 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; +#else + return 0; +#endif +} + static int lcanvas_save(lua_State* L) { lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); return 1; @@ -479,7 +528,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 +539,9 @@ static const struct luaL_Reg gSkCanvas_Methods[] = { { "getSaveCount", lcanvas_getSaveCount }, { "getTotalMatrix", lcanvas_getTotalMatrix }, { "getClipStack", lcanvas_getClipStack }, +#if SK_SUPPORT_GPU + { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, +#endif { "save", lcanvas_save }, { "restore", lcanvas_restore }, { "scale", lcanvas_scale }, |