Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/frontend/StarWidgetLuaBindings.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-04 19:27:16 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-04 19:27:16 +1000
commite3461e90531345650fe70ada38d875a68f87f416 (patch)
tree41b923b02ca8dbac1b075654052c972545aab16e /source/frontend/StarWidgetLuaBindings.cpp
parentab72b03ad8679437ebf01ead65d9f0d3195e6bae (diff)
Start of Interface callbacks, starting with a bindCanvas function for the whole screen
Diffstat (limited to 'source/frontend/StarWidgetLuaBindings.cpp')
-rw-r--r--source/frontend/StarWidgetLuaBindings.cpp139
1 files changed, 71 insertions, 68 deletions
diff --git a/source/frontend/StarWidgetLuaBindings.cpp b/source/frontend/StarWidgetLuaBindings.cpp
index eb3ff5b..fb84ff8 100644
--- a/source/frontend/StarWidgetLuaBindings.cpp
+++ b/source/frontend/StarWidgetLuaBindings.cpp
@@ -17,74 +17,77 @@
namespace Star {
-template <>
-struct LuaConverter<CanvasWidgetPtr> : LuaUserDataConverter<CanvasWidgetPtr> {};
-
-template <>
-struct LuaUserDataMethods<CanvasWidgetPtr> {
- static LuaMethods<CanvasWidgetPtr> make() {
- LuaMethods<CanvasWidgetPtr> methods;
-
- methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("size", mem_fn(&CanvasWidget::size));
- methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("mousePosition", mem_fn(&CanvasWidget::mousePosition));
-
- methods.registerMethodWithSignature<void, CanvasWidgetPtr>("clear", mem_fn(&CanvasWidget::clear));
-
- methods.registerMethod("drawImage",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, Maybe<float> scale, Maybe<Color> color, Maybe<bool> centered) {
- if (centered && *centered)
- canvasWidget->drawImageCentered(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
- else
- canvasWidget->drawImage(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawImageDrawable",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, MVariant<Vec2F, float> scale, Maybe<Color> color, Maybe<float> rotation) {
- auto drawable = Drawable::makeImage(image, 1.0, true, {0.0, 0.0}, color.value(Color::White));
- if (auto s = scale.maybe<Vec2F>())
- drawable.transform(Mat3F::scaling(*s));
- else if(auto s = scale.maybe<float>())
- drawable.transform(Mat3F::scaling(*s));
- if (rotation)
- drawable.rotate(*rotation);
- canvasWidget->drawDrawable(drawable, position);
- });
- methods.registerMethod("drawImageRect",
- [](CanvasWidgetPtr canvasWidget, String image, RectF texCoords, RectF screenCoords, Maybe<Color> color) {
- canvasWidget->drawImageRect(image, texCoords, screenCoords, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawTiledImage",
- [](CanvasWidgetPtr canvasWidget, String image, Vec2D offset, RectF screenCoords, Maybe<float> scale, Maybe<Color> color) {
- canvasWidget->drawTiledImage(image, scale.value(1.0f), offset, screenCoords, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawLine",
- [](CanvasWidgetPtr canvasWidget, Vec2F begin, Vec2F end, Maybe<Color> color, Maybe<float> lineWidth) {
- canvasWidget->drawLine(begin, end, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
- });
- methods.registerMethod("drawRect",
- [](CanvasWidgetPtr canvasWidget, RectF rect, Maybe<Color> color) {
- canvasWidget->drawRect(rect, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawPoly",
- [](CanvasWidgetPtr canvasWidget, PolyF poly, Maybe<Color> color, Maybe<float> lineWidth) {
- canvasWidget->drawPoly(poly, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
- });
- methods.registerMethod("drawTriangles",
- [](CanvasWidgetPtr canvasWidget, List<PolyF> triangles, Maybe<Color> color) {
- auto tris = triangles.transformed([](PolyF const& poly) {
- if (poly.sides() != 3)
- throw StarException("Triangle must have exactly 3 sides");
- return tuple<Vec2F, Vec2F, Vec2F>(poly.vertex(0), poly.vertex(1), poly.vertex(2));
- });
- canvasWidget->drawTriangles(tris, color.value(Color::White).toRgba());
- });
- methods.registerMethod("drawText",
- [](CanvasWidgetPtr canvasWidget, String text, Json tp, unsigned fontSize, Maybe<Color> color, Maybe<float> lineSpacing, Maybe<String> font, Maybe<String> directives) {
- canvasWidget->drawText(text, TextPositioning(tp), fontSize, color.value(Color::White).toRgba(), FontMode::Normal, lineSpacing.value(DefaultLineSpacing), font.value(""), directives.value(""));
- });
-
- return methods;
- }
-};
+LuaMethods<CanvasWidgetPtr> LuaUserDataMethods<CanvasWidgetPtr>::make() {
+ LuaMethods<CanvasWidgetPtr> methods;
+
+ methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("size", mem_fn(&CanvasWidget::size));
+ methods.registerMethodWithSignature<Vec2I, CanvasWidgetPtr>("mousePosition", mem_fn(&CanvasWidget::mousePosition));
+
+ methods.registerMethodWithSignature<void, CanvasWidgetPtr>("clear", mem_fn(&CanvasWidget::clear));
+
+ methods.registerMethod("drawDrawable", [](CanvasWidgetPtr canvasWidget, Drawable drawable) {
+ canvasWidget->drawDrawable(move(drawable), Vec2F());
+ });
+
+ methods.registerMethod("drawDrawables", [](CanvasWidgetPtr canvasWidget, List<Drawable> drawables) {
+ for (auto& drawable : drawables)
+ canvasWidget->drawDrawable(move(drawable), Vec2F());
+ });
+
+ methods.registerMethod("drawImage",
+ [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, Maybe<float> scale, Maybe<Color> color, Maybe<bool> centered) {
+ if (centered && *centered)
+ canvasWidget->drawImageCentered(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
+ else
+ canvasWidget->drawImage(image, position, scale.value(1.0f), color.value(Color::White).toRgba());
+ });
+ methods.registerMethod("drawImageDrawable",
+ [](CanvasWidgetPtr canvasWidget, String image, Vec2F position, MVariant<Vec2F, float> scale, Maybe<Color> color, Maybe<float> rotation) {
+ auto drawable = Drawable::makeImage(image, 1.0, true, {0.0, 0.0}, color.value(Color::White));
+ if (auto s = scale.maybe<Vec2F>())
+ drawable.transform(Mat3F::scaling(*s));
+ else if(auto s = scale.maybe<float>())
+ drawable.transform(Mat3F::scaling(*s));
+ if (rotation)
+ drawable.rotate(*rotation);
+ canvasWidget->drawDrawable(drawable, position);
+ });
+ methods.registerMethod("drawImageRect",
+ [](CanvasWidgetPtr canvasWidget, String image, RectF texCoords, RectF screenCoords, Maybe<Color> color) {
+ canvasWidget->drawImageRect(image, texCoords, screenCoords, color.value(Color::White).toRgba());
+ });
+ methods.registerMethod("drawTiledImage",
+ [](CanvasWidgetPtr canvasWidget, String image, Vec2D offset, RectF screenCoords, Maybe<float> scale, Maybe<Color> color) {
+ canvasWidget->drawTiledImage(image, scale.value(1.0f), offset, screenCoords, color.value(Color::White).toRgba());
+ });
+ methods.registerMethod("drawLine",
+ [](CanvasWidgetPtr canvasWidget, Vec2F begin, Vec2F end, Maybe<Color> color, Maybe<float> lineWidth) {
+ canvasWidget->drawLine(begin, end, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
+ });
+ methods.registerMethod("drawRect",
+ [](CanvasWidgetPtr canvasWidget, RectF rect, Maybe<Color> color) {
+ canvasWidget->drawRect(rect, color.value(Color::White).toRgba());
+ });
+ methods.registerMethod("drawPoly",
+ [](CanvasWidgetPtr canvasWidget, PolyF poly, Maybe<Color> color, Maybe<float> lineWidth) {
+ canvasWidget->drawPoly(poly, color.value(Color::White).toRgba(), lineWidth.value(1.0f));
+ });
+ methods.registerMethod("drawTriangles",
+ [](CanvasWidgetPtr canvasWidget, List<PolyF> triangles, Maybe<Color> color) {
+ auto tris = triangles.transformed([](PolyF const& poly) {
+ if (poly.sides() != 3)
+ throw StarException("Triangle must have exactly 3 sides");
+ return tuple<Vec2F, Vec2F, Vec2F>(poly.vertex(0), poly.vertex(1), poly.vertex(2));
+ });
+ canvasWidget->drawTriangles(tris, color.value(Color::White).toRgba());
+ });
+ methods.registerMethod("drawText",
+ [](CanvasWidgetPtr canvasWidget, String text, Json tp, unsigned fontSize, Maybe<Color> color, Maybe<float> lineSpacing, Maybe<String> font, Maybe<String> directives) {
+ canvasWidget->drawText(text, TextPositioning(tp), fontSize, color.value(Color::White).toRgba(), FontMode::Normal, lineSpacing.value(DefaultLineSpacing), font.value(""), directives.value(""));
+ });
+
+ return methods;
+}
LuaCallbacks LuaBindings::makeWidgetCallbacks(Widget* parentWidget, GuiReader* reader) {
LuaCallbacks callbacks;