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

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

Issue 651823004: create and modify matrices in lua (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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 | « samplecode/SampleLua.cpp ('k') | 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
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 get_ref<SkCanvas>(L, 1)->translate(tx, ty); 620 get_ref<SkCanvas>(L, 1)->translate(tx, ty);
621 return 0; 621 return 0;
622 } 622 }
623 623
624 static int lcanvas_rotate(lua_State* L) { 624 static int lcanvas_rotate(lua_State* L) {
625 SkScalar degrees = lua2scalar_def(L, 2, 0); 625 SkScalar degrees = lua2scalar_def(L, 2, 0);
626 get_ref<SkCanvas>(L, 1)->rotate(degrees); 626 get_ref<SkCanvas>(L, 1)->rotate(degrees);
627 return 0; 627 return 0;
628 } 628 }
629 629
630 static int lcanvas_concat(lua_State* L) {
631 get_ref<SkCanvas>(L, 1)->concat(*get_obj<SkMatrix>(L, 2));
632 return 0;
633 }
634
630 static int lcanvas_newSurface(lua_State* L) { 635 static int lcanvas_newSurface(lua_State* L) {
631 int width = lua2int_def(L, 2, 0); 636 int width = lua2int_def(L, 2, 0);
632 int height = lua2int_def(L, 2, 0); 637 int height = lua2int_def(L, 2, 0);
633 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 638 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
634 SkSurface* surface = get_ref<SkCanvas>(L, 1)->newSurface(info); 639 SkSurface* surface = get_ref<SkCanvas>(L, 1)->newSurface(info);
635 if (NULL == surface) { 640 if (NULL == surface) {
636 lua_pushnil(L); 641 lua_pushnil(L);
637 } else { 642 } else {
638 push_ref(L, surface); 643 push_ref(L, surface);
639 surface->unref(); 644 surface->unref();
(...skipping 21 matching lines...) Expand all
661 { "getTotalMatrix", lcanvas_getTotalMatrix }, 666 { "getTotalMatrix", lcanvas_getTotalMatrix },
662 { "getClipStack", lcanvas_getClipStack }, 667 { "getClipStack", lcanvas_getClipStack },
663 #if SK_SUPPORT_GPU 668 #if SK_SUPPORT_GPU
664 { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack }, 669 { "getReducedClipStack", SkLua::lcanvas_getReducedClipStack },
665 #endif 670 #endif
666 { "save", lcanvas_save }, 671 { "save", lcanvas_save },
667 { "restore", lcanvas_restore }, 672 { "restore", lcanvas_restore },
668 { "scale", lcanvas_scale }, 673 { "scale", lcanvas_scale },
669 { "translate", lcanvas_translate }, 674 { "translate", lcanvas_translate },
670 { "rotate", lcanvas_rotate }, 675 { "rotate", lcanvas_rotate },
676 { "concat", lcanvas_concat },
671 677
672 { "newSurface", lcanvas_newSurface }, 678 { "newSurface", lcanvas_newSurface },
673 679
674 { "__gc", lcanvas_gc }, 680 { "__gc", lcanvas_gc },
675 { NULL, NULL } 681 { NULL, NULL }
676 }; 682 };
677 683
678 /////////////////////////////////////////////////////////////////////////////// 684 ///////////////////////////////////////////////////////////////////////////////
679 685
680 static int ldocument_beginPage(lua_State* L) { 686 static int ldocument_beginPage(lua_State* L) {
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 1180
1175 static int lmatrix_getTranslateX(lua_State* L) { 1181 static int lmatrix_getTranslateX(lua_State* L) {
1176 lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateX()); 1182 lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateX());
1177 return 1; 1183 return 1;
1178 } 1184 }
1179 1185
1180 static int lmatrix_getTranslateY(lua_State* L) { 1186 static int lmatrix_getTranslateY(lua_State* L) {
1181 lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateY()); 1187 lua_pushnumber(L, get_obj<SkMatrix>(L,1)->getTranslateY());
1182 return 1; 1188 return 1;
1183 } 1189 }
1184 1190
robertphillips 2014/10/14 16:33:14 Can we define constants in Lua and pass an int rat
1191 static int lmatrix_setRectToRect(lua_State* L) {
1192 SkMatrix* matrix = get_obj<SkMatrix>(L, 1);
1193 SkRect srcR, dstR;
1194 lua2rect(L, 2, &srcR);
1195 lua2rect(L, 3, &dstR);
1196 const char* scaleToFitStr = lua_tostring(L, 4);
1197 SkMatrix::ScaleToFit scaleToFit = SkMatrix::kFill_ScaleToFit;
1198
1199 if (scaleToFitStr) {
1200 const struct {
1201 const char* fName;
1202 SkMatrix::ScaleToFit fScaleToFit;
1203 } rec[] = {
1204 { "fill", SkMatrix::kFill_ScaleToFit },
1205 { "start", SkMatrix::kStart_ScaleToFit },
1206 { "center", SkMatrix::kCenter_ScaleToFit },
1207 { "end", SkMatrix::kEnd_ScaleToFit },
1208 };
1209
1210 for (size_t i = 0; i < SK_ARRAY_COUNT(rec); ++i) {
1211 if (strcmp(rec[i].fName, scaleToFitStr) == 0) {
1212 scaleToFit = rec[i].fScaleToFit;
1213 break;
1214 }
1215 }
1216 }
1217
1218 matrix->setRectToRect(srcR, dstR, scaleToFit);
1219 return 0;
1220 }
1221
1185 static const struct luaL_Reg gSkMatrix_Methods[] = { 1222 static const struct luaL_Reg gSkMatrix_Methods[] = {
1186 { "getType", lmatrix_getType }, 1223 { "getType", lmatrix_getType },
1187 { "getScaleX", lmatrix_getScaleX }, 1224 { "getScaleX", lmatrix_getScaleX },
1188 { "getScaleY", lmatrix_getScaleY }, 1225 { "getScaleY", lmatrix_getScaleY },
1189 { "getTranslateX", lmatrix_getTranslateX }, 1226 { "getTranslateX", lmatrix_getTranslateX },
1190 { "getTranslateY", lmatrix_getTranslateY }, 1227 { "getTranslateY", lmatrix_getTranslateY },
1228 { "setRectToRect", lmatrix_setRectToRect },
1191 { NULL, NULL } 1229 { NULL, NULL }
1192 }; 1230 };
1193 1231
1194 /////////////////////////////////////////////////////////////////////////////// 1232 ///////////////////////////////////////////////////////////////////////////////
1195 1233
1196 static int lpath_getBounds(lua_State* L) { 1234 static int lpath_getBounds(lua_State* L) {
1197 SkLua(L).pushRect(get_obj<SkPath>(L, 1)->getBounds()); 1235 SkLua(L).pushRect(get_obj<SkPath>(L, 1)->getBounds());
1198 return 1; 1236 return 1;
1199 } 1237 }
1200 1238
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 if (NULL == doc) { 1681 if (NULL == doc) {
1644 // do I need to push a nil on the stack and return 1? 1682 // do I need to push a nil on the stack and return 1?
1645 return 0; 1683 return 0;
1646 } else { 1684 } else {
1647 push_ref(L, doc); 1685 push_ref(L, doc);
1648 doc->unref(); 1686 doc->unref();
1649 return 1; 1687 return 1;
1650 } 1688 }
1651 } 1689 }
1652 1690
1691 static int lsk_newMatrix(lua_State* L) {
1692 push_new<SkMatrix>(L)->reset();
1693 return 1;
1694 }
1695
1653 static int lsk_newPaint(lua_State* L) { 1696 static int lsk_newPaint(lua_State* L) {
1654 push_new<SkPaint>(L); 1697 push_new<SkPaint>(L);
1655 return 1; 1698 return 1;
1656 } 1699 }
1657 1700
1658 static int lsk_newPath(lua_State* L) { 1701 static int lsk_newPath(lua_State* L) {
1659 push_new<SkPath>(L); 1702 push_new<SkPath>(L);
1660 return 1; 1703 return 1;
1661 } 1704 }
1662 1705
1663 static int lsk_newPictureRecorder(lua_State* L) { 1706 static int lsk_newPictureRecorder(lua_State* L) {
1664 push_new<SkPictureRecorder>(L); 1707 push_new<SkPictureRecorder>(L);
1665 return 1; 1708 return 1;
1666 } 1709 }
1667 1710
1668 static int lsk_newRRect(lua_State* L) { 1711 static int lsk_newRRect(lua_State* L) {
1669 SkRRect* rr = push_new<SkRRect>(L); 1712 push_new<SkRRect>(L)->setEmpty();
1670 rr->setEmpty();
1671 return 1; 1713 return 1;
1672 } 1714 }
1673 1715
1674 static int lsk_newTypeface(lua_State* L) { 1716 static int lsk_newTypeface(lua_State* L) {
1675 const char* name = NULL; 1717 const char* name = NULL;
1676 int style = SkTypeface::kNormal; 1718 int style = SkTypeface::kNormal;
1677 1719
1678 int count = lua_gettop(L); 1720 int count = lua_gettop(L);
1679 if (count > 0 && lua_isstring(L, 1)) { 1721 if (count > 0 && lua_isstring(L, 1)) {
1680 name = lua_tolstring(L, 1, NULL); 1722 name = lua_tolstring(L, 1, NULL);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1727 } 1769 }
1728 1770
1729 static void register_Sk(lua_State* L) { 1771 static void register_Sk(lua_State* L) {
1730 lua_newtable(L); 1772 lua_newtable(L);
1731 lua_pushvalue(L, -1); 1773 lua_pushvalue(L, -1);
1732 lua_setglobal(L, "Sk"); 1774 lua_setglobal(L, "Sk");
1733 // the Sk table is still on top 1775 // the Sk table is still on top
1734 1776
1735 setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF); 1777 setfield_function(L, "newDocumentPDF", lsk_newDocumentPDF);
1736 setfield_function(L, "loadImage", lsk_loadImage); 1778 setfield_function(L, "loadImage", lsk_loadImage);
1779 setfield_function(L, "newMatrix", lsk_newMatrix);
1737 setfield_function(L, "newPaint", lsk_newPaint); 1780 setfield_function(L, "newPaint", lsk_newPaint);
1738 setfield_function(L, "newPath", lsk_newPath); 1781 setfield_function(L, "newPath", lsk_newPath);
1739 setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder); 1782 setfield_function(L, "newPictureRecorder", lsk_newPictureRecorder);
1740 setfield_function(L, "newRRect", lsk_newRRect); 1783 setfield_function(L, "newRRect", lsk_newRRect);
1741 setfield_function(L, "newRasterSurface", lsk_newRasterSurface); 1784 setfield_function(L, "newRasterSurface", lsk_newRasterSurface);
1742 setfield_function(L, "newTypeface", lsk_newTypeface); 1785 setfield_function(L, "newTypeface", lsk_newTypeface);
1743 lua_pop(L, 1); // pop off the Sk table 1786 lua_pop(L, 1); // pop off the Sk table
1744 } 1787 }
1745 1788
1746 #define REG_CLASS(L, C) \ 1789 #define REG_CLASS(L, C) \
(...skipping 20 matching lines...) Expand all
1767 REG_CLASS(L, SkSurface); 1810 REG_CLASS(L, SkSurface);
1768 REG_CLASS(L, SkTypeface); 1811 REG_CLASS(L, SkTypeface);
1769 REG_CLASS(L, SkMatrix); 1812 REG_CLASS(L, SkMatrix);
1770 } 1813 }
1771 1814
1772 extern "C" int luaopen_skia(lua_State* L); 1815 extern "C" int luaopen_skia(lua_State* L);
1773 extern "C" int luaopen_skia(lua_State* L) { 1816 extern "C" int luaopen_skia(lua_State* L) {
1774 SkLua::Load(L); 1817 SkLua::Load(L);
1775 return 0; 1818 return 0;
1776 } 1819 }
OLDNEW
« no previous file with comments | « samplecode/SampleLua.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698