OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkLua.h" | 8 #include "SkLua.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkClipStack.h" |
10 #include "SkData.h" | 11 #include "SkData.h" |
11 #include "SkDocument.h" | 12 #include "SkDocument.h" |
12 #include "SkImage.h" | 13 #include "SkImage.h" |
13 #include "SkMatrix.h" | 14 #include "SkMatrix.h" |
14 #include "SkPaint.h" | 15 #include "SkPaint.h" |
15 #include "SkPath.h" | 16 #include "SkPath.h" |
16 #include "SkPixelRef.h" | 17 #include "SkPixelRef.h" |
17 #include "SkRRect.h" | 18 #include "SkRRect.h" |
18 #include "SkString.h" | 19 #include "SkString.h" |
19 #include "SkTypeface.h" | 20 #include "SkTypeface.h" |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 void SkLua::pushPath(const SkPath& path, const char key[]) { | 228 void SkLua::pushPath(const SkPath& path, const char key[]) { |
228 push_obj(fL, path); | 229 push_obj(fL, path); |
229 CHECK_SETFIELD(key); | 230 CHECK_SETFIELD(key); |
230 } | 231 } |
231 | 232 |
232 void SkLua::pushCanvas(SkCanvas* canvas, const char key[]) { | 233 void SkLua::pushCanvas(SkCanvas* canvas, const char key[]) { |
233 push_ref(fL, canvas); | 234 push_ref(fL, canvas); |
234 CHECK_SETFIELD(key); | 235 CHECK_SETFIELD(key); |
235 } | 236 } |
236 | 237 |
| 238 static const char* element_type(SkClipStack::Element::Type type) { |
| 239 switch (type) { |
| 240 case SkClipStack::Element::kEmpty_Type: |
| 241 return "empty"; |
| 242 case SkClipStack::Element::kRect_Type: |
| 243 return "rect"; |
| 244 case SkClipStack::Element::kRRect_Type: |
| 245 return "rrect"; |
| 246 case SkClipStack::Element::kPath_Type: |
| 247 return "path"; |
| 248 } |
| 249 return "unknown"; |
| 250 } |
| 251 |
| 252 static const char* region_op(SkRegion::Op op) { |
| 253 switch (op) { |
| 254 case SkRegion::kDifference_Op: |
| 255 return "difference"; |
| 256 case SkRegion::kIntersect_Op: |
| 257 return "intersect"; |
| 258 case SkRegion::kUnion_Op: |
| 259 return "union"; |
| 260 case SkRegion::kXOR_Op: |
| 261 return "xor"; |
| 262 case SkRegion::kReverseDifference_Op: |
| 263 return "reverse-difference"; |
| 264 case SkRegion::kReplace_Op: |
| 265 return "replace"; |
| 266 } |
| 267 return "unknown"; |
| 268 } |
| 269 |
| 270 void SkLua::pushClipStack(const SkClipStack& stack, const char* key) { |
| 271 lua_newtable(fL); |
| 272 SkClipStack::B2TIter iter(stack); |
| 273 const SkClipStack::Element* element; |
| 274 int i = 0; |
| 275 while (NULL != (element = iter.next())) { |
| 276 lua_newtable(fL); |
| 277 SkClipStack::Element::Type type = element->getType(); |
| 278 this->pushString(element_type(type), "type"); |
| 279 switch (type) { |
| 280 case SkClipStack::Element::kEmpty_Type: |
| 281 break; |
| 282 case SkClipStack::Element::kRect_Type: |
| 283 this->pushRect(element->getRect(), "rect"); |
| 284 break; |
| 285 case SkClipStack::Element::kRRect_Type: |
| 286 this->pushRRect(element->getRRect(), "rrect"); |
| 287 break; |
| 288 case SkClipStack::Element::kPath_Type: |
| 289 this->pushPath(element->getPath(), "path"); |
| 290 break; |
| 291 } |
| 292 this->pushString(region_op(element->getOp()), "op"); |
| 293 this->pushBool(element->isAA(), "aa"); |
| 294 lua_rawseti(fL, -2, ++i); |
| 295 } |
| 296 CHECK_SETFIELD(key); |
| 297 } |
| 298 |
237 /////////////////////////////////////////////////////////////////////////////// | 299 /////////////////////////////////////////////////////////////////////////////// |
238 /////////////////////////////////////////////////////////////////////////////// | 300 /////////////////////////////////////////////////////////////////////////////// |
239 | 301 |
240 static SkScalar lua2scalar(lua_State* L, int index) { | 302 static SkScalar lua2scalar(lua_State* L, int index) { |
241 SkASSERT(lua_isnumber(L, index)); | 303 SkASSERT(lua_isnumber(L, index)); |
242 return SkLuaToScalar(lua_tonumber(L, index)); | 304 return SkLuaToScalar(lua_tonumber(L, index)); |
243 } | 305 } |
244 | 306 |
245 static SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) { | 307 static SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) { |
246 if (lua_isnumber(L, index)) { | 308 if (lua_isnumber(L, index)) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 static int lcanvas_getSaveCount(lua_State* L) { | 432 static int lcanvas_getSaveCount(lua_State* L) { |
371 lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount()); | 433 lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount()); |
372 return 1; | 434 return 1; |
373 } | 435 } |
374 | 436 |
375 static int lcanvas_getTotalMatrix(lua_State* L) { | 437 static int lcanvas_getTotalMatrix(lua_State* L) { |
376 SkLua(L).pushMatrix(get_ref<SkCanvas>(L, 1)->getTotalMatrix()); | 438 SkLua(L).pushMatrix(get_ref<SkCanvas>(L, 1)->getTotalMatrix()); |
377 return 1; | 439 return 1; |
378 } | 440 } |
379 | 441 |
| 442 static int lcanvas_getClipStack(lua_State* L) { |
| 443 SkLua(L).pushClipStack(*get_ref<SkCanvas>(L, 1)->getClipStack()); |
| 444 return 1; |
| 445 } |
| 446 |
380 static int lcanvas_save(lua_State* L) { | 447 static int lcanvas_save(lua_State* L) { |
381 lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); | 448 lua_pushinteger(L, get_ref<SkCanvas>(L, 1)->save()); |
382 return 1; | 449 return 1; |
383 } | 450 } |
384 | 451 |
385 static int lcanvas_restore(lua_State* L) { | 452 static int lcanvas_restore(lua_State* L) { |
386 get_ref<SkCanvas>(L, 1)->restore(); | 453 get_ref<SkCanvas>(L, 1)->restore(); |
387 return 0; | 454 return 0; |
388 } | 455 } |
389 | 456 |
(...skipping 25 matching lines...) Expand all Loading... |
415 static const struct luaL_Reg gSkCanvas_Methods[] = { | 482 static const struct luaL_Reg gSkCanvas_Methods[] = { |
416 { "drawColor", lcanvas_drawColor }, | 483 { "drawColor", lcanvas_drawColor }, |
417 { "drawRect", lcanvas_drawRect }, | 484 { "drawRect", lcanvas_drawRect }, |
418 { "drawOval", lcanvas_drawOval }, | 485 { "drawOval", lcanvas_drawOval }, |
419 { "drawCircle", lcanvas_drawCircle }, | 486 { "drawCircle", lcanvas_drawCircle }, |
420 { "drawImage", lcanvas_drawImage }, | 487 { "drawImage", lcanvas_drawImage }, |
421 { "drawPath", lcanvas_drawPath }, | 488 { "drawPath", lcanvas_drawPath }, |
422 { "drawText", lcanvas_drawText }, | 489 { "drawText", lcanvas_drawText }, |
423 { "getSaveCount", lcanvas_getSaveCount }, | 490 { "getSaveCount", lcanvas_getSaveCount }, |
424 { "getTotalMatrix", lcanvas_getTotalMatrix }, | 491 { "getTotalMatrix", lcanvas_getTotalMatrix }, |
| 492 { "getClipStack", lcanvas_getClipStack }, |
425 { "save", lcanvas_save }, | 493 { "save", lcanvas_save }, |
426 { "restore", lcanvas_restore }, | 494 { "restore", lcanvas_restore }, |
427 { "scale", lcanvas_scale }, | 495 { "scale", lcanvas_scale }, |
428 { "translate", lcanvas_translate }, | 496 { "translate", lcanvas_translate }, |
429 { "rotate", lcanvas_rotate }, | 497 { "rotate", lcanvas_rotate }, |
430 { "__gc", lcanvas_gc }, | 498 { "__gc", lcanvas_gc }, |
431 { NULL, NULL } | 499 { NULL, NULL } |
432 }; | 500 }; |
433 | 501 |
434 /////////////////////////////////////////////////////////////////////////////// | 502 /////////////////////////////////////////////////////////////////////////////// |
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 REG_CLASS(L, SkShader); | 1296 REG_CLASS(L, SkShader); |
1229 REG_CLASS(L, SkTypeface); | 1297 REG_CLASS(L, SkTypeface); |
1230 REG_CLASS(L, SkMatrix); | 1298 REG_CLASS(L, SkMatrix); |
1231 } | 1299 } |
1232 | 1300 |
1233 extern "C" int luaopen_skia(lua_State* L); | 1301 extern "C" int luaopen_skia(lua_State* L); |
1234 extern "C" int luaopen_skia(lua_State* L) { | 1302 extern "C" int luaopen_skia(lua_State* L) { |
1235 SkLua::Load(L); | 1303 SkLua::Load(L); |
1236 return 0; | 1304 return 0; |
1237 } | 1305 } |
OLD | NEW |