From 2dd490557f8056bb397e03224f26e36413a686f6 Mon Sep 17 00:00:00 2001 From: Mathias Westerdahl Date: Thu, 26 Apr 2018 20:34:25 +0200 Subject: [PATCH] Cleanup of code, and added better example gui --- input/game.input_binding | 4 - main/images/camera.png | Bin 0 -> 34451 bytes main/images/icons.atlas | 9 + main/images/qrcode.png | Bin 0 -> 18654 bytes main/main.collection | 147 ++---- main/main.gui | 943 +++++++++++++++++++++++++++++++++++++++ main/main.gui_script | 76 ++++ main/main.script | 153 ++++--- qrcode/src/qrcode.cpp | 144 ++---- 9 files changed, 1176 insertions(+), 300 deletions(-) create mode 100644 main/images/camera.png create mode 100644 main/images/icons.atlas create mode 100644 main/images/qrcode.png create mode 100644 main/main.gui create mode 100644 main/main.gui_script diff --git a/input/game.input_binding b/input/game.input_binding index 3372109..8ed1d4e 100644 --- a/input/game.input_binding +++ b/input/game.input_binding @@ -1,8 +1,4 @@ mouse_trigger { input: MOUSE_BUTTON_1 - action: "click" -} -touch_trigger { - input: TOUCH_MULTI action: "touch" } diff --git a/main/images/camera.png b/main/images/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..e5998debfd24d733d4805fec3e4e11cb3b2a5726 GIT binary patch literal 34451 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 Q3UD7*=C)>6P2BeWH?I9fQ~&?~ literal 0 HcmV?d00001 diff --git a/main/main.collection b/main/main.collection index e990b1e..dbf22de 100644 --- a/main/main.collection +++ b/main/main.collection @@ -1,7 +1,7 @@ name: "main" scale_along_z: 0 embedded_instances { - id: "go" + id: "controller" data: "components {\n" " id: \"script\"\n" " component: \"/main/main.script\"\n" @@ -40,7 +40,7 @@ embedded_instances { "" position { x: 480.0 - y: 640.0 + y: 772.055 z: 0.0 } rotation { @@ -58,114 +58,6 @@ embedded_instances { embedded_instances { id: "logo" data: "embedded_components {\n" - " id: \"label\"\n" - " type: \"label\"\n" - " data: \"size {\\n" - " x: 128.0\\n" - " y: 32.0\\n" - " z: 0.0\\n" - " w: 0.0\\n" - "}\\n" - "scale {\\n" - " x: 1.0\\n" - " y: 1.0\\n" - " z: 1.0\\n" - " w: 0.0\\n" - "}\\n" - "color {\\n" - " x: 1.0\\n" - " y: 1.0\\n" - " z: 1.0\\n" - " w: 1.0\\n" - "}\\n" - "outline {\\n" - " x: 0.0\\n" - " y: 0.0\\n" - " z: 0.0\\n" - " w: 1.0\\n" - "}\\n" - "shadow {\\n" - " x: 0.0\\n" - " y: 0.0\\n" - " z: 0.0\\n" - " w: 1.0\\n" - "}\\n" - "leading: 1.0\\n" - "tracking: 0.0\\n" - "pivot: PIVOT_E\\n" - "blend_mode: BLEND_MODE_ALPHA\\n" - "line_break: false\\n" - "text: \\\"QRCode: \\\"\\n" - "font: \\\"/dirtylarry/larryfont.font\\\"\\n" - "material: \\\"/builtins/fonts/label-df.material\\\"\\n" - "\"\n" - " position {\n" - " x: 200.54617\n" - " y: 47.57482\n" - " z: 0.0\n" - " }\n" - " rotation {\n" - " x: 0.0\n" - " y: 0.0\n" - " z: 0.0\n" - " w: 1.0\n" - " }\n" - "}\n" - "embedded_components {\n" - " id: \"qrcode\"\n" - " type: \"label\"\n" - " data: \"size {\\n" - " x: 128.0\\n" - " y: 32.0\\n" - " z: 0.0\\n" - " w: 0.0\\n" - "}\\n" - "scale {\\n" - " x: 1.0\\n" - " y: 1.0\\n" - " z: 1.0\\n" - " w: 0.0\\n" - "}\\n" - "color {\\n" - " x: 1.0\\n" - " y: 1.0\\n" - " z: 1.0\\n" - " w: 1.0\\n" - "}\\n" - "outline {\\n" - " x: 0.0\\n" - " y: 0.0\\n" - " z: 0.0\\n" - " w: 1.0\\n" - "}\\n" - "shadow {\\n" - " x: 0.0\\n" - " y: 0.0\\n" - " z: 0.0\\n" - " w: 1.0\\n" - "}\\n" - "leading: 1.0\\n" - "tracking: 0.0\\n" - "pivot: PIVOT_NW\\n" - "blend_mode: BLEND_MODE_ALPHA\\n" - "line_break: true\\n" - "text: \\\"...\\\"\\n" - "font: \\\"/dirtylarry/larryfont.font\\\"\\n" - "material: \\\"/builtins/fonts/label-df.material\\\"\\n" - "\"\n" - " position {\n" - " x: 73.19203\n" - " y: 21.95761\n" - " z: 0.0\n" - " }\n" - " rotation {\n" - " x: 0.0\n" - " y: 0.0\n" - " z: 0.0\n" - " w: 1.0\n" - " }\n" - "}\n" - "embedded_components {\n" " id: \"sprite\"\n" " type: \"sprite\"\n" " data: \"tile_set: \\\"/main/logo.atlas\\\"\\n" @@ -203,3 +95,38 @@ embedded_instances { z: 1.0 } } +embedded_instances { + id: "gui" + data: "components {\n" + " id: \"main\"\n" + " component: \"/main/main.gui\"\n" + " position {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " }\n" + " rotation {\n" + " x: 0.0\n" + " y: 0.0\n" + " z: 0.0\n" + " w: 1.0\n" + " }\n" + "}\n" + "" + position { + x: 0.0 + y: 0.0 + z: 0.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale3 { + x: 1.0 + y: 1.0 + z: 1.0 + } +} diff --git a/main/main.gui b/main/main.gui new file mode 100644 index 0000000..7c9db48 --- /dev/null +++ b/main/main.gui @@ -0,0 +1,943 @@ +script: "/main/main.gui_script" +fonts { + name: "larryfont" + font: "/dirtylarry/larryfont.font" +} +textures { + name: "icons" + texture: "/main/images/icons.atlas" +} +textures { + name: "camera" + texture: "/main/camera.atlas" +} +background_color { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 +} +nodes { + position { + x: 474.796 + y: 606.683 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 64.0 + y: 64.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.101960786 + y: 0.101960786 + z: 0.101960786 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "background" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 178.793 + y: 1190.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "scan_bn" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/dirtylarry/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 300.0 + y: 88.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "button/button_normal" + id: "scan_bn/larrybutton" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "scan_bn" + layer: "" + inherit_alpha: true + slice9 { + x: 32.0 + y: 32.0 + z: 32.0 + w: 32.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: -34.921 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "Scan\n" + "" + font: "larryfont" + id: "scan_bn/larrylabel" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "scan_bn/larrybutton" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 1.0 + overridden_fields: 1 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 780.0 + y: 1190.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "generate_bn" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/dirtylarry/button.gui" + template_node_child: false +} +nodes { + position { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 300.0 + y: 88.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "button/button_normal" + id: "generate_bn/larrybutton" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "generate_bn" + layer: "" + inherit_alpha: true + slice9 { + x: 32.0 + y: 32.0 + z: 32.0 + w: 32.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: -30.73 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "QRCode" + font: "larryfont" + id: "generate_bn/larrylabel" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + outline { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "generate_bn/larrybutton" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 1.0 + overridden_fields: 1 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 243.047 + y: 1190.751 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.25 + y: 0.25 + z: 1.0 + w: 1.0 + } + size { + x: 256.0 + y: 256.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "icons/camera" + id: "camera_icon" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 866.031 + y: 1190.751 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.25 + y: 0.25 + z: 1.0 + w: 1.0 + } + size { + x: 256.0 + y: 256.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "icons/qrcode" + id: "camera_icon1" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 476.318 + y: 811.556 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 100.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "camera/logo" + id: "camera" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 476.318 + y: 811.556 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 100.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "camera/logo" + id: "qrcode" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: false + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 124.016 + y: 181.747 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEMPLATE + id: "url" + layer: "" + inherit_alpha: true + alpha: 1.0 + template: "/dirtylarry/input.gui" + template_node_child: false +} +nodes { + position { + x: -43.71 + y: -68.422 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 800.0 + y: 72.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "button/button_pressed" + id: "url/bg" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_W + adjust_mode: ADJUST_MODE_FIT + parent: "url" + layer: "" + inherit_alpha: true + slice9 { + x: 32.0 + y: 32.0 + z: 32.0 + w: 32.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + overridden_fields: 1 + overridden_fields: 4 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 13.0 + y: 3.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 0.0 + y: 32.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.18431373 + y: 0.18431373 + z: 0.18431373 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "url/inner" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_W + adjust_mode: ADJUST_MODE_FIT + parent: "url/bg" + layer: "" + inherit_alpha: true + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_STENCIL + clipping_visible: true + clipping_inverted: false + alpha: 0.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 8.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 0.0 + y: 48.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.3254902 + y: 0.6666667 + z: 0.9960785 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "url/cursor" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_W + adjust_mode: ADJUST_MODE_FIT + parent: "url/inner" + layer: "" + inherit_alpha: false + slice9 { + x: 0.0 + y: 0.0 + z: 0.0 + w: 0.0 + } + clipping_mode: CLIPPING_MODE_NONE + clipping_visible: true + clipping_inverted: false + alpha: 1.0 + template_node_child: true + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 4.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 32.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "" + font: "larryfont" + id: "url/content" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + parent: "url/inner" + layer: "" + inherit_alpha: false + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 1.0 + overridden_fields: 8 + template_node_child: true + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 96.219 + y: 113.325 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + size { + x: 200.0 + y: 100.0 + z: 0.0 + w: 1.0 + } + color { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + type: TYPE_TEXT + blend_mode: BLEND_MODE_ALPHA + text: "" + font: "larryfont" + id: "text" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_W + outline { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + shadow { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } + adjust_mode: ADJUST_MODE_FIT + line_break: false + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 1.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} +material: "/builtins/materials/gui.material" +adjust_reference: ADJUST_REFERENCE_PARENT +max_nodes: 512 diff --git a/main/main.gui_script b/main/main.gui_script new file mode 100644 index 0000000..343f19d --- /dev/null +++ b/main/main.gui_script @@ -0,0 +1,76 @@ +local dirtylarry = require "dirtylarry/dirtylarry" + +function init(self) + msg.post(".", "acquire_input_focus") + + local logosize = 256 + local screen_width = sys.get_config("display.width", 600) + local screen_height = sys.get_config("display.height", 800) + local scale_width = screen_width / logosize + local scale_height = screen_height / logosize + + local bg = gui.get_node("background") + gui.set_position(bg, vmath.vector3(screen_width/2, screen_height/2, 0)) + gui.set_size(bg, vmath.vector3(screen_width, screen_height, 0)) + + local camera = gui.get_node("camera") + gui.set_position(camera, vmath.vector3(screen_width/2, screen_height/2, 0)) + gui.set_size(camera, vmath.vector3(screen_width/2, screen_height/2, 0)) + + local qrcode = gui.get_node("qrcode") + gui.set_position(qrcode, vmath.vector3(screen_width/2, screen_height/2, 0)) + gui.set_size(qrcode, vmath.vector3(screen_width/2, screen_height/2, 0)) + + local n = gui.get_node("scan_bn/larrylabel") + self.scan_label_pos = gui.get_position(n) + + n = gui.get_node("generate_bn/larrylabel") + self.generate_label_pos = gui.get_position(n) +end + +function final(self) + -- Add finalization code here + -- Remove this function if not needed +end + +function update(self, dt) + -- Add update code here + -- Remove this function if not needed +end + +local function set_text(self, text) + local n = gui.get_node("text") + gui.set_text(n, text) +end + +function on_message(self, message_id, message, sender) + if message_id == hash("set_text") then + set_text(self, message.text) + end +end + +local function isempty(s) + return s == nil or s == '' +end + +function on_input(self, action_id, action) + dirtylarry:button("scan_bn", action_id, action, function () + msg.post("controller", "click", {mode="SCAN"}) + end) + dirtylarry:button("generate_bn", action_id, action, function () + local text = sys.get_sys_info().device_ident + if isempty(text) then + text = "DEFOLD RULES!" + end + set_text(self, text) + msg.post("controller", "click", {mode="GENERATE", text=text}) + end) + + -- for some reason, the text recenters, and I don't want that + local n = gui.get_node("scan_bn/larrylabel") + gui.set_position(n, self.scan_label_pos) + + n = gui.get_node("generate_bn/larrylabel") + gui.set_position(n, self.generate_label_pos) +end + diff --git a/main/main.script b/main/main.script index b265e40..5373c84 100644 --- a/main/main.script +++ b/main/main.script @@ -1,19 +1,9 @@ -function init(self) - msg.post(".", "acquire_input_focus") - - local logosize = 128 - local screen_width = sys.get_config("display.width", 600) - local screen_height = sys.get_config("display.height", 800) - local scale_width = screen_width / logosize - local scale_height = screen_height / logosize - - go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) ) - +local function start_scan(self) if camera ~= nil then local sysinfo = sys.get_sys_info() - + local quality = camera.CAPTURE_QUALITY_HIGH local type = camera.CAMERA_TYPE_FRONT self.flip = 0 @@ -22,88 +12,105 @@ function init(self) quality = camera.CAPTURE_QUALITY_MEDIUM self.flip = 1 end - + if camera.start_capture(type, quality) then - self.cameraframe = camera.get_frame() - self.camerainfo = camera.get_info() - print("Initialized camera") - pprint(self.camerainfo) - - self.cameratextureheader = {width=self.camerainfo.width, - height=self.camerainfo.height, - type=resource.TEXTURE_TYPE_2D, - format=resource.TEXTURE_FORMAT_RGB, - num_mip_maps=1 } - - - self.debugtextureheader = {width=self.camerainfo.width, - height=self.camerainfo.height, - type=resource.TEXTURE_TYPE_2D, - format=resource.TEXTURE_FORMAT_RGB, - num_mip_maps=1 } + self.cameraframe = camera.get_frame() + self.camerainfo = camera.get_info() + print("Initialized camera") + self.cameratextureheader = {width=self.camerainfo.width, + height=self.camerainfo.height, + type=resource.TEXTURE_TYPE_2D, + format=resource.TEXTURE_FORMAT_RGB, + num_mip_maps=1 } + + self.debugtextureheader = {width=self.camerainfo.width, + height=self.camerainfo.height, + type=resource.TEXTURE_TYPE_2D, + format=resource.TEXTURE_FORMAT_RGB, + num_mip_maps=1 } end else print("could not start camera capture") end +end + +local function end_scan(self) + if self.cameraframe ~= nil then + self.cameraframe = nil + camera.stop_capture() + self.first = 0 + end +end + +local function update_scan(self) + + if self.cameraframe ~= nil then + local pathmodelcamera = go.get("#sprite", "texture0") + resource.set_texture(pathmodelcamera, self.cameratextureheader, self.cameraframe) + + local text = qrcode.scan(self.cameraframe, self.camerainfo.width, self.camerainfo.height, self.flip) + + if text ~= nil then + msg.post("gui", "set_text", {text=text}) + end_scan(self) + return + end + end +end + +local function generate_qrcode(self, text) + --self.qrcode = +end + +function init(self) + local logosize = 256 + local screen_width = sys.get_config("display.width", 600) + local screen_height = sys.get_config("display.height", 800) + local scale_width = screen_width / logosize + local scale_height = screen_height / logosize + + go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) ) + + start_scan(self) if qrcode == nil then print("could not find qrcode module") end + + self.mode = "SCAN" end function final(self) - if self.cameraframe ~= nil then - camera.stop_capture() - end + end_scan(self) end -local first = 1 - function update(self, dt) - if first == 0 then - first = 1 - - - local img = resource.load("/main/images/defold.png") - local text = qrcode.scan(self.cameraframe, self.camerainfo.width, self.camerainfo.height, img) - if text ~= nil then - label.set_text("logo#qrcode", text) - end - - local path = go.get("logo#sprite", "texture0") - local image = qrcode.get_debug_image() - if image ~= nil then - resource.set_texture(path, self.debugtextureheader, image) - end - end - - if self.cameraframe then - local pathmodelcamera = go.get("#sprite", "texture0") - resource.set_texture(pathmodelcamera, self.cameratextureheader, self.cameraframe) - - local text = qrcode.scan(self.cameraframe, self.camerainfo.width, self.camerainfo.height, self.flip) - - if text ~= nil then - label.set_text("logo#qrcode", text) - end - - local path = go.get("logo#sprite", "texture0") - local image = qrcode.get_debug_image() - if image ~= nil then - resource.set_texture(path, self.debugtextureheader, image) - end - end - + if self.mode == "SCAN" then + update_scan(self) + end end function on_input(self, action_id, action) if action_id == hash("click") or action_id == hash("touch") then - pprint(action) - label.set_text("logo#qrcode", "...") + --pprint(action) + --label.set_text("logo#qrcode", "...") + print("foo") + end +end + +function on_message(self, message_id, message) + if self.mode ~= message.mode then + if message.mode == "SCAN" then + start_scan(self) + + pprint(self.cameraframe) + else + end_scan(self) + generate_qrcode(self) + end + self.mode = message.mode end - end - diff --git a/qrcode/src/qrcode.cpp b/qrcode/src/qrcode.cpp index 2f87166..5e9e132 100644 --- a/qrcode/src/qrcode.cpp +++ b/qrcode/src/qrcode.cpp @@ -30,11 +30,6 @@ struct QRCodeContext QRCodeContext g_QRContext; -uint8_t* g_DebugPixels = 0; -uint32_t g_DebugWidth = 0; -uint32_t g_DebugHeight = 0; - - static int Scan(lua_State* L) { DM_LUA_STACK_CHECK(L, 1); @@ -44,105 +39,50 @@ static int Scan(lua_State* L) int height = luaL_checkint(L, 3); int flip = luaL_checkint(L, 4); - struct quirc *qr; + struct quirc* qr; qr = quirc_new(); if (!qr) { return luaL_error(L, "qrcode.scan: Failed to allocate memory"); } - uint8_t* filedata = 0; - // if( dmScript::IsBuffer(L, 4) ) - // { - // dmBuffer::HBuffer* buffer2 = dmScript::CheckBuffer(L, 4); - - // uint8_t* file; - // uint32_t filesize; - // dmBuffer::GetBytes(*buffer2, (void**)&file, &filesize); - - // int x,y,n; - // //filedata = Xstbi_load("/Users/mathiaswesterdahl/work/external/quirc/defold.png", &x, &y, &n, 0); - // filedata = Xstbi_load_from_memory(file, filesize, &x, &y, &n, 0); - // if( filedata ) - // { - // width = x; - // height = y; - // } - // printf("filedata: %p %d %d %d\n", filedata, width, height, n); - // } - - if (quirc_resize(qr, width, height) < 0) { return luaL_error(L, "qrcode.scan: Failed to allocate video memory"); } uint8_t* image = quirc_begin(qr, &width, &height); - if( filedata ) + uint8_t* data; + uint32_t datasize; + dmBuffer::GetBytes(buffer->m_Buffer, (void**)&data, &datasize); + + // Make it grey scale + for( int y = 0; y < height; ++y ) { - for( int y = 0; y < height; ++y ) + for( int x = 0; x < width; ++x ) { - for( int x = 0; x < width; ++x ) + float r = (float)data[y * width * 3 + x * 3 + 0] / 255.0f; + float g = (float)data[y * width * 3 + x * 3 + 1] / 255.0f; + float b = (float)data[y * width * 3 + x * 3 + 2] / 255.0f; + + float value = (r+g+b)/3.0f; + + value = value*value; + value += 0.1f; + if(value>1.0f) { - image[y * width + x] = filedata[y * width * 3 + x * 3]; + value = 1.0f; } + + if( flip == 0 ) + image[y * width + x] = (uint8_t)(value * 255.0f); + else + image[y * width + (width - x - 1)] = (uint8_t)(value * 255.0f); } - - free(filedata); } - else - { - uint8_t* data; - uint32_t datasize; - dmBuffer::GetBytes(buffer->m_Buffer, (void**)&data, &datasize); - - for( int y = 0; y < height; ++y ) - { - for( int x = 0; x < width; ++x ) - { - float r = (float)data[y * width * 3 + x * 3 + 0] / 255.0f; - float g = (float)data[y * width * 3 + x * 3 + 1] / 255.0f; - float b = (float)data[y * width * 3 + x * 3 + 2] / 255.0f; - - float value = (r+g+b)/3.0f; - - value = value*value; - value += 0.1f; - if(value>1.0f) - { - value = 1.0f; - } - - if( flip == 0 ) - image[y * width + x] = (uint8_t)(value * 255.0f); - else - image[y * width + (width - x - 1)] = (uint8_t)(value * 255.0f); - //image[y * width + x] = data[y * width * 3 + x * 3]; - } - } - - } - - if( g_DebugPixels != 0 ) - { - free(g_DebugPixels); - } - g_DebugWidth = width; - g_DebugHeight = height; - g_DebugPixels = (uint8_t*)malloc( width * height * 3 ); - for( int i = 0; i < width * height; ++i ) - { - g_DebugPixels[i*3 + 0] = image[i]; - g_DebugPixels[i*3 + 1] = image[i]; - g_DebugPixels[i*3 + 2] = image[i]; - } - + quirc_end(qr); - -//stbi_write_png("/Users/mathiaswesterdahl/work/external/quirc/test.png", width, height, 1, image, width); -//printf("Wrote: /Users/mathiaswesterdahl/work/external/quirc/test.png\n"); - int num_codes = quirc_count(qr); for( int i = 0; i < num_codes; i++) { @@ -154,13 +94,10 @@ static int Scan(lua_State* L) quirc_decode_error_t err = quirc_decode(&code, &data); if (err) { - printf("qrcode.scan: quirc decode error: %s\n", quirc_strerror(err)); num_codes = 0; - //return luaL_error(L, "qrcode.scan: quirc decode error: %s\n", quirc_strerror(err)); } else { - printf("Data: %s\n", data.payload); lua_pushstring(L, (const char*)data.payload); } break; @@ -173,42 +110,23 @@ static int Scan(lua_State* L) lua_pushnil(L); } - return 1; + return 1; } - -static int GetDebugImage(lua_State* L) +static int Generate(lua_State* L) { DM_LUA_STACK_CHECK(L, 1); - const dmBuffer::StreamDeclaration streams_decl[] = { - {dmHashString64("rgb"), dmBuffer::VALUE_TYPE_UINT8, 3}, - }; - - dmBuffer::HBuffer buffer; - dmBuffer::Result r = dmBuffer::Create(g_DebugWidth*g_DebugHeight, streams_decl, 1, &buffer); - if (r != dmBuffer::RESULT_OK) - { - lua_pushnil(L); - return 1; - } - - uint8_t* data; - uint32_t datasize; - dmBuffer::GetBytes(buffer, (void**)&data, &datasize); - - memcpy(data, g_DebugPixels, datasize); - - dmScript::LuaHBuffer luabuf = { buffer, true }; - PushBuffer(L, luabuf); - - return 1; + dmScript::LuaHBuffer* buffer = dmScript::CheckBuffer(L, 1); + int width = luaL_checkint(L, 2); + int height = luaL_checkint(L, 3); + int flip = luaL_checkint(L, 4); } static const luaL_reg Module_methods[] = { {"scan", Scan}, - {"get_debug_image", GetDebugImage}, + {"generate", Generate}, {0, 0} };