From 278a61b99db195b1ce1ad5e05d12f4745e12fc4b Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 11:45:54 +0300 Subject: [PATCH 01/10] Default style as druid default style (ha-ha) --- druid/system/settings.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/druid/system/settings.lua b/druid/system/settings.lua index 0dfe1a1..2027850 100644 --- a/druid/system/settings.lua +++ b/druid/system/settings.lua @@ -2,9 +2,11 @@ -- @module settings -- @local +local default_style = require("druid.styles.default.style") + local M = {} -M.default_style = nil +M.default_style = default_style function M.get_text(name) return "[Druid]: locales not inited" From d2d4ffcad46fd95fc31a39172f7ae7f61be740a4 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 11:46:16 +0300 Subject: [PATCH 02/10] All template node schema now without "/" character --- druid/component.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/druid/component.lua b/druid/component.lua index 0e17adf..5967838 100644 --- a/druid/component.lua +++ b/druid/component.lua @@ -96,10 +96,10 @@ function Component.get_node(self, node_or_name) if nodes then assert(type(node_or_name) == "strings", "You should pass node name instead of node") - return nodes[template_name .. node_or_name] + return nodes[template_name .. "/" .. node_or_name] else if type(node_or_name) == const.STRING then - return gui.get_node(template_name .. node_or_name) + return gui.get_node(template_name .. "/" .. node_or_name) else return node_or_name end From bdf9de239d8213d6fc2a4278b974801e5a548647 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 11:55:52 +0300 Subject: [PATCH 03/10] Fix template nodes path --- druid/component.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/druid/component.lua b/druid/component.lua index 5967838..1e8be3a 100644 --- a/druid/component.lua +++ b/druid/component.lua @@ -94,12 +94,16 @@ function Component.get_node(self, node_or_name) local template_name = self:get_template() or const.EMPTY_STRING local nodes = self:get_nodes() + if template_name ~= const.EMPTY_STRING then + template_name = template_name .. "/" + end + if nodes then assert(type(node_or_name) == "strings", "You should pass node name instead of node") - return nodes[template_name .. "/" .. node_or_name] + return nodes[template_name .. node_or_name] else if type(node_or_name) == const.STRING then - return gui.get_node(template_name .. "/" .. node_or_name) + return gui.get_node(template_name .. node_or_name) else return node_or_name end From a86d826ae146925c232347ffffa1a11721a98e02 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 11:56:07 +0300 Subject: [PATCH 04/10] Change default style setter --- druid/druid.lua | 5 +++++ druid/system/settings.lua | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/druid/druid.lua b/druid/druid.lua index 3a05c83..458b2c5 100644 --- a/druid/druid.lua +++ b/druid/druid.lua @@ -18,6 +18,8 @@ local const = require("druid.const") local druid_instance = require("druid.system.druid_instance") local settings = require("druid.system.settings") +local default_style = require("druid.styles.default.style") + local M = {} @@ -45,6 +47,9 @@ end -- @tparam[opt] table style Druid style module -- @treturn druid_instance Druid instance function M.new(context, style) + if settings.default_style == nil then + M.set_default_style(default_style) + end return druid_instance(context, style) end diff --git a/druid/system/settings.lua b/druid/system/settings.lua index 2027850..0dfe1a1 100644 --- a/druid/system/settings.lua +++ b/druid/system/settings.lua @@ -2,11 +2,9 @@ -- @module settings -- @local -local default_style = require("druid.styles.default.style") - local M = {} -M.default_style = default_style +M.default_style = nil function M.get_text(name) return "[Druid]: locales not inited" From 59d7635cf8258c684ae8dcc08cd0838fb9ac179a Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 12:16:59 +0300 Subject: [PATCH 05/10] Change game.project settings autofocus -> no_auto_input --- druid/system/druid_instance.lua | 2 +- game.project | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index f06f10b..4f0ec68 100644 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -43,7 +43,7 @@ local Druid = class("druid.druid_instance") local function input_init(self) - if not sys.get_config("druid.auto_focus") == "1" then + if sys.get_config("druid.no_auto_input") == "1" then return end diff --git a/game.project b/game.project index 2f30278..4c6aa2c 100644 --- a/game.project +++ b/game.project @@ -19,7 +19,7 @@ gamepads = /builtins/input/default.gamepadsc use_accelerometer = 0 [druid] -autofocus = 1 +no_auto_input = 0 [html5] engine_arguments = --verify-graphics-calls=false From 6367e662033bcde7f166599b1f894053f4806eff Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 12:17:06 +0300 Subject: [PATCH 06/10] Update README --- README.md | 71 ++++++++++++++++------- docs_md/02-creating_custom_components.md | 10 ++-- media/input_binding.png | Bin 0 -> 22818 bytes 3 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 media/input_binding.png diff --git a/README.md b/README.md index 23f3ed8..9c8e7a4 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ + + [![](media/druid_logo.png)](https://insality.github.io/druid/) -[![GitHub release (latest by date)](https://img.shields.io/github/v/release/insality/druid)](https://github.com/Insality/druid/releases) - -**Druid** - powerful defold component UI library. Use basic druid components or make your own game-specific components to make amazing GUI in your games. +**Druid** - powerful defold component UI library. Use basic Druid components or make your own game-specific components to make amazing GUI in your games. ## Setup ### Dependency -You can use the druid extension in your own project by adding this project as a [Defold library dependency](https://www.defold.com/manuals/libraries/). Open your game.project file and in the dependencies field under project add: +You can use the **Druid** extension in your own project by adding this project as a [Defold library dependency](https://www.defold.com/manuals/libraries/). Open your game.project file and in the dependencies field under project add: > [https://github.com/Insality/druid/archive/master.zip](https://github.com/Insality/druid/archive/master.zip) @@ -18,24 +18,45 @@ Or point to the ZIP file of a [specific release](https://github.com/Insality/dr ### Code -Adjust druid settings, if needed: +Adjust **Druid** settings, if needed: ```lua local druid = require("druid.druid") -- Used for button component and custom components +-- Callback should play sound by name druid.set_sound_function(callback) -- Used for lang_text component +-- Callback should return localized string by locale id druid.set_text_function(callback) -- Used for change default druid style druid.set_default_style(your_style) ``` +### Input bindings + +For **Druid** to work requires next input bindings: + +- Mouse trigger - `mouse-button-1` -> `touch` _For basic input components_ +- Key trigger - `Backspace` -> `backspace` _For back_handler component_ +- Key trigger - `Back` -> `text` _For back_handler component, Android back button_ + +![](media/input_binding.png) + +### Input capturing + +By default, **Druid** will auto-capture input focus, if any input component will be created. So you don't need to call `msg.post(".", "acquire_input_focus)"` + +If you not need this behaviour, you can disable it by settings `druid.no_auto_input` field in _game.project_: +``` +[druid] +no_auto_input = 1 +``` ## Components -Druid provides next basic components: +**Druid** provides next basic components: - **Button** - Basic game button - **Text** - Wrap on text node with text size adjusting @@ -69,16 +90,24 @@ Druid provides next basic components: Full info see on _components.md_ -## Creating components +## Basic usage + +For using **Druid**, first you should create Druid instance to spawn components. Pass to new Druid instance main engine functions: *update*, *on_message* and *on_input* + +All **Druid** components as arguments can apply node name string, you can don't do `gui.get_node()` before + +All **Druid** and component methods calling with `:` like `self.druid:new_button()` -Any components creating via druid: ```lua local druid = require("druid.druid") +local function button_callback(self) + print("Button was clicked!") +end + local function init(self) self.druid = druid.new(self) - local button = self.druid:new_button(node_name, callback) - local text = self.druid:new_text(node_text_name) + self.druid:new_button("button_node_name", button_callback) end function update(self, dt) @@ -90,14 +119,14 @@ function on_message(self, message_id, message, sender) end function on_input(self, action_id, action) - self.druid:on_input(action_id, action) + return self.druid:on_input(action_id, action) end ``` ## Examples -See the [example folder](https://github.com/insality/druid/tree/develop/example/kenney) for examples of how to use Druid +See the [example folder](https://github.com/insality/druid/tree/develop/example/kenney) for examples of how to use **Druid** See the [druid-assets repository](https://github.com/insality/druid-assets) for examples of how to create custom components and styles @@ -106,13 +135,13 @@ Try the [HTML5 version](https://insality.github.io/druid/druid/) of the example ## Documentation -To learn druid better, read next documentation: -- Druid components -- Create custom components -- Druid asset store -- Druid Styles +To learn **Druid** better, read next documentation: +- [Druid components](https://insality.github.io/druid/topics/01-components.md.html) +- [Create custom components](https://insality.github.io/druid/topics/02-creating_custom_components.md.html) +- [Druid styles](https://insality.github.io/druid/topics/03-styles.md.html) +- [Druid asset store](https://insality.github.io/druid/topics/04-druid_assets.md.html) -Full druid documentation you can find here: +Full **Druid** documentation you can find here: https://insality.github.io/druid/ @@ -127,7 +156,7 @@ _Will fill later_ - 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) +- Add on_change_language support (call single function to update all Druid instance) - Better documentation and examples @@ -140,9 +169,11 @@ Original created by [AGulev](https://github.com/AGulev) Developed and supporting by [Insality](https://github.com/Insality) +Assets from [Kenney](http://www.kenney.nl/) + MIT License ## Issues and suggestions -If you have any issues, questions or suggestions please [create an issue](https://github.com/Insality/druid/issues) or contact me: [insality@gmail.com](mailto:insality@gmail.com) +If you have any issues, questions or suggestions please [create an issue](https://github.com/Insality/druid/issues) or contact me: [insality@gmail.com](mailto:insality@gmail.com) diff --git a/docs_md/02-creating_custom_components.md b/docs_md/02-creating_custom_components.md index 197a2f3..05d09fd 100644 --- a/docs_md/02-creating_custom_components.md +++ b/docs_md/02-creating_custom_components.md @@ -10,7 +10,7 @@ Basic custom component template looks like this: local const = require("druid.const") local component = require("druid.component") -local M = component.create("your_component") +local M = component.create("name_your_component") -- Component constructor function M.init(self, ...) @@ -67,7 +67,7 @@ There is next interests in druid: ## Best practice on custom components -On each component recomended describe component scheme in next way: +On each component recommended describe component scheme in next way: ```lua -- Component module @@ -76,9 +76,9 @@ local component = require("druid.component") local M = component.create("your_component") local SCHEME = { - ROOT = "/root", - ITEM = "/item", - TITLE = "/title" + ROOT = "root", + ITEM = "item", + TITLE = "title" } function M.init(self, template_name, node_table) diff --git a/media/input_binding.png b/media/input_binding.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b68d6cdacbec2a4b74623859fd2e35a5908e90 GIT binary patch literal 22818 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 Date: Sun, 22 Mar 2020 12:54:56 +0300 Subject: [PATCH 07/10] Update README --- README.md | 61 +++++++++++++++-------- docs_md/01-components.md | 41 +++++++++++++-- docs_md/02-creating_custom_components.md | 9 +++- media/blocker_scheme.png | Bin 0 -> 8920 bytes media/text_anchor.gif | Bin 0 -> 60186 bytes media/text_autosize.png | Bin 0 -> 14385 bytes 6 files changed, 84 insertions(+), 27 deletions(-) create mode 100644 media/blocker_scheme.png create mode 100644 media/text_anchor.gif create mode 100644 media/text_autosize.png diff --git a/README.md b/README.md index 9c8e7a4..aa80846 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![](media/druid_logo.png)](https://insality.github.io/druid/) -**Druid** - powerful defold component UI library. Use basic Druid components or make your own game-specific components to make amazing GUI in your games. +**Druid** - powerful defold component UI library. Use basic **Druid** components or make your own game-specific components to make amazing GUI in your games. ## Setup @@ -15,8 +15,28 @@ You can use the **Druid** extension in your own project by adding this project a Or point to the ZIP file of a [specific release](https://github.com/Insality/druid/releases). +### Input bindings -### Code +For **Druid** to work requires next input bindings: + +- Mouse trigger - `Button 1` -> `touch` _For basic input components_ +- Key trigger - `Backspace` -> `backspace` _For back_handler component_ +- Key trigger - `Back` -> `text` _For back_handler component, Android back button_ + +![](media/input_binding.png) + + +### Input capturing [optional] + +By default, **Druid** will auto-capture input focus, if any input component will be created. So you don't need to call `msg.post(".", "acquire_input_focus)"` + +If you not need this behaviour, you can disable it by settings `druid.no_auto_input` field in _game.project_: +``` +[druid] +no_auto_input = 1 +``` + +### Code [optional] Adjust **Druid** settings, if needed: ```lua @@ -34,25 +54,6 @@ druid.set_text_function(callback) druid.set_default_style(your_style) ``` -### Input bindings - -For **Druid** to work requires next input bindings: - -- Mouse trigger - `mouse-button-1` -> `touch` _For basic input components_ -- Key trigger - `Backspace` -> `backspace` _For back_handler component_ -- Key trigger - `Back` -> `text` _For back_handler component, Android back button_ - -![](media/input_binding.png) - -### Input capturing - -By default, **Druid** will auto-capture input focus, if any input component will be created. So you don't need to call `msg.post(".", "acquire_input_focus)"` - -If you not need this behaviour, you can disable it by settings `druid.no_auto_input` field in _game.project_: -``` -[druid] -no_auto_input = 1 -``` ## Components @@ -123,6 +124,22 @@ function on_input(self, action_id, action) end ``` +## Druid Events + +Any **Druid** components as callbacks uses Druid Events. In component API ([button example](https://insality.github.io/druid/modules/druid.button.html#Events)) pointed list of component events. You can manually subscribe on this events by next API: + +- **event:subscribe**(callback) + +- **event:unsubscribe**(callback) + +- **event:clear**() + +Any events can handle several callbacks, if needed. + +## Features + +- Druid input goes as stack. Last created button will checked first. So create your GUI from back +- Don't forget about `return` in `on_input`: `return self.druid:on_input()`. It need, if you have more than 1 acquire inputs (several druid, other input system, etc) ## Examples @@ -158,6 +175,8 @@ _Will fill later_ - 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) diff --git a/docs_md/01-components.md b/docs_md/01-components.md index ecfb132..4039cf6 100644 --- a/docs_md/01-components.md +++ b/docs_md/01-components.md @@ -1,19 +1,50 @@ # Druid components ## Button -Basic game button +Basic Druid input component + +- Button callback have next params: (self, params, button_instance) + - **self** - Druid self context + - **params** - Additional params, specified on button creating + - **button_instance** - button itself +- Button have next events: + - **on_click** - basic button callback + - **on_repeated_click** - repeated click callback, while holding the button, don't trigger if callback is empty + - **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 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` ## Text -Wrap on text node with text size adjusting +Basic Druid text component + +- Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating +![](media/text_autosize.png) +- Text pivot can be changed with `text:set_pivot`, and text will save their position inside their text size box: +![](media/text_anchor.gif) ## Blocker -Block input in node zone +Druid component for block input + +It can be used for block input in special zone. + +Example: +![](media/blocker_scheme.png) + +Blue zone is **button** with close_window callback + +Yellow zone is blocker with window content + +So you can do the safe zones, when you have the big buttons ## Back Handler -Handle back button (Android, backspace) +Component to handle back button + +It works on Android back button and Backspace. Key triggers in `input.binding` should be setup ## Locale -Text component with handle localization system +Wrap on Druid text component to handle localization ## Timer Run timer on text node diff --git a/docs_md/02-creating_custom_components.md b/docs_md/02-creating_custom_components.md index 05d09fd..d761462 100644 --- a/docs_md/02-creating_custom_components.md +++ b/docs_md/02-creating_custom_components.md @@ -1,10 +1,12 @@ # Creating custom components ## Overview + Druid allows you to create your custom components from druid basic components or other custom components ## Custom components + Basic custom component template looks like this: ```lua local const = require("druid.const") @@ -102,4 +104,9 @@ function M.init(self, template_name, node_table) local my_style = self:get_style() end -``` \ No newline at end of file +``` + + +## Power of using templates + +You can use one component, but creating and customizing templates for them. Templates only requires to match the component scheme. \ No newline at end of file diff --git a/media/blocker_scheme.png b/media/blocker_scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1c32155af9e7676c8e0e7b7ad2bff8e2dd4c9f GIT binary patch literal 8920 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 literal 0 HcmV?d00001 diff --git a/media/text_anchor.gif b/media/text_anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..112a461fd3958b67069892c006f791dcb9e6d2e7 GIT binary patch literal 60186 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
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/component.html b/docs/modules/component.html index f3a81e9..c703735 100644 --- a/docs/modules/component.html +++ b/docs/modules/component.html @@ -406,7 +406,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.back_handler.html b/docs/modules/druid.back_handler.html index eaa9c22..061853f 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.blocker.html b/docs/modules/druid.blocker.html index d821b0d..bf2dcfb 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.button.html b/docs/modules/druid.button.html index 33d7a61..9273823 100644 --- a/docs/modules/druid.button.html +++ b/docs/modules/druid.button.html @@ -405,7 +405,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.checkbox.html b/docs/modules/druid.checkbox.html index eb4d359..0d56299 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.checkbox_group.html b/docs/modules/druid.checkbox_group.html index f546f95..1636a4b 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.grid.html b/docs/modules/druid.grid.html index 026b001..85fc6c0 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.helper.html b/docs/modules/druid.helper.html index f89fcdb..d4f4125 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.hover.html b/docs/modules/druid.hover.html index 7114a9a..39a0670 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.html b/docs/modules/druid.html index e1661a0..b7c0412 100644 --- a/docs/modules/druid.html +++ b/docs/modules/druid.html @@ -181,7 +181,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.input.html b/docs/modules/druid.input.html index d44bd0b..7847d31 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.lang_text.html b/docs/modules/druid.lang_text.html index 19324ec..79e417c 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.progress.html b/docs/modules/druid.progress.html index 98444fd..30ecee2 100644 --- a/docs/modules/druid.progress.html +++ b/docs/modules/druid.progress.html @@ -378,7 +378,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.radio_group.html b/docs/modules/druid.radio_group.html index 7daa804..c0d19cf 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.scroll.html b/docs/modules/druid.scroll.html index 83bf1f9..8bf1938 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.slider.html b/docs/modules/druid.slider.html index e1ee7ff..c2f9507 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.text.html b/docs/modules/druid.text.html index 78ac2f2..3e5a60a 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid.timer.html b/docs/modules/druid.timer.html index ce0ba1d..610f4d2 100644 --- a/docs/modules/druid.timer.html +++ b/docs/modules/druid.timer.html @@ -307,7 +307,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid_event.html b/docs/modules/druid_event.html index 2e568e6..dbcf349 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/modules/druid_instance.html b/docs/modules/druid_instance.html index 9f5def3..73f99bf 100644 --- a/docs/modules/druid_instance.html +++ b/docs/modules/druid_instance.html @@ -750,7 +750,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/topics/01-components.md.html b/docs/topics/01-components.md.html index f0b9fbc..61c39ad 100644 --- a/docs/topics/01-components.md.html +++ b/docs/topics/01-components.md.html @@ -92,23 +92,66 @@

Button

-

Basic game button

+

Basic Druid input component

+ +
    +
  • Button callback have next params: (self, params, button_instance) + +
    +- **self** - Druid self context
    +- **params** - Additional params, specified on button creating
    +- **button_instance** - button itself
    +
    +
  • +
  • Button have next events: + +
    +- **on_click** - basic button callback
    +- **on_repeated_click** - repeated click callback, while holding the button, don't trigger if callback is empty
    +- **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 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
  • +

Text

-

Wrap on text node with text size adjusting

+

Basic Druid text component

+ +
    +
  • Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating +
  • +
  • Text pivot can be changed with text:set_pivot, and text will save their position inside their text size box: +
  • +

Blocker

-

Block input in node zone

+

Druid component for block input

+ +

It can be used for block input in special zone.

+ +

Example: +

+ +

Blue zone is button with close_window callback

+ +

Yellow zone is blocker with window content

+ +

So you can do the safe zones, when you have the big buttons

Back Handler

-

Handle back button (Android, backspace)

+

Component to handle back button

+ +

It works on Android back button and Backspace. Key triggers in input.binding should be setup

Locale

-

Text component with handle localization system

+

Wrap on Druid text component to handle localization

Timer

@@ -155,7 +198,7 @@
generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
diff --git a/docs/topics/02-creating_custom_components.md.html b/docs/topics/02-creating_custom_components.md.html index ad82742..242991d 100644 --- a/docs/topics/02-creating_custom_components.md.html +++ b/docs/topics/02-creating_custom_components.md.html @@ -35,6 +35,7 @@
  • Overview
  • Custom components
  • Best practice on custom components
  • +
  • Power of using templates
  • @@ -80,18 +81,20 @@

    Overview

    +

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

    Custom components

    +

    Basic custom component template looks like this:

     local const = require("druid.const")
     local component = require("druid.component")
     
    -local M = component.create("your_component")
    +local M = component.create("name_your_component")
     
     -- Component constructor
     function M.init(self, ...)
    @@ -150,7 +153,7 @@ There is next interests in druid:
     
     

    Best practice on custom components

    -

    On each component recomended describe component scheme in next way:

    +

    On each component recommended describe component scheme in next way:

    @@ -160,9 +163,9 @@ There is next interests in druid:
     local M = component.create("your_component")
     
     local SCHEME = {
    -    ROOT = "/root",
    -    ITEM = "/item",
    -    TITLE = "/title"
    +    ROOT = "root",
    +    ITEM = "item",
    +    TITLE = "title"
     }
     
     function M.init(self, template_name, node_table)
    @@ -189,11 +192,17 @@ There is next interests in druid:
     
     
     
    +

    +

    Power of using templates

    + +

    You can use one component, but creating and customizing templates for them. Templates only requires to match the component scheme.

    + +
    generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
    diff --git a/docs/topics/03-styles.md.html b/docs/topics/03-styles.md.html index 2cda9d2..b4eb753 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
    diff --git a/docs/topics/04-druid_assets.md.html b/docs/topics/04-druid_assets.md.html index d1b551b..f75ffee 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
    diff --git a/docs/topics/05-examples.md.html b/docs/topics/05-examples.md.html index 5c7839a..b62e37b 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-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
    diff --git a/docs/topics/README.md.html b/docs/topics/README.md.html index bb9eeb2..78e9d71 100644 --- a/docs/topics/README.md.html +++ b/docs/topics/README.md.html @@ -34,7 +34,9 @@
    • Setup
    • Components
    • -
    • Creating components
    • +
    • Basic usage
    • +
    • Druid Events
    • +
    • Features
    • Examples
    • Documentation
    • Games powered by Druid
    • @@ -83,9 +85,7 @@

      -

      GitHub release (latest by date)

      - -

      Druid - powerful defold component UI library. Use basic druid components or make your own game-specific components to make amazing GUI in your games.

      +

      Druid - powerful defold component UI library. Use basic Druid components or make your own game-specific components to make amazing GUI in your games.

      @@ -93,7 +93,7 @@

      Dependency

      -

      You can use the druid extension in your own project by adding this project as a Defold library dependency. Open your game.project file and in the dependencies field under project add:

      +

      You can use the Druid extension in your own project by adding this project as a Defold library dependency. Open your game.project file and in the dependencies field under project add:

      https://github.com/Insality/druid/archive/master.zip

      @@ -101,18 +101,42 @@

      Or point to the ZIP file of a specific release.

      +

      Input bindings

      -

      Code

      +

      For Druid to work requires next input bindings:

      -

      Adjust druid settings, if needed:

      +
        +
      • Mouse trigger - Button 1 -> touch For basic input components
      • +
      • Key trigger - Backspace -> backspace For backhandler component_
      • +
      • Key trigger - Back -> text For backhandler component, Android back button_
      • +
      + +

      + + +

      Input capturing [optional]

      + +

      By default, Druid will auto-capture input focus, if any input component will be created. So you don't need to call msg.post(".", "acquire_input_focus)"

      + +

      If you not need this behaviour, you can disable it by settings druid.no_auto_input field in game.project:

      +
       [druid]
      + no_auto_input = 1
      +
      + + +

      Code [optional]

      + +

      Adjust Druid settings, if needed:

       local druid = require("druid.druid")
       
       -- Used for button component and custom components
      +-- Callback should play sound by name
       druid.set_sound_function(callback)
       
       -- Used for lang_text component
      +-- Callback should return localized string by locale id
       druid.set_text_function(callback)
       
       -- Used for change default druid style
      @@ -124,7 +148,7 @@
       

      Components

      -

      Druid provides next basic components: +

      Druid provides next basic components: - Button - Basic game button

        @@ -147,18 +171,26 @@

        Full info see on components.md

        -

        -

        Creating components

        +

        +

        Basic usage

        + +

        For using Druid, first you should create Druid instance to spawn components. Pass to new Druid instance main engine functions: update, *onmessage* and *oninput*

        + +

        All Druid components as arguments can apply node name string, you can don't do gui.get_node() before

        + +

        All Druid and component methods calling with : like self.druid:new_button()

        -

        Any components creating via druid:

         local druid = require("druid.druid")
         
        +local function button_callback(self)
        +    print("Button was clicked!")
        +end
        +
         local function init(self)
             self.druid = druid.new(self)
        -    local button = self.druid:new_button(node_name, callback)
        -    local text = self.druid:new_text(node_text_name)
        +    self.druid:new_button("button_node_name", button_callback)
         end
         
         function update(self, dt)
        @@ -170,16 +202,36 @@
         end
         
         function on_input(self, action_id, action)
        -    self.druid:on_input(action_id, action)
        +    return self.druid:on_input(action_id, action)
         end
         
        +

        +

        Druid Events

        + +

        Any Druid components as callbacks uses Druid Events. In component API (button example) pointed list of component events. You can manually subscribe on this events by next API:

        + +
          +
        • event:subscribe(callback)

        • +
        • event:unsubscribe(callback)

        • +
        • event:clear()

        • +
        + +

        Any events can handle several callbacks, if needed.

        + +

        +

        Features

        + +
          +
        • Druid input goes as stack. Last created button will checked first. So create your GUI from back
        • +
        • Don't forget about return in on_input: return self.druid:on_input(). It need, if you have more than 1 acquire inputs (several druid, other input system, etc)
        • +

        Examples

        -

        See the example folder for examples of how to use Druid

        +

        See the example folder for examples of how to use Druid

        See the druid-assets repository for examples of how to create custom components and styles

        @@ -189,13 +241,13 @@

        Documentation

        -

        To learn druid better, read next documentation: -- Druid components -- Create custom components -- Druid asset store -- Druid Styles

        +

        To learn Druid better, read next documentation: +- Druid components +- Create custom components +- Druid styles +- Druid asset store

        -

        Full druid documentation you can find here: +

        Full Druid documentation you can find here: https://insality.github.io/druid/

        @@ -211,7 +263,8 @@ https://insality.github.io/druid/

        • Basic input component

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

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

        • +
        • 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)

        @@ -224,19 +277,21 @@ https://insality.github.io/druid/

        Developed and supporting by Insality

        +

        Assets from Kenney

        +

        MIT License

        Issues and suggestions

        -

        If you have any issues, questions or suggestions please create an issue or contact me: insality@gmail.com +

        If you have any issues, questions or suggestions please create an issue or contact me: insality@gmail.com

        generated by LDoc 1.4.6 -Last updated 2020-03-22 02:23:51 +Last updated 2020-03-22 12:55:11
        From ed39091a8e615eaf5026782255ab457330e16477 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 12:59:44 +0300 Subject: [PATCH 09/10] Update media path in readme --- docs_md/01-components.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs_md/01-components.md b/docs_md/01-components.md index 4039cf6..a0da835 100644 --- a/docs_md/01-components.md +++ b/docs_md/01-components.md @@ -20,9 +20,9 @@ Basic Druid input component Basic Druid text component - Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating -![](media/text_autosize.png) +![](../media/text_autosize.png) - Text pivot can be changed with `text:set_pivot`, and text will save their position inside their text size box: -![](media/text_anchor.gif) +![](../media/text_anchor.gif) ## Blocker Druid component for block input @@ -30,7 +30,7 @@ Druid component for block input It can be used for block input in special zone. Example: -![](media/blocker_scheme.png) +![](../media/blocker_scheme.png) Blue zone is **button** with close_window callback From a0e5abeffdb575d75a28729d8b2b1f6cf56b8c85 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 15:19:10 +0300 Subject: [PATCH 10/10] Update README and docs --- README.md | 41 +++++----- 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 | 82 +++++++++++-------- .../02-creating_custom_components.md.html | 2 +- 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 | 46 +++++++---- 29 files changed, 141 insertions(+), 118 deletions(-) diff --git a/README.md b/README.md index aa80846..7f7c5c9 100644 --- a/README.md +++ b/README.md @@ -58,37 +58,38 @@ druid.set_default_style(your_style) ## Components **Druid** provides next basic components: -- **Button** - Basic game button -- **Text** - Wrap on text node with text size adjusting +- **[Button](https://github.com/Insality/druid/blob/master/docs_md/01-components.md#button)** - Basic Druid input component -- **Blocker** - Block input in node zone +- **[Text](https://github.com/Insality/druid/blob/master/docs_md/01-components.md#text)** - Basic Druid text component -- **Back Handler** - Handle back button (Android, backspace) +- **Lang text** - Wrap on Text component to handle localization -- **Lang text** - Text component with handle localization system +- **Scroll** - Basic Druid scroll component -- **Timer** - Run timer on text node +- **Progress** - Basic Druid progress bar component -- **Progress** - Basic progress bar +- **Slider** - Basic Druid slider component -- **Scroll** - Basic scroll component +- **Input** - Basic Druid text input component (unimplemented) -- **Grid** - Component for manage node positions - -- **Slider** - Basic slider component - -- **Checkbox** - Basic checkbox component +- **Checkbox** - Basic Druid checkbox component - **Checkbox group** - Several checkboxes in one group - **Radio group** - Several checkboxes in one group with single choice -- **Hover** - Trigger component for check node hover state +- **[Blocker](https://github.com/Insality/druid/blob/master/docs_md/01-components.md#blocker)** - Block input in node zone component -- **Input** - Component to process user text input +- **Back Handler** - Handle back button (Android back, backspace) -Full info see on _components.md_ +- **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](https://github.com/Insality/druid/blob/master/docs_md/01-components.md)_ ## Basic usage @@ -153,10 +154,10 @@ Try the [HTML5 version](https://insality.github.io/druid/druid/) of the example ## Documentation To learn **Druid** better, read next documentation: -- [Druid components](https://insality.github.io/druid/topics/01-components.md.html) -- [Create custom components](https://insality.github.io/druid/topics/02-creating_custom_components.md.html) -- [Druid styles](https://insality.github.io/druid/topics/03-styles.md.html) -- [Druid asset store](https://insality.github.io/druid/topics/04-druid_assets.md.html) +- [Druid components](https://github.com/Insality/druid/blob/master/docs_md/01-components.md) +- [Create custom components](https://github.com/Insality/druid/blob/master/docs_md/02-creating_custom_components.md) +- [Druid styles](https://github.com/Insality/druid/blob/master/docs_md/03-styles.md) +- [Druid asset store](https://github.com/Insality/druid/blob/master/docs_md/04-druid_assets.md) Full **Druid** documentation you can find here: https://insality.github.io/druid/ diff --git a/docs/index.html b/docs/index.html index 7d3b373..12e78fc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -185,7 +185,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/component.html b/docs/modules/component.html index c703735..2a20847 100644 --- a/docs/modules/component.html +++ b/docs/modules/component.html @@ -406,7 +406,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.back_handler.html b/docs/modules/druid.back_handler.html index 061853f..e325a78 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.blocker.html b/docs/modules/druid.blocker.html index bf2dcfb..561ad3b 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.button.html b/docs/modules/druid.button.html index 9273823..bbdf5fe 100644 --- a/docs/modules/druid.button.html +++ b/docs/modules/druid.button.html @@ -405,7 +405,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.checkbox.html b/docs/modules/druid.checkbox.html index 0d56299..e342bba 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.checkbox_group.html b/docs/modules/druid.checkbox_group.html index 1636a4b..2141614 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.grid.html b/docs/modules/druid.grid.html index 85fc6c0..6e08671 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.helper.html b/docs/modules/druid.helper.html index d4f4125..d51cedf 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.hover.html b/docs/modules/druid.hover.html index 39a0670..7f092f2 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.html b/docs/modules/druid.html index b7c0412..890513e 100644 --- a/docs/modules/druid.html +++ b/docs/modules/druid.html @@ -181,7 +181,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.input.html b/docs/modules/druid.input.html index 7847d31..eeed464 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.lang_text.html b/docs/modules/druid.lang_text.html index 79e417c..052acc8 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.progress.html b/docs/modules/druid.progress.html index 30ecee2..26fa713 100644 --- a/docs/modules/druid.progress.html +++ b/docs/modules/druid.progress.html @@ -378,7 +378,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.radio_group.html b/docs/modules/druid.radio_group.html index c0d19cf..0391222 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.scroll.html b/docs/modules/druid.scroll.html index 8bf1938..8d3c393 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.slider.html b/docs/modules/druid.slider.html index c2f9507..49068a6 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.text.html b/docs/modules/druid.text.html index 3e5a60a..b74e503 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid.timer.html b/docs/modules/druid.timer.html index 610f4d2..f76d4c3 100644 --- a/docs/modules/druid.timer.html +++ b/docs/modules/druid.timer.html @@ -307,7 +307,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid_event.html b/docs/modules/druid_event.html index dbcf349..7850ea7 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/modules/druid_instance.html b/docs/modules/druid_instance.html index 73f99bf..6d30ad0 100644 --- a/docs/modules/druid_instance.html +++ b/docs/modules/druid_instance.html @@ -750,7 +750,7 @@
        generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
        diff --git a/docs/topics/01-components.md.html b/docs/topics/01-components.md.html index 61c39ad..a0875e0 100644 --- a/docs/topics/01-components.md.html +++ b/docs/topics/01-components.md.html @@ -36,17 +36,17 @@
      • Text
      • Blocker
      • Back Handler
      • -
      • Locale
      • -
      • Timer
      • -
      • Progress
      • +
      • Lang text
      • Scroll
      • -
      • Grid
      • +
      • Progress
      • Slider
      • +
      • Input
      • Checkbox
      • Checkbox group
      • Radio group
      • +
      • Timer
      • +
      • Grid
      • Hover
      • -
      • Input
      @@ -90,8 +90,10 @@

      Druid components

      +

      Button

      +

      Basic Druid input component

      +

      Text

      +

      Basic Druid text component

        -
      • Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating -
      • -
      • Text pivot can be changed with text:set_pivot, and text will save their position inside their text size box: -
      • +
      • Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating
      +

      + +
        +
      • Text pivot can be changed with text:set_pivot, and text will save their position inside their text size box:
      • +
      + +

      + +

      Blocker

      +

      Druid component for block input

      It can be used for block input in special zone.

      -

      Example: -

      +

      Example:

      -

      Blue zone is button with close_window callback

      +

      + +

      Blue zone is button with close_window callback

      Yellow zone is blocker with window content

      @@ -149,33 +161,29 @@

      It works on Android back button and Backspace. Key triggers in input.binding should be setup

      -

      -

      Locale

      -

      Wrap on Druid text component to handle localization

      - -

      -

      Timer

      -

      Run timer on text node

      - -

      -

      Progress

      -

      Basic progress bar

      +

      +

      Lang text

      +

      Wrap on Text component to handle localization

      Scroll

      -

      Basic scroll component

      +

      Basic Druid scroll component

      -

      -

      Grid

      -

      Component for manage node positions

      +

      +

      Progress

      +

      Basic Druid progress bar component

      Slider

      -

      Basic slider component

      +

      Basic Druid slider component

      + +

      +

      Input

      +

      Basic Druid text input component (unimplemented)

      Checkbox

      -

      Basic checkbox component

      +

      Basic Druid checkbox component

      Checkbox group

      @@ -185,20 +193,24 @@

      Radio group

      Several checkboxes in one group with single choice

      +

      +

      Timer

      +

      Handle timer work on gui text node

      + +

      +

      Grid

      +

      Component for manage node positions

      +

      Hover

      -

      Trigger component for check node hover state

      - -

      -

      Input

      -

      Component to process user text input

      +

      System Druid component, handle hover node state

      generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs/topics/02-creating_custom_components.md.html b/docs/topics/02-creating_custom_components.md.html index 242991d..cd684e7 100644 --- a/docs/topics/02-creating_custom_components.md.html +++ b/docs/topics/02-creating_custom_components.md.html @@ -202,7 +202,7 @@ There is next interests in druid:
      generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs/topics/03-styles.md.html b/docs/topics/03-styles.md.html index b4eb753..f6bafcd 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs/topics/04-druid_assets.md.html b/docs/topics/04-druid_assets.md.html index f75ffee..cab9b23 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs/topics/05-examples.md.html b/docs/topics/05-examples.md.html index b62e37b..671c7ff 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-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs/topics/README.md.html b/docs/topics/README.md.html index 78e9d71..742f109 100644 --- a/docs/topics/README.md.html +++ b/docs/topics/README.md.html @@ -148,27 +148,27 @@

      Components

      -

      Druid provides next basic components: -- Button - Basic game button

      +

      Druid provides next basic components:

        -
      • Text - Wrap on text node with text size adjusting

      • -
      • Blocker - Block input in node zone

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

      • -
      • Lang text - Text component with handle localization system

      • -
      • Timer - Run timer on text node

      • -
      • Progress - Basic progress bar

      • -
      • Scroll - Basic scroll component

      • -
      • Grid - Component for manage node positions

      • -
      • Slider - Basic slider component

      • -
      • Checkbox - Basic checkbox component

      • +
      • 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

      • -
      • Hover - Trigger component for check node hover state

      • -
      • Input - Component to process user text input

      • +
      • 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

      -

      Full info see on components.md

      +

      Full info see on components.md

      @@ -242,10 +242,10 @@

      Documentation

      To learn Druid better, read next documentation: -- Druid components -- Create custom components -- Druid styles -- Druid asset store

      +- Druid components +- Create custom components +- Druid styles +- Druid asset store

      Full Druid documentation you can find here: https://insality.github.io/druid/

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

      generated by LDoc 1.4.6 -Last updated 2020-03-22 12:55:11 +Last updated 2020-03-22 15:19:02
      diff --git a/docs_md/01-components.md b/docs_md/01-components.md index a0da835..513261c 100644 --- a/docs_md/01-components.md +++ b/docs_md/01-components.md @@ -1,6 +1,8 @@ # Druid components + ## Button + Basic Druid input component - Button callback have next params: (self, params, button_instance) @@ -16,23 +18,31 @@ Basic Druid input component - 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` + ## Text + Basic Druid text component - Text component by default have auto adjust text sizing. Text never will be more, than text size, which you can setup in gui scene. It can be disabled on component creating + ![](../media/text_autosize.png) + - Text pivot can be changed with `text:set_pivot`, and text will save their position inside their text size box: + ![](../media/text_anchor.gif) + ## Blocker + Druid component for block input It can be used for block input in special zone. Example: + ![](../media/blocker_scheme.png) -Blue zone is **button** with close_window callback +Blue zone is **button** with close_window callback Yellow zone is blocker with window content @@ -43,26 +53,23 @@ Component to handle back button It works on Android back button and Backspace. Key triggers in `input.binding` should be setup -## Locale -Wrap on Druid text component to handle localization - -## Timer -Run timer on text node - -## Progress -Basic progress bar +## Lang text +Wrap on Text component to handle localization ## Scroll -Basic scroll component +Basic Druid scroll component -## Grid -Component for manage node positions +## Progress +Basic Druid progress bar component ## Slider -Basic slider component +Basic Druid slider component + +## Input +Basic Druid text input component (unimplemented) ## Checkbox -Basic checkbox component +Basic Druid checkbox component ## Checkbox group Several checkboxes in one group @@ -70,8 +77,11 @@ Several checkboxes in one group ## Radio group Several checkboxes in one group with single choice -## Hover -Trigger component for check node hover state +## Timer +Handle timer work on gui text node -## Input -Component to process user text input \ No newline at end of file +## Grid +Component for manage node positions + +## Hover +System Druid component, handle hover node state \ No newline at end of file

    ABUX*uKfL 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 E0Rm`aa{vGU literal 0 HcmV?d00001 From d650c2393b661fb57ba134374a6da447aa813d0c Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 22 Mar 2020 12:55:17 +0300 Subject: [PATCH 08/10] Update ldoc --- 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 | 55 +++++++++- .../02-creating_custom_components.md.html | 21 +++- 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 | 103 ++++++++++++++---- 27 files changed, 167 insertions(+), 60 deletions(-) diff --git a/docs/index.html b/docs/index.html index 0b8f119..7d3b373 100644 --- a/docs/index.html +++ b/docs/index.html @@ -185,7 +185,7 @@