Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(813)

Side by Side Diff: src/utils/SkLua.cpp

Issue 649973002: add surfaces to lua (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove unused local function Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 9
10 #if SK_SUPPORT_GPU 10 #if SK_SUPPORT_GPU
11 #include "GrReducedClip.h" 11 #include "GrReducedClip.h"
12 #endif 12 #endif
13 13
14 #include "SkCanvas.h" 14 #include "SkCanvas.h"
15 #include "SkData.h" 15 #include "SkData.h"
16 #include "SkDecodingImageGenerator.h" 16 #include "SkDecodingImageGenerator.h"
17 #include "SkDocument.h" 17 #include "SkDocument.h"
18 #include "SkImage.h" 18 #include "SkImage.h"
19 #include "SkMatrix.h" 19 #include "SkMatrix.h"
20 #include "SkPaint.h" 20 #include "SkPaint.h"
21 #include "SkPath.h" 21 #include "SkPath.h"
22 #include "SkPixelRef.h" 22 #include "SkPixelRef.h"
23 #include "SkRRect.h" 23 #include "SkRRect.h"
24 #include "SkString.h" 24 #include "SkString.h"
25 #include "SkSurface.h"
25 #include "SkTextBlob.h" 26 #include "SkTextBlob.h"
26 #include "SkTypeface.h" 27 #include "SkTypeface.h"
27 28
28 extern "C" { 29 extern "C" {
29 #include "lua.h" 30 #include "lua.h"
30 #include "lualib.h" 31 #include "lualib.h"
31 #include "lauxlib.h" 32 #include "lauxlib.h"
32 } 33 }
33 34
34 // return the metatable name for a given class 35 // return the metatable name for a given class
35 template <typename T> const char* get_mtname(); 36 template <typename T> const char* get_mtname();
36 #define DEF_MTNAME(T) \ 37 #define DEF_MTNAME(T) \
37 template <> const char* get_mtname<T>() { \ 38 template <> const char* get_mtname<T>() { \
38 return #T "_LuaMetaTableName"; \ 39 return #T "_LuaMetaTableName"; \
39 } 40 }
40 41
41 DEF_MTNAME(SkCanvas) 42 DEF_MTNAME(SkCanvas)
42 DEF_MTNAME(SkDocument) 43 DEF_MTNAME(SkDocument)
43 DEF_MTNAME(SkImage) 44 DEF_MTNAME(SkImage)
44 DEF_MTNAME(SkMatrix) 45 DEF_MTNAME(SkMatrix)
45 DEF_MTNAME(SkRRect) 46 DEF_MTNAME(SkRRect)
46 DEF_MTNAME(SkPath) 47 DEF_MTNAME(SkPath)
47 DEF_MTNAME(SkPaint) 48 DEF_MTNAME(SkPaint)
48 DEF_MTNAME(SkPathEffect) 49 DEF_MTNAME(SkPathEffect)
49 DEF_MTNAME(SkShader) 50 DEF_MTNAME(SkShader)
51 DEF_MTNAME(SkSurface)
50 DEF_MTNAME(SkTextBlob) 52 DEF_MTNAME(SkTextBlob)
51 DEF_MTNAME(SkTypeface) 53 DEF_MTNAME(SkTypeface)
52 54
53 template <typename T> T* push_new(lua_State* L) { 55 template <typename T> T* push_new(lua_State* L) {
54 T* addr = (T*)lua_newuserdata(L, sizeof(T)); 56 T* addr = (T*)lua_newuserdata(L, sizeof(T));
55 new (addr) T; 57 new (addr) T;
56 luaL_getmetatable(L, get_mtname<T>()); 58 luaL_getmetatable(L, get_mtname<T>());
57 lua_setmetatable(L, -2); 59 lua_setmetatable(L, -2);
58 return addr; 60 return addr;
59 } 61 }
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 } 346 }
345 this->pushString(region_op(element.getOp()), "op"); 347 this->pushString(region_op(element.getOp()), "op");
346 this->pushBool(element.isAA(), "aa"); 348 this->pushBool(element.isAA(), "aa");
347 CHECK_SETFIELD(key); 349 CHECK_SETFIELD(key);
348 } 350 }
349 351
350 352
351 /////////////////////////////////////////////////////////////////////////////// 353 ///////////////////////////////////////////////////////////////////////////////
352 /////////////////////////////////////////////////////////////////////////////// 354 ///////////////////////////////////////////////////////////////////////////////
353 355
356 static int lua2int_def(lua_State* L, int index, int defaultValue) {
357 if (lua_isnumber(L, index)) {
358 return (int)lua_tonumber(L, index);
359 } else {
360 return defaultValue;
361 }
362 }
363
354 static SkScalar lua2scalar(lua_State* L, int index) { 364 static SkScalar lua2scalar(lua_State* L, int index) {
355 SkASSERT(lua_isnumber(L, index)); 365 SkASSERT(lua_isnumber(L, index));
356 return SkLuaToScalar(lua_tonumber(L, index)); 366 return SkLuaToScalar(lua_tonumber(L, index));
357 } 367 }
358 368
359 static SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) { 369 static SkScalar lua2scalar_def(lua_State* L, int index, SkScalar defaultValue) {
360 if (lua_isnumber(L, index)) { 370 if (lua_isnumber(L, index)) {
361 return SkLuaToScalar(lua_tonumber(L, index)); 371 return SkLuaToScalar(lua_tonumber(L, index));
362 } else { 372 } else {
363 return defaultValue; 373 return defaultValue;
(...skipping 29 matching lines...) Expand all
393 if (x <= 0) { 403 if (x <= 0) {
394 return 0; 404 return 0;
395 } else if (x >= 1) { 405 } else if (x >= 1) {
396 return 255; 406 return 255;
397 } else { 407 } else {
398 return SkScalarRoundToInt(x * 255); 408 return SkScalarRoundToInt(x * 255);
399 } 409 }
400 } 410 }
401 411
402 static SkColor lua2color(lua_State* L, int index) { 412 static SkColor lua2color(lua_State* L, int index) {
403 return SkColorSetARGB(unit2byte(getfield_scalar(L, index, "a")), 413 return SkColorSetARGB(unit2byte(getfield_scalar_default(L, index, "a", 1)),
404 unit2byte(getfield_scalar(L, index, "r")), 414 unit2byte(getfield_scalar_default(L, index, "r", 0)),
405 unit2byte(getfield_scalar(L, index, "g")), 415 unit2byte(getfield_scalar_default(L, index, "g", 0)),
406 unit2byte(getfield_scalar(L, index, "b"))); 416 unit2byte(getfield_scalar_default(L, index, "b", 0)));
407 } 417 }
408 418
409 static SkRect* lua2rect(lua_State* L, int index, SkRect* rect) { 419 static SkRect* lua2rect(lua_State* L, int index, SkRect* rect) {
410 rect->set(getfield_scalar_default(L, index, "left", 0), 420 rect->set(getfield_scalar_default(L, index, "left", 0),
411 getfield_scalar_default(L, index, "top", 0), 421 getfield_scalar_default(L, index, "top", 0),
412 getfield_scalar(L, index, "right"), 422 getfield_scalar(L, index, "right"),
413 getfield_scalar(L, index, "bottom")); 423 getfield_scalar(L, index, "bottom"));
414 return rect; 424 return rect;
415 } 425 }
416 426
(...skipping 17 matching lines...) Expand all
434 } 444 }
435 445
436 static int lcanvas_drawCircle(lua_State* L) { 446 static int lcanvas_drawCircle(lua_State* L) {
437 get_ref<SkCanvas>(L, 1)->drawCircle(lua2scalar(L, 2), 447 get_ref<SkCanvas>(L, 1)->drawCircle(lua2scalar(L, 2),
438 lua2scalar(L, 3), 448 lua2scalar(L, 3),
439 lua2scalar(L, 4), 449 lua2scalar(L, 4),
440 *get_obj<SkPaint>(L, 5)); 450 *get_obj<SkPaint>(L, 5));
441 return 0; 451 return 0;
442 } 452 }
443 453
454 static SkPaint* lua2OptionalPaint(lua_State* L, int index, SkPaint* paint) {
455 if (lua_isnumber(L, index)) {
456 paint->setAlpha(SkScalarRoundToInt(lua2scalar(L, index) * 255));
457 return paint;
458 } else {
459 const SkPaint* ptr = get_obj<SkPaint>(L, index);
460 if (ptr) {
461 *paint = *ptr;
462 return paint;
463 }
464 }
465 return NULL;
466 }
467
444 static int lcanvas_drawImage(lua_State* L) { 468 static int lcanvas_drawImage(lua_State* L) {
445 SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 469 SkCanvas* canvas = get_ref<SkCanvas>(L, 1);
446 SkImage* image = get_ref<SkImage>(L, 2); 470 SkImage* image = get_ref<SkImage>(L, 2);
447 if (NULL == image) { 471 if (NULL == image) {
448 return 0; 472 return 0;
449 } 473 }
450 SkScalar x = lua2scalar(L, 3); 474 SkScalar x = lua2scalar(L, 3);
451 SkScalar y = lua2scalar(L, 4); 475 SkScalar y = lua2scalar(L, 4);
452 476
453 SkPaint paint; 477 SkPaint paint;
454 const SkPaint* paintPtr = NULL; 478 canvas->drawImage(image, x, y, lua2OptionalPaint(L, 5, &paint));
455 if (lua_isnumber(L, 5)) {
456 paint.setAlpha(SkScalarRoundToInt(lua2scalar(L, 5) * 255));
457 paintPtr = &paint;
458 }
459 canvas->drawImage(image, x, y, paintPtr);
460 return 0; 479 return 0;
461 } 480 }
462 481
463 static int lcanvas_drawImageRect(lua_State* L) { 482 static int lcanvas_drawImageRect(lua_State* L) {
464 SkCanvas* canvas = get_ref<SkCanvas>(L, 1); 483 SkCanvas* canvas = get_ref<SkCanvas>(L, 1);
465 SkImage* image = get_ref<SkImage>(L, 2); 484 SkImage* image = get_ref<SkImage>(L, 2);
466 if (NULL == image) { 485 if (NULL == image) {
467 return 0; 486 return 0;
468 } 487 }
469 488
470 SkRect srcR, dstR; 489 SkRect srcR, dstR;
471 SkRect* srcRPtr = NULL; 490 SkRect* srcRPtr = NULL;
472 if (!lua_isnil(L, 3)) { 491 if (!lua_isnil(L, 3)) {
473 srcRPtr = lua2rect(L, 3, &srcR); 492 srcRPtr = lua2rect(L, 3, &srcR);
474 } 493 }
475 lua2rect(L, 4, &dstR); 494 lua2rect(L, 4, &dstR);
476 495
477 SkPaint paint; 496 SkPaint paint;
478 const SkPaint* paintPtr = NULL; 497 canvas->drawImageRect(image, srcRPtr, dstR, lua2OptionalPaint(L, 5, &paint)) ;
479 if (lua_isnumber(L, 5)) {
480 paint.setAlpha(SkScalarRoundToInt(lua2scalar(L, 5) * 255));
481 paintPtr = &paint;
482 }
483 canvas->drawImageRect(image, srcRPtr, dstR, paintPtr);
484 return 0; 498 return 0;
485 } 499 }
486 500
487 static int lcanvas_drawPath(lua_State* L) { 501 static int lcanvas_drawPath(lua_State* L) {
488 get_ref<SkCanvas>(L, 1)->drawPath(*get_obj<SkPath>(L, 2), 502 get_ref<SkCanvas>(L, 1)->drawPath(*get_obj<SkPath>(L, 2),
489 *get_obj<SkPaint>(L, 3)); 503 *get_obj<SkPaint>(L, 3));
490 return 0; 504 return 0;
491 } 505 }
492 506
493 static int lcanvas_drawText(lua_State* L) { 507 static int lcanvas_drawText(lua_State* L) {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 get_ref<SkCanvas>(L, 1)->translate(tx, ty); 596 get_ref<SkCanvas>(L, 1)->translate(tx, ty);
583 return 0; 597 return 0;
584 } 598 }
585 599
586 static int lcanvas_rotate(lua_State* L) { 600 static int lcanvas_rotate(lua_State* L) {
587 SkScalar degrees = lua2scalar_def(L, 2, 0); 601 SkScalar degrees = lua2scalar_def(L, 2, 0);
588 get_ref<SkCanvas>(L, 1)->rotate(degrees); 602 get_ref<SkCanvas>(L, 1)->rotate(degrees);
589 return 0; 603 return 0;
590 } 604 }
591 605
606 static int lcanvas_newSurface(lua_State* L) {
607 int width = lua2int_def(L, 2, 0);
608 int height = lua2int_def(L, 2, 0);
609 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
610 SkSurface* surface = get_ref<SkCanvas>(L, 1)->newSurface(info);
611 if (NULL == surface) {
612 lua_pushnil(L);
613 } else {
614 push_ref(L, surface);
615 surface->unref();
616 }
617 return 1;
618 }
619
592 static int lcanvas_gc(lua_State* L) { 620 static int lcanvas_gc(lua_State* L) {
593 get_ref<SkCanvas>(L, 1)->unref(); 621 get_ref<SkCanvas>(L, 1)->unref();
594 return 0; 622 return 0;
595 } 623 }
596 624
597 const struct luaL_Reg gSkCanvas_Methods[] = { 625 const struct luaL_Reg gSkCanvas_Methods[] = {
598 { "drawColor", lcanvas_drawColor }, 626 { "drawColor", lcanvas_drawColor },
599 { "drawRect", lcanvas_drawRect }, 627 { "drawRect", lcanvas_drawRect },
600 { "drawOval", lcanvas_drawOval }, 628 { "drawOval", lcanvas_drawOval },
601 { "drawCircle", lcanvas_drawCircle }, 629 { "drawCircle", lcanvas_drawCircle },
602 { "drawImage", lcanvas_drawImage }, 630 { "drawImage", lcanvas_drawImage },
603 { "drawImageRect", lcanvas_drawImageRect }, 631 { "drawImageRect", lcanvas_drawImageRect },
604 { "drawPath", lcanvas_drawPath }, 632 { "drawPath", lcanvas_drawPath },
605 { "drawText", lcanvas_drawText }, 633 { "drawText", lcanvas_drawText },
606 { "getSaveCount", lcanvas_getSaveCount }, 634 { "getSaveCount", lcanvas_getSaveCount },
607 { "getTotalMatrix", lcanvas_getTotalMatrix }, 635 { "getTotalMatrix", lcanvas_getTotalMatrix },
608 { "getClipStack", lcanvas_getClipStack }, 636 { "getClipStack", lcanvas_getClipStack },
609 #if SK_SUPPORT_GPU 637 #if SK_SUPPORT_GPU
610 { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, 638 { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack },
611 #endif 639 #endif
612 { "save", lcanvas_save }, 640 { "save", lcanvas_save },
613 { "restore", lcanvas_restore }, 641 { "restore", lcanvas_restore },
614 { "scale", lcanvas_scale }, 642 { "scale", lcanvas_scale },
615 { "translate", lcanvas_translate }, 643 { "translate", lcanvas_translate },
616 { "rotate", lcanvas_rotate }, 644 { "rotate", lcanvas_rotate },
645
646 { "newSurface", lcanvas_newSurface },
647
617 { "__gc", lcanvas_gc }, 648 { "__gc", lcanvas_gc },
618 { NULL, NULL } 649 { NULL, NULL }
619 }; 650 };
620 651
621 /////////////////////////////////////////////////////////////////////////////// 652 ///////////////////////////////////////////////////////////////////////////////
622 653
623 static int ldocument_beginPage(lua_State* L) { 654 static int ldocument_beginPage(lua_State* L) {
624 const SkRect* contentPtr = NULL; 655 const SkRect* contentPtr = NULL;
625 push_ref(L, get_ref<SkDocument>(L, 1)->beginPage(lua2scalar(L, 2), 656 push_ref(L, get_ref<SkDocument>(L, 1)->beginPage(lua2scalar(L, 2),
626 lua2scalar(L, 3), 657 lua2scalar(L, 3),
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 1415
1385 static const struct luaL_Reg gSkImage_Methods[] = { 1416 static const struct luaL_Reg gSkImage_Methods[] = {
1386 { "width", limage_width }, 1417 { "width", limage_width },
1387 { "height", limage_height }, 1418 { "height", limage_height },
1388 { "__gc", limage_gc }, 1419 { "__gc", limage_gc },
1389 { NULL, NULL } 1420 { NULL, NULL }
1390 }; 1421 };
1391 1422
1392 /////////////////////////////////////////////////////////////////////////////// 1423 ///////////////////////////////////////////////////////////////////////////////
1393 1424
1425 static int lsurface_width(lua_State* L) {
1426 lua_pushinteger(L, get_ref<SkSurface>(L, 1)->width());
1427 return 1;
1428 }
1429
1430 static int lsurface_height(lua_State* L) {
1431 lua_pushinteger(L, get_ref<SkSurface>(L, 1)->height());
1432 return 1;
1433 }
1434
1435 static int lsurface_getCanvas(lua_State* L) {
1436 SkCanvas* canvas = get_ref<SkSurface>(L, 1)->getCanvas();
1437 if (NULL == canvas) {
1438 lua_pushnil(L);
1439 } else {
1440 push_ref(L, canvas);
1441 // note: we don't unref canvas, since getCanvas did not ref it.
1442 // warning: this is weird: now Lua owns a ref on this canvas, but what i f they let
1443 // the real owner (the surface) go away, but still hold onto the canvas?
1444 // *really* we want to sort of ref the surface again, but have the nativ e object
1445 // know that it is supposed to be treated as a canvas...
1446 }
1447 return 1;
1448 }
1449
1450 static int lsurface_newImageSnapshot(lua_State* L) {
1451 SkImage* image = get_ref<SkSurface>(L, 1)->newImageSnapshot();
1452 if (NULL == image) {
1453 lua_pushnil(L);
1454 } else {
1455 push_ref(L, image);
1456 image->unref();
1457 }
1458 return 1;
1459 }
1460
1461 static int lsurface_newSurface(lua_State* L) {
1462 int width = lua2int_def(L, 2, 0);
1463 int height = lua2int_def(L, 2, 0);
1464 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
1465 SkSurface* surface = get_ref<SkSurface>(L, 1)->newSurface(info);
1466 if (NULL == surface) {
1467 lua_pushnil(L);
1468 } else {
1469 push_ref(L, surface);
1470 surface->unref();
1471 }
1472 return 1;
1473 }
1474
1475 static int lsurface_gc(lua_State* L) {
1476 get_ref<SkSurface>(L, 1)->unref();
1477 return 0;
1478 }
1479
1480 static const struct luaL_Reg gSkSurface_Methods[] = {
1481 { "width", lsurface_width },
1482 { "height", lsurface_height },
1483 { "getCanvas", lsurface_getCanvas },
1484 { "newImageSnapshot", lsurface_newImageSnapshot },
1485 { "newSurface", lsurface_newSurface },
1486 { "__gc", lsurface_gc },
1487 { NULL, NULL }
1488 };
1489
1490 ///////////////////////////////////////////////////////////////////////////////
1491
1394 static int ltypeface_gc(lua_State* L) { 1492 static int ltypeface_gc(lua_State* L) {
1395 SkSafeUnref(get_ref<SkTypeface>(L, 1)); 1493 SkSafeUnref(get_ref<SkTypeface>(L, 1));
1396 return 0; 1494 return 0;
1397 } 1495 }
1398 1496
1399 static const struct luaL_Reg gSkTypeface_Methods[] = { 1497 static const struct luaL_Reg gSkTypeface_Methods[] = {
1400 { "__gc", ltypeface_gc }, 1498 { "__gc", ltypeface_gc },
1401 { NULL, NULL } 1499 { NULL, NULL }
1402 }; 1500 };
1403 1501
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1480 (SkTypeface::Style)style); 1578 (SkTypeface::Style)style);
1481 // SkDebugf("---- name <%s> style=%d, face=%p ref=%d\n", name, style, face, f ace->getRefCnt()); 1579 // SkDebugf("---- name <%s> style=%d, face=%p ref=%d\n", name, style, face, f ace->getRefCnt());
1482 if (NULL == face) { 1580 if (NULL == face) {
1483 face = SkTypeface::RefDefault(); 1581 face = SkTypeface::RefDefault();
1484 } 1582 }
1485 push_ref(L, face); 1583 push_ref(L, face);
1486 face->unref(); 1584 face->unref();
1487 return 1; 1585 return 1;
1488 } 1586 }
1489 1587
1588 static int lsk_newRasterSurface(lua_State* L) {
1589 int width = lua2int_def(L, 2, 0);
1590 int height = lua2int_def(L, 2, 0);
1591 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
1592 SkSurface* surface = SkSurface::NewRaster(info);
1593 if (NULL == surface) {
1594 lua_pushnil(L);
1595 } else {
1596 push_ref(L, surface);
1597 surface->unref();
1598 }
1599 return 1;
1600 }
1601
1490 static int lsk_loadImage(lua_State* L) { 1602 static int lsk_loadImage(lua_State* L) {
1491 if (lua_gettop(L) > 0 && lua_isstring(L, 1)) { 1603 if (lua_gettop(L) > 0 && lua_isstring(L, 1)) {
1492 const char* name = lua_tolstring(L, 1, NULL); 1604 const char* name = lua_tolstring(L, 1, NULL);
1493 SkAutoDataUnref data(SkData::NewFromFileName(name)); 1605 SkAutoDataUnref data(SkData::NewFromFileName(name));
1494 if (data.get()) { 1606 if (data.get()) {
1495 SkImage* image = SkImage::NewFromGenerator( 1607 SkImage* image = SkImage::NewFromGenerator(
1496 SkDecodingImageGenerator::Create(data, SkDecodingImageGenerator: :Options())); 1608 SkDecodingImageGenerator::Create(data, SkDecodingImageGenerator: :Options()));
1497 1609
1498 if (image) { 1610 if (image) {
1499 push_ref(L, image); 1611 push_ref(L, image);
1500 image->unref(); 1612 image->unref();
1501 return 1; 1613 return 1;
1502 } 1614 }
1503 } 1615 }
1504 } 1616 }
1505 return 0; 1617 return 0;
1506 } 1618 }
1507 1619
1508 static void register_Sk(lua_State* L) { 1620 static void register_Sk(lua_State* L) {
1509 lua_newtable(L); 1621 lua_newtable(L);
1510 lua_pushvalue(L, -1); 1622 lua_pushvalue(L, -1);
1511 lua_setglobal(L, "Sk"); 1623 lua_setglobal(L, "Sk");
1512 // the Sk table is still on top 1624 // the Sk table is still on top
1513 1625
1514 setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF); 1626 setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF);
1515 setfield_function(L, "loadImage", lsk_loadImage); 1627 setfield_function(L, "loadImage", lsk_loadImage);
1516 setfield_function(L, "newPaint", lsk_newPaint); 1628 setfield_function(L, "newPaint", lsk_newPaint);
1517 setfield_function(L, "newPath", lsk_newPath); 1629 setfield_function(L, "newPath", lsk_newPath);
1518 setfield_function(L, "newRRect", lsk_newRRect); 1630 setfield_function(L, "newRRect", lsk_newRRect);
1631 setfield_function(L, "newRasterSurface", lsk_newRasterSurface);
1519 setfield_function(L, "newTypeface", lsk_newTypeface); 1632 setfield_function(L, "newTypeface", lsk_newTypeface);
1520 lua_pop(L, 1); // pop off the Sk table 1633 lua_pop(L, 1); // pop off the Sk table
1521 } 1634 }
1522 1635
1523 #define REG_CLASS(L, C) \ 1636 #define REG_CLASS(L, C) \
1524 do { \ 1637 do { \
1525 luaL_newmetatable(L, get_mtname<C>()); \ 1638 luaL_newmetatable(L, get_mtname<C>()); \
1526 lua_pushvalue(L, -1); \ 1639 lua_pushvalue(L, -1); \
1527 lua_setfield(L, -2, "__index"); \ 1640 lua_setfield(L, -2, "__index"); \
1528 luaL_setfuncs(L, g##C##_Methods, 0); \ 1641 luaL_setfuncs(L, g##C##_Methods, 0); \
1529 lua_pop(L, 1); /* pop off the meta-table */ \ 1642 lua_pop(L, 1); /* pop off the meta-table */ \
1530 } while (0) 1643 } while (0)
1531 1644
1532 void SkLua::Load(lua_State* L) { 1645 void SkLua::Load(lua_State* L) {
1533 register_Sk(L); 1646 register_Sk(L);
1534 REG_CLASS(L, SkCanvas); 1647 REG_CLASS(L, SkCanvas);
1535 REG_CLASS(L, SkDocument); 1648 REG_CLASS(L, SkDocument);
1536 REG_CLASS(L, SkImage); 1649 REG_CLASS(L, SkImage);
1537 REG_CLASS(L, SkPaint); 1650 REG_CLASS(L, SkPaint);
1538 REG_CLASS(L, SkPath); 1651 REG_CLASS(L, SkPath);
1539 REG_CLASS(L, SkPathEffect); 1652 REG_CLASS(L, SkPathEffect);
1540 REG_CLASS(L, SkRRect); 1653 REG_CLASS(L, SkRRect);
1541 REG_CLASS(L, SkShader); 1654 REG_CLASS(L, SkShader);
1655 REG_CLASS(L, SkSurface);
1542 REG_CLASS(L, SkTypeface); 1656 REG_CLASS(L, SkTypeface);
1543 REG_CLASS(L, SkMatrix); 1657 REG_CLASS(L, SkMatrix);
1544 } 1658 }
1545 1659
1546 extern "C" int luaopen_skia(lua_State* L); 1660 extern "C" int luaopen_skia(lua_State* L);
1547 extern "C" int luaopen_skia(lua_State* L) { 1661 extern "C" int luaopen_skia(lua_State* L) {
1548 SkLua::Load(L); 1662 SkLua::Load(L);
1549 return 0; 1663 return 0;
1550 } 1664 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698