From 8ff7cd1015d3f56e9153a0647c69851d2ab3fdb5 Mon Sep 17 00:00:00 2001 From: Insality Date: Thu, 9 Apr 2020 22:26:48 +0300 Subject: [PATCH 1/7] Update README --- README.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/README.md b/README.md index e43e429..90dc26e 100644 --- a/README.md +++ b/README.md @@ -200,21 +200,6 @@ https://insality.github.io/druid/ _Will fill later_ -## Future plans - -- Basic input component - -- Add on_layout_change support (to keep gui data between layout change) - -- Add on_change_language support (call single function to update all Druid instance) - -- Unit tests - -- Better documentation and examples - -- Add more comfortable gamepad support for GUI (ability to select button with DPAD and other stuff) - - ## License Original created by [AGulev](https://github.com/AGulev) From 07e847497cb00df5529717a6a854cee9511cabeb Mon Sep 17 00:00:00 2001 From: Insality Date: Thu, 9 Apr 2020 22:33:13 +0300 Subject: [PATCH 2/7] Update docs md --- docs_md/02-creating_custom_components.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_md/02-creating_custom_components.md b/docs_md/02-creating_custom_components.md index 07fd051..0b05e9e 100644 --- a/docs_md/02-creating_custom_components.md +++ b/docs_md/02-creating_custom_components.md @@ -2,7 +2,7 @@ ## Overview -Druid allows you to create your custom components from druid basic components or other custom components +Druid allows you to create your custom components from druid basic components or other custom components. Read the [basic component API here].(https://insality.github.io/druid/modules/component.html) ## Custom components From 55bcea7878aaee676efb21488165840494cc9ff4 Mon Sep 17 00:00:00 2001 From: Insality Date: Mon, 13 Apr 2020 19:18:45 +0300 Subject: [PATCH 3/7] Add scroll with scrolls in example --- example/gui/main/main.gui | 640 +++++++++++++++++++++++++++++++++++++- example/page/scroll.lua | 9 + 2 files changed, 648 insertions(+), 1 deletion(-) diff --git a/example/gui/main/main.gui b/example/gui/main/main.gui index be6d0fc..2ca1197 100644 --- a/example/gui/main/main.gui +++ b/example/gui/main/main.gui @@ -5108,7 +5108,7 @@ nodes { nodes { position { x: 0.0 - y: 450.0 + y: 700.0 z: 0.0 w: 1.0 } @@ -5915,6 +5915,644 @@ nodes { text_leading: 1.0 text_tracking: 0.0 } +nodes { + position { + x: 0.0 + y: -960.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: 600.0 + y: 300.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: "kenney/empty" + id: "children_scroll" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "scroll_page_content" + layer: "image" + 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: 1.0 + template_node_child: false + size_mode: SIZE_MODE_MANUAL +} +nodes { + position { + x: 300.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: 1200.0 + y: 300.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.9019608 + y: 0.9019608 + z: 0.5019608 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "children_scroll_content" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll" + layer: "image" + 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: -500.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: 300.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.9019608 + y: 0.3019608 + z: 0.3019608 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "children_scroll_1" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_content" + 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: 0.0 + y: 150.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: 600.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: "kenney/empty" + id: "children_scroll_content_1" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_N + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_1" + 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: 0.0 + y: -320.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: "Scroll me up!\n" + "\n" + "\n" + "Scroll me down!" + font: "game" + id: "children_scroll_text_1" + 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: true + parent: "children_scroll_content_1" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 0.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} +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: 200.0 + y: 300.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.5019608 + y: 0.3019608 + z: 0.5019608 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "children_scroll_2" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_content" + 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: 0.0 + y: 150.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: 600.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: "kenney/empty" + id: "children_scroll_content_2" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_N + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_2" + 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: 0.0 + y: -320.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: "Scroll me up!\n" + "\n" + "\n" + "Scroll me down!" + font: "game" + id: "children_scroll_text_2" + 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: true + parent: "children_scroll_content_2" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 0.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 500.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: 300.0 + z: 0.0 + w: 1.0 + } + color { + x: 0.6 + y: 0.3019608 + z: 0.4 + w: 1.0 + } + type: TYPE_BOX + blend_mode: BLEND_MODE_ALPHA + texture: "" + id: "children_scroll_3" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_content" + 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: 0.0 + y: 150.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: 600.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: "kenney/empty" + id: "children_scroll_content_3" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_N + adjust_mode: ADJUST_MODE_FIT + parent: "children_scroll_3" + 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: 0.0 + y: -320.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: "Scroll me up!\n" + "\n" + "\n" + "Scroll me down!" + font: "game" + id: "children_scroll_text_3" + 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: true + parent: "children_scroll_content_3" + layer: "" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 0.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} nodes { position { x: 0.0 diff --git a/example/page/scroll.lua b/example/page/scroll.lua index 6557082..d15015b 100644 --- a/example/page/scroll.lua +++ b/example/page/scroll.lua @@ -39,6 +39,15 @@ end function M.setup_page(self) self.druid:new_scroll("scroll_page_content", "scroll_page") self.druid:new_scroll("simple_scroll_content", "simple_scroll_input") + + -- scroll contain scrolls: + -- parent first + self.druid:new_scroll("children_scroll_content", "children_scroll") + -- chilren next + self.druid:new_scroll("children_scroll_content_1", "children_scroll_1") + self.druid:new_scroll("children_scroll_content_2", "children_scroll_2") + self.druid:new_scroll("children_scroll_content_3", "children_scroll_3") + init_grid(self) end From 8815ca8896f87d6cdeed294d94666200fa6b6452 Mon Sep 17 00:00:00 2001 From: Insality Date: Mon, 13 Apr 2020 19:32:13 +0300 Subject: [PATCH 4/7] Add simple slider example page --- example/gui/main/main.gui | 1063 +++++++++++++++++++++++++++++- example/gui/main/main.gui_script | 3 + example/lang.lua | 4 +- example/page/slider.lua | 20 + 4 files changed, 1088 insertions(+), 2 deletions(-) create mode 100644 example/page/slider.lua diff --git a/example/gui/main/main.gui b/example/gui/main/main.gui index 2ca1197..91ec206 100644 --- a/example/gui/main/main.gui +++ b/example/gui/main/main.gui @@ -5108,7 +5108,7 @@ nodes { nodes { position { x: 0.0 - y: 700.0 + y: 450.0 z: 0.0 w: 1.0 } @@ -6553,6 +6553,1067 @@ nodes { text_leading: 1.0 text_tracking: 0.0 } +nodes { + position { + x: 2400.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: 1.0 + y: 1.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: "kenney/empty" + id: "slider_page" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_STRETCH + parent: "C_Anchor" + layer: "image" + 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: 0.0 + y: 200.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: 190.0 + y: 4.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: "kenney/slider_back" + id: "slider_back_simple" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "slider_page" + layer: "image" + 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: -95.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: 0.7 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 36.0 + y: 36.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: "kenney/slider_move" + id: "slider_simple_pin" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "slider_back_simple" + layer: "image" + 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: 0.0 + y: 30.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.7 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 100.0 + y: 60.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: "50%" + font: "game" + id: "slider_simple_text" + 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: "slider_back_simple" + layer: "text" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 0.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} +nodes { + position { + x: 0.0 + y: 50.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: 190.0 + y: 4.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: "kenney/slider_back" + id: "slider_back_notched" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "slider_page" + layer: "image" + 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: 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: 1.0 + y: 1.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: "kenney/empty" + id: "notches" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "slider_back_notched" + 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: -95.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_0" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -76.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_1" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -57.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_2" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -38.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_3" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -19.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_4" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_5" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 19.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_6" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 38.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_7" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 57.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_8" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 76.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_9" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: 95.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: 0.1 + y: 0.6 + z: 1.0 + w: 1.0 + } + size { + x: 17.0 + y: 17.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: "kenney/tick" + id: "notch_10" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "notches" + 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: 0.5 + template_node_child: false + size_mode: SIZE_MODE_AUTO +} +nodes { + position { + x: -95.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: 0.7 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 36.0 + y: 36.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: "kenney/slider_move" + id: "slider_notched_pin" + xanchor: XANCHOR_NONE + yanchor: YANCHOR_NONE + pivot: PIVOT_CENTER + adjust_mode: ADJUST_MODE_FIT + parent: "slider_back_notched" + layer: "image" + 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: 0.0 + y: 30.0 + z: 0.0 + w: 1.0 + } + rotation { + x: 0.0 + y: 0.0 + z: 0.0 + w: 1.0 + } + scale { + x: 0.7 + y: 0.7 + z: 1.0 + w: 1.0 + } + size { + x: 100.0 + y: 60.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: "50%" + font: "game" + id: "slider_notched_text" + 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: "slider_back_notched" + layer: "text" + inherit_alpha: true + alpha: 1.0 + outline_alpha: 1.0 + shadow_alpha: 0.0 + template_node_child: false + text_leading: 1.0 + text_tracking: 0.0 +} nodes { position { x: 0.0 diff --git a/example/gui/main/main.gui_script b/example/gui/main/main.gui_script index 26f3d8a..e9a0106 100644 --- a/example/gui/main/main.gui_script +++ b/example/gui/main/main.gui_script @@ -7,12 +7,14 @@ local main_page = require("example.page.main") local text_page = require("example.page.texts") local button_page = require("example.page.button") local scroll_page = require("example.page.scroll") +local slider_page = require("example.page.slider") local pages = { "main_page", "texts_page", "button_page", "scroll_page", + "slider_page", } local function on_control_button(self, delta) @@ -47,6 +49,7 @@ function init(self) text_page.setup_page(self) button_page.setup_page(self) scroll_page.setup_page(self) + slider_page.setup_page(self) -- Refresh state on_control_button(self, 0) diff --git a/example/lang.lua b/example/lang.lua index c7eb298..addbb3d 100644 --- a/example/lang.lua +++ b/example/lang.lua @@ -7,6 +7,7 @@ local en = { texts_page = "Text page", button_page = "Button page", scroll_page = "Scroll page", + slider_page = "Slider page", ui_section_button = "Button", ui_section_text = "Text", ui_section_timer = "Timer", @@ -23,6 +24,7 @@ local ru = { texts_page = "Текст", button_page = "Кнопки", scroll_page = "Скролл", + slider_page = "Слайдеры", ui_section_button = "Кнопка", ui_section_text = "Текст", ui_section_timer = "Таймер", @@ -48,4 +50,4 @@ function M.toggle_locale() msg.post("/gui#main", const.ON_CHANGE_LANGUAGE) end -return M \ No newline at end of file +return M diff --git a/example/page/slider.lua b/example/page/slider.lua new file mode 100644 index 0000000..a7bcdd4 --- /dev/null +++ b/example/page/slider.lua @@ -0,0 +1,20 @@ +local M = {} + + +function M.setup_page(self) + local slider = self.druid:new_slider("slider_simple_pin", vmath.vector3(95, 0, 0), function(_, value) + gui.set_text(gui.get_node("slider_simple_text"), math.ceil(value * 100) .. "%") + end) + + slider:set(0.2) + + local slider_notched = self.druid:new_slider("slider_notched_pin", vmath.vector3(95, 0, 0), function(_, value) + gui.set_text(gui.get_node("slider_notched_text"), math.ceil(value * 100) .. "%") + end) + + slider_notched:set_steps({0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}) + slider_notched:set(0.2) +end + + +return M From 0539746519e757424e0868f66a7d6290d12a8194 Mon Sep 17 00:00:00 2001 From: Insality Date: Mon, 13 Apr 2020 19:35:32 +0300 Subject: [PATCH 5/7] Scale up button in default style (instead of scale down). Faster animation --- druid/styles/default/anims.lua | 2 +- druid/styles/default/style.lua | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/druid/styles/default/anims.lua b/druid/styles/default/anims.lua index d2d3d69..5852d4e 100644 --- a/druid/styles/default/anims.lua +++ b/druid/styles/default/anims.lua @@ -5,7 +5,7 @@ local function scale_to(self, node, to, callback, time, delay, easing) easing = easing or gui.EASING_INSINE time = time or M.SCALE_ANIMATION_TIME delay = delay or 0 - time = time or 0.25 + time = time or 0.10 gui.animate(node, gui.PROP_SCALE, to, easing, time, delay, function() if callback then diff --git a/druid/styles/default/style.lua b/druid/styles/default/style.lua index 5e3e05b..eaddd9d 100644 --- a/druid/styles/default/style.lua +++ b/druid/styles/default/style.lua @@ -5,9 +5,9 @@ local M = {} M["button"] = { - HOVER_SCALE = vmath.vector3(-0.025, -0.025, 1), - HOVER_TIME = 0.05, - SCALE_CHANGE = vmath.vector3(-0.05, -0.05, 1), + HOVER_SCALE = vmath.vector3(0.02, 0.02, 1), + HOVER_TIME = 0.04, + SCALE_CHANGE = vmath.vector3(0.035, 0.035, 1), BTN_SOUND = "click", BTN_SOUND_DISABLED = "click", DISABLED_COLOR = vmath.vector4(0, 0, 0, 1), From 2cfc6e477e545b392e2f748e62b0660344ebe658 Mon Sep 17 00:00:00 2001 From: Insality Date: Mon, 13 Apr 2020 19:36:32 +0300 Subject: [PATCH 6/7] Update docs --- docs/index.html | 2 +- docs/modules/component.html | 2 +- docs/modules/druid.back_handler.html | 2 +- docs/modules/druid.blocker.html | 2 +- docs/modules/druid.button.html | 2 +- docs/modules/druid.checkbox.html | 2 +- docs/modules/druid.checkbox_group.html | 2 +- docs/modules/druid.grid.html | 2 +- docs/modules/druid.helper.html | 2 +- docs/modules/druid.hover.html | 2 +- docs/modules/druid.html | 2 +- docs/modules/druid.input.html | 2 +- docs/modules/druid.lang_text.html | 2 +- docs/modules/druid.progress.html | 2 +- docs/modules/druid.radio_group.html | 2 +- docs/modules/druid.scroll.html | 2 +- docs/modules/druid.slider.html | 2 +- docs/modules/druid.text.html | 2 +- docs/modules/druid.timer.html | 2 +- docs/modules/druid_event.html | 2 +- docs/modules/druid_instance.html | 2 +- docs/topics/01-components.md.html | 7 ++-- .../02-creating_custom_components.md.html | 16 ++++++-- docs/topics/03-styles.md.html | 2 +- docs/topics/04-druid_assets.md.html | 2 +- docs/topics/05-examples.md.html | 2 +- docs/topics/README.md.html | 40 ++++++------------- docs_md/01-components.md | 3 +- docs_md/02-creating_custom_components.md | 14 +++++-- 29 files changed, 66 insertions(+), 62 deletions(-) diff --git a/docs/index.html b/docs/index.html index f70f2e4..87c1f53 100644 --- a/docs/index.html +++ b/docs/index.html @@ -185,7 +185,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/component.html b/docs/modules/component.html index 1f148a1..4e3c79a 100644 --- a/docs/modules/component.html +++ b/docs/modules/component.html @@ -440,7 +440,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.back_handler.html b/docs/modules/druid.back_handler.html index c80f183..31faacf 100644 --- a/docs/modules/druid.back_handler.html +++ b/docs/modules/druid.back_handler.html @@ -215,7 +215,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.blocker.html b/docs/modules/druid.blocker.html index 6c15349..792519a 100644 --- a/docs/modules/druid.blocker.html +++ b/docs/modules/druid.blocker.html @@ -234,7 +234,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.button.html b/docs/modules/druid.button.html index e08067f..956c98c 100644 --- a/docs/modules/druid.button.html +++ b/docs/modules/druid.button.html @@ -404,7 +404,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.checkbox.html b/docs/modules/druid.checkbox.html index 8364f00..013ee8a 100644 --- a/docs/modules/druid.checkbox.html +++ b/docs/modules/druid.checkbox.html @@ -277,7 +277,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.checkbox_group.html b/docs/modules/druid.checkbox_group.html index 2c63f9a..bf11124 100644 --- a/docs/modules/druid.checkbox_group.html +++ b/docs/modules/druid.checkbox_group.html @@ -239,7 +239,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.grid.html b/docs/modules/druid.grid.html index b5564b9..9bec5e2 100644 --- a/docs/modules/druid.grid.html +++ b/docs/modules/druid.grid.html @@ -370,7 +370,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.helper.html b/docs/modules/druid.helper.html index dbfbaf8..9ddb960 100644 --- a/docs/modules/druid.helper.html +++ b/docs/modules/druid.helper.html @@ -236,7 +236,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.hover.html b/docs/modules/druid.hover.html index 81a6999..f2b29ac 100644 --- a/docs/modules/druid.hover.html +++ b/docs/modules/druid.hover.html @@ -211,7 +211,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.html b/docs/modules/druid.html index 6901a78..3bb74e7 100644 --- a/docs/modules/druid.html +++ b/docs/modules/druid.html @@ -181,7 +181,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.input.html b/docs/modules/druid.input.html index eb2c15a..0334fd1 100644 --- a/docs/modules/druid.input.html +++ b/docs/modules/druid.input.html @@ -86,7 +86,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.lang_text.html b/docs/modules/druid.lang_text.html index 80038b0..ba2169c 100644 --- a/docs/modules/druid.lang_text.html +++ b/docs/modules/druid.lang_text.html @@ -240,7 +240,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.progress.html b/docs/modules/druid.progress.html index 0479611..841692c 100644 --- a/docs/modules/druid.progress.html +++ b/docs/modules/druid.progress.html @@ -379,7 +379,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.radio_group.html b/docs/modules/druid.radio_group.html index fd5cb47..6fb9890 100644 --- a/docs/modules/druid.radio_group.html +++ b/docs/modules/druid.radio_group.html @@ -239,7 +239,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.scroll.html b/docs/modules/druid.scroll.html index 1d7045d..0b34dc6 100644 --- a/docs/modules/druid.scroll.html +++ b/docs/modules/druid.scroll.html @@ -507,7 +507,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.slider.html b/docs/modules/druid.slider.html index 89ccf5b..077bdb9 100644 --- a/docs/modules/druid.slider.html +++ b/docs/modules/druid.slider.html @@ -278,7 +278,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.text.html b/docs/modules/druid.text.html index 1cd2d9e..32ed971 100644 --- a/docs/modules/druid.text.html +++ b/docs/modules/druid.text.html @@ -352,7 +352,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid.timer.html b/docs/modules/druid.timer.html index d89517a..1c73f4b 100644 --- a/docs/modules/druid.timer.html +++ b/docs/modules/druid.timer.html @@ -293,7 +293,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid_event.html b/docs/modules/druid_event.html index ec448eb..25f3c52 100644 --- a/docs/modules/druid_event.html +++ b/docs/modules/druid_event.html @@ -239,7 +239,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/modules/druid_instance.html b/docs/modules/druid_instance.html index 40abbe6..d08a246 100644 --- a/docs/modules/druid_instance.html +++ b/docs/modules/druid_instance.html @@ -769,7 +769,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/01-components.md.html b/docs/topics/01-components.md.html index 2a2afb2..3fdaf17 100644 --- a/docs/topics/01-components.md.html +++ b/docs/topics/01-components.md.html @@ -124,7 +124,8 @@ Where node name is name of node from GUI scene. You can use node_namet trigger if callback is empty -

- If you have stencil on buttons and you don't want trigger them outside of stencil node, you can use button:set_click_zone to restrict button click zone +

- If button have double click event and it is triggered, usual callback will be not invoked +- If you have stencil on buttons and you don't want trigger them outside of stencil node, you can use button:set_click_zone to restrict button click zone - Button can have key trigger to use then by key: button:set_key_trigger - Animation node can be used for example to animate small icon on big panel. Node name of trigger zone will be big panel and animation node will be small icon

@@ -137,7 +138,7 @@ Where node name is name of node from GUI scene. You can use node_nameBasic Druid text component. Text components by default have the text size adjusting.

Setup

-

Create text node with druid: text = druid:new_text(node_name, [initial_value])

+

Create text node with druid: text = druid:new_text(node_name, [initial_value], [is_disable_size_adjust])

Notes

- Text component by default have auto adjust text sizing. Text never will be bigger, than text node size, which you can setup in GUI scene. It can be disabled on component creating by settings argument is_no_adjust to true

@@ -373,7 +374,7 @@ Key is value from druid const: const.SIDE.X (or just "x") or const.SIDE.Y (or ju
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/02-creating_custom_components.md.html b/docs/topics/02-creating_custom_components.md.html index 30efb0f..6880c7f 100644 --- a/docs/topics/02-creating_custom_components.md.html +++ b/docs/topics/02-creating_custom_components.md.html @@ -82,7 +82,9 @@

Overview

-

Druid allows you to create your custom components from druid basic components or other custom components

+

Druid allows you to create your custom components from druid basic components or other custom components.

+ +

Every component is the children of Basic Druid component. Read the [basic component API here].(https://insality.github.io/druid/modules/component.html), Methods of basic components you can call via self:{method_name}

@@ -94,7 +96,7 @@ local const = require("druid.const") local component = require("druid.component") -local M = component.create("name_your_component") +local M = component.create("my_component") -- Component constructor function M.init(self, ...) @@ -146,16 +148,22 @@ -

Registering make new function with "new{componentname}". In our example it will be: druid:new_my_component()

+

Registering make new function with "new{componentname}". In our example it will be: druid:new_my_component().

+ +

Or you can create component without registering with druid:create(my_component_module)

As component registered, you can create your component with next code:

 local druid = require("druid.druid")
+local my_component = require("my.amazing.component")
 
 function init(self)
     self.druid = druid.new(self)
+
     local my_component = self.druid:new_my_component(...)
+    -- or --
+ local my_component = self.druid:create(my_component, ...)
 end
 
@@ -225,7 +233,7 @@ There is next interests in druid:
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/03-styles.md.html b/docs/topics/03-styles.md.html index 259f54d..d632be3 100644 --- a/docs/topics/03-styles.md.html +++ b/docs/topics/03-styles.md.html @@ -138,7 +138,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/04-druid_assets.md.html b/docs/topics/04-druid_assets.md.html index 85d8667..3d87441 100644 --- a/docs/topics/04-druid_assets.md.html +++ b/docs/topics/04-druid_assets.md.html @@ -89,7 +89,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/05-examples.md.html b/docs/topics/05-examples.md.html index ba040e2..5531e13 100644 --- a/docs/topics/05-examples.md.html +++ b/docs/topics/05-examples.md.html @@ -87,7 +87,7 @@
generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
diff --git a/docs/topics/README.md.html b/docs/topics/README.md.html index 02732fa..197a296 100644 --- a/docs/topics/README.md.html +++ b/docs/topics/README.md.html @@ -41,7 +41,6 @@
  • Examples
  • Documentation
  • Games powered by Druid
  • -
  • Future plans
  • License
  • Issues and suggestions
  • @@ -156,19 +155,19 @@
    • Button - Basic Druid input component

    • Text - Basic Druid text component

    • -
    • Lang text - Wrap on Text component to handle localization

    • -
    • Scroll - Basic Druid scroll component

    • -
    • Progress - Basic Druid progress bar component

    • -
    • Slider - Basic Druid slider component

    • -
    • Input - Basic Druid text input component (unimplemented)

    • -
    • Checkbox - Basic Druid checkbox component

    • -
    • Checkbox group - Several checkboxes in one group

    • -
    • Radio group - Several checkboxes in one group with single choice

    • +
    • Lang text - Wrap on Text component to handle localization

    • +
    • Scroll - Basic Druid scroll component

    • +
    • Progress - Basic Druid progress bar component

    • +
    • Slider - Basic Druid slider component

    • +
    • Input - Basic Druid text input component (unimplemented)

    • +
    • Checkbox - Basic Druid checkbox component

    • +
    • Checkbox group - Several checkboxes in one group

    • +
    • Radio group - Several checkboxes in one group with single choice

    • Blocker - Block input in node zone component

    • -
    • Back Handler - Handle back button (Android back, backspace)

    • -
    • Timer - Handle timer work on gui text node

    • -
    • Grid - Component for manage node positions

    • -
    • Hover - System Druid component, handle hover node state

    • +
    • Back Handler - Handle back button (Android back, backspace)

    • +
    • Timer - Handle timer work on gui text node

    • +
    • Grid - Component for manage node positions

    • +
    • Hover - System Druid component, handle hover node state

    Full info see on components.md

    @@ -294,19 +293,6 @@ https://insality.github.io/druid/

    Will fill later

    -

    -

    Future plans

    - -
      -
    • Basic input component

    • -
    • Add onlayoutchange support (to keep gui data between layout change)

    • -
    • Add onchangelanguage support (call single function to update all Druid instance)

    • -
    • Unit tests

    • -
    • Better documentation and examples

    • -
    • Add more comfortable gamepad support for GUI (ability to select button with DPAD and other stuff)

    • -
    - -

    License

    @@ -328,7 +314,7 @@ https://insality.github.io/druid/

    generated by LDoc 1.4.6 -Last updated 2020-04-09 22:11:32 +Last updated 2020-04-13 19:36:00
    diff --git a/docs_md/01-components.md b/docs_md/01-components.md index 28e427e..25aafcb 100644 --- a/docs_md/01-components.md +++ b/docs_md/01-components.md @@ -25,6 +25,7 @@ Where node name is name of node from GUI scene. You can use `node_name` as input - **on_long_click** - callback on long button tap, don't trigger if callback is empty - **on_hold_click** - hold callback, before long_click trigger, don't trigger if callback is empty - **on_double_click** - different callback, if tap button 2+ in row, don't trigger if callback is empty +- If button have double click event and it is triggered, usual callback will be not invoked - If you have stencil on buttons and you don't want trigger them outside of stencil node, you can use `button:set_click_zone` to restrict button click zone - Button can have key trigger to use then by key: `button:set_key_trigger` - Animation node can be used for example to animate small icon on big panel. Node name of trigger zone will be `big panel` and animation node will be `small icon` @@ -37,7 +38,7 @@ Where node name is name of node from GUI scene. You can use `node_name` as input Basic Druid text component. Text components by default have the text size adjusting. ### Setup -Create text node with druid: `text = druid:new_text(node_name, [initial_value])` +Create text node with druid: `text = druid:new_text(node_name, [initial_value], [is_disable_size_adjust])` ### Notes - Text component by default have auto adjust text sizing. Text never will be bigger, than text node size, which you can setup in GUI scene. It can be disabled on component creating by settings argument `is_no_adjust` to _true_ diff --git a/docs_md/02-creating_custom_components.md b/docs_md/02-creating_custom_components.md index 0b05e9e..f163c5c 100644 --- a/docs_md/02-creating_custom_components.md +++ b/docs_md/02-creating_custom_components.md @@ -2,7 +2,9 @@ ## Overview -Druid allows you to create your custom components from druid basic components or other custom components. Read the [basic component API here].(https://insality.github.io/druid/modules/component.html) +Druid allows you to create your custom components from druid basic components or other custom components. + +Every component is the children of Basic Druid component. Read the [basic component API here].(https://insality.github.io/druid/modules/component.html), Methods of basic components you can call via self:{method_name} ## Custom components @@ -12,7 +14,7 @@ Basic custom component template looks like this: local const = require("druid.const") local component = require("druid.component") -local M = component.create("name_your_component") +local M = component.create("my_component") -- Component constructor function M.init(self, ...) @@ -61,15 +63,21 @@ function init(self) end ``` -Registering make new function with "new_{component_name}". In our example it will be: `druid:new_my_component()` +Registering make new function with "new_{component_name}". In our example it will be: `druid:new_my_component()`. + +Or you can create component without registering with `druid:create(my_component_module)` As component registered, you can create your component with next code: ```lua local druid = require("druid.druid") +local my_component = require("my.amazing.component") function init(self) self.druid = druid.new(self) + local my_component = self.druid:new_my_component(...) + -- or -- + local my_component = self.druid:create(my_component, ...) end ``` From 7b381f1708352d264bfa371da5cb1a4c75869591 Mon Sep 17 00:00:00 2001 From: Insality Date: Mon, 13 Apr 2020 19:37:32 +0300 Subject: [PATCH 7/7] Update example app --- docs/druid/archive/archive_files.json | 2 +- docs/druid/archive/game.arcd0 | Bin 263313 -> 264687 bytes docs/druid/archive/game.arci0 | Bin 4608 -> 4688 bytes docs/druid/archive/game.dmanifest0 | Bin 9895 -> 10104 bytes docs/druid/archive/game.projectc0 | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/druid/archive/archive_files.json b/docs/druid/archive/archive_files.json index 58cf9cb..c1178a4 100644 --- a/docs/druid/archive/archive_files.json +++ b/docs/druid/archive/archive_files.json @@ -1 +1 @@ -{"content":[{"name":"game.projectc","size":2709,"pieces":[{"name":"game.projectc0","offset":0}]},{"name":"game.arci","size":4608,"pieces":[{"name":"game.arci0","offset":0}]},{"name":"game.arcd","size":263313,"pieces":[{"name":"game.arcd0","offset":0}]},{"name":"game.dmanifest","size":9895,"pieces":[{"name":"game.dmanifest0","offset":0}]},{"name":"game.public.der","size":162,"pieces":[{"name":"game.public.der0","offset":0}]}]} \ No newline at end of file +{"content":[{"name":"game.projectc","size":2713,"pieces":[{"name":"game.projectc0","offset":0}]},{"name":"game.arci","size":4688,"pieces":[{"name":"game.arci0","offset":0}]},{"name":"game.arcd","size":264687,"pieces":[{"name":"game.arcd0","offset":0}]},{"name":"game.dmanifest","size":10104,"pieces":[{"name":"game.dmanifest0","offset":0}]},{"name":"game.public.der","size":162,"pieces":[{"name":"game.public.der0","offset":0}]}]} \ No newline at end of file diff --git a/docs/druid/archive/game.arcd0 b/docs/druid/archive/game.arcd0 index c4149f2044fb16616abb5f20e47de4d8acba06a1..21c7d0c59aa76a05366048847c93567191f0ed99 100644 GIT binary patch delta 11281 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 L=0Szzdei?0a(r!} delta 9924 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 diff --git a/docs/druid/archive/game.dmanifest0 b/docs/druid/archive/game.dmanifest0 index 5e6862a6e104dc09eb06ee37e0d0b369be0a59fd..6f90eb63163d380122a89593c28846ea6361c228 100644 GIT binary patch delta 2568 zcmZ4P`@@f!>w)h?W}W(pFQcDrOZKx-WY_(3Em0(0Bhy(;NQ_Iw;H|1bR(Ne<6|27M zt~)CZtTC7nDrL_lsh?Vrm|KvOs$YcUuM;~U%x;3fs&7ilAG3LZLdtzh6RhRd|k;FZg73e+sO{fJ|b6UtFWKi z7R)TszvTY;-@Y>^%f$Vfyg*q-mbXDR)?Nv|>%V{j#t}VNY)U-kSIN{>{k-%>PAnets~V zW4-75V%{6qjlWt%#tR1MZFXjP$EZ_(=efzOh&A0y3celww1-tXx-#IK641|*y=Kb- zIvM+qUMqj{t?~EYX)^rlC&#j7W4GfDnp8D!h~Plil=`<^^Gw9Mvsv7BDZbE`uElV6GYi2PycY&-no_t8zO zvnvIUN)|h5FRh(?Ls4cjkCFsdUrn}9lF_j@SlMz6Cp)4A9L7gdG?e7fogq?G?e6tS2uLHNlmxQ?LijXu1ZLVkAZbuy~W6%qyjdy-@U$ za*@K8tbwJs6PNU4KW2%^2c))2U@I?xN`6i5mDU|Cv#^)!|VY$NRSwKT0-HQJuehIqS`dp>vxPpSJrZ z9W^cru&H6qPwJX|Td`%GQbsMq#tHkM9Te}Xj5l4ki{s<3@>wAd0?O1_{0$a9ymBhw tlug>{6t1SQk delta 2364 zcmez2x7?SRtKVlLvyP6zTUCRs@Y=*GR(;o9cUBx&V=y69NQ_Hl;>+k~+miik6xntE zTuT&5*T{5Mn>gpBNS#CdUN4TsShLBioC-B_?fn*Rc`&(N&PUWKN=#hF=qc~PZ7H&? zofBVNTzmJi(&UQ@;*)<%n20odyk&IG`Ega@xl^;Ro8C9%(&+A(Y%eb(GM`&FrsvChq?>Y|oHhRYegjZ-gc2E8{`Mi9}WL;(h5rfJH z$06@UJ;&*WQl&)>e>JADc-m4F_d-)mC(mQc#%_l! zyC!zOM6qvY`pYr-B8$vqeGY9MGvnVL)&-Sm_Ue9JLDn3a2XD&8f^1v0t$b$1Gqt2v zKK4he+#*W8UAitlxn0Ibq_FJ8q5cJK2c)YWnpDPnt!2D^BXaUYB^eQH?wvcxIKs!lkU%vNtAIi`Tedi#uFF01{VC6g&9m={mbrpV}Pk z5?{A+HJC;|OZgQgZRtap`Sc6gO(PTXt-O=)eF7=7@u?K~k_EQB`8BXZvOOa+$NH{|TOp z5iS}mw~Nn9Syi7fDxVi>_UWa;6xDr4@7~Q`$QQS`!sfB5<`%CyrR)H^$Q8kBLZ)T# z$WC_({Vq7oKmMX`s^BV9r&l-5TQ1$7&HpN2{W0sIWxc0LzRk9KV|phd(L{uGqh=@5 smY>aQC%v#*bHL}8?HZv^#