From 4896f38e09eddb367f4ad21207111661d1bba1a1 Mon Sep 17 00:00:00 2001 From: Insality Date: Sat, 8 Jul 2023 09:59:35 +0300 Subject: [PATCH 1/8] Update readme and docs --- README.md | 209 ++++++++++++++------------- deployer_build_stats.csv | 1 + docs_md/advanced-setup.md | 27 +++- druid/annotations.lua | 85 +++++++---- druid/base/button.lua | 160 +++++++++++++++----- druid/component.lua | 14 +- druid/custom/rich_text/rich_text.lua | 31 +++- druid/extended/input.lua | 2 +- druid/system/druid_instance.lua | 2 +- media/emmy_lua_preview.png | Bin 0 -> 325246 bytes 10 files changed, 351 insertions(+), 180 deletions(-) create mode 100644 media/emmy_lua_preview.png diff --git a/README.md b/README.md index b11089e..c2fd370 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,7 @@ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/insality/druid/ci-workflow.yml?branch=master)](https://github.com/Insality/druid/actions) [![codecov](https://codecov.io/gh/Insality/druid/branch/master/graph/badge.svg)](https://codecov.io/gh/Insality/druid) -**Druid** - powerful Defold component UI library. Use basic and extended **Druid** components or make your own game-specific components to make amazing GUI in your games. - - -## Overview - +**Druid** - most powerful Defold component UI framework. Use basic and extended **Druid** components or make your own game-specific components with ease to make stunning and customizable GUI in your games. ## Setup @@ -26,89 +22,52 @@ You can use the **Druid** extension in your own project by adding this project a Here is a list of [all releases](https://github.com/Insality/druid/releases). ### Input Bindings -Druid uses `/builtins/input/all.input_binding` input bindins. For advanced setup see the Input Binding section in Advanced Setup. +**Druid** uses `/builtins/input/all.input_binding` input bindings. For custom input bindings see the Input Binding section in **_[Advanced Setup](docs_md/advanced-setup.md)_**. + +### Advanced Setup +In case you want to adjust **Druid** to your needs, you can use **_[Advanced Setup](docs_md/advanced-setup.md)_** section. ## Usage -Here only basic usage. -How to read this doc. -Annotations. -Example of advanced usage - different doc. -Example of custom components - different doc. +### Basic usage -## Components +To use **Druid**, first you should create a **Druid** instance to spawn components and add Druids main functions: *update*, *final*, *on_message* and *on_input*. -Here is full **Druid** components list: - -### Basic Components - -| Name | Description | Example |
Preview
| -|------|-------------|---------|---------| -| **[Button](https://insality.github.io/druid/modules/Button.html)** | Basic input component. Handles all types of interactions: click, long click, hold click, double click, etc | [Button Example](https://insality.github.io/druid/druid/?example=general_buttons) | | -| **[Text](https://insality.github.io/druid/modules/Text.html)** | Wrap on GUI text node, handle different text size adjusting, providing additional text API | [Text Example](https://insality.github.io/druid/druid/?example=texts_general) | | -| **[Scroll](https://insality.github.io/druid/modules/Scroll.html)** | Scroll component | [Scroll Example](https://insality.github.io/druid/druid/?example=general_scroll) | | -| **[Blocker](https://insality.github.io/druid/modules/Blocker.html)** | Block user input in node zone area | ❌ | | -| **[Back Handler](https://insality.github.io/druid/modules/BackHandler.html)** | Handle back button (Android back button, backspace key) | ❌ | | -| **[Static Grid](https://insality.github.io/druid/modules/StaticGrid.html)** | Component to manage node positions with equal sizes | [Static Gid Example](https://insality.github.io/druid/druid/?example=general_grid) | | -| **[Hover](https://insality.github.io/druid/modules/Hover.html)** | Handle hover node state on node | ❌ | | -| **[Swipe](https://insality.github.io/druid/modules/Swipe.html)** | Handle swipe gestures on node | [Swipe Example](https://insality.github.io/druid/druid/?example=general_swipe) | | -| **[Drag](https://insality.github.io/druid/modules/Drag.html)** | Handle drag input on node | [Drag Example](https://insality.github.io/druid/druid/?example=general_drag) | | - - -### Extended components -> Extended components before usage should be registered in **Druid** with `druid.register()` function. - -| Name | Description | Example |
Preview
| -|------|-------------|---------|---------| -| **[Checkbox](https://insality.github.io/druid/modules/Checkbox.html)** | Checkbox component | [Checkbox Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | -| **[Checkbox group](https://insality.github.io/druid/modules/CheckboxGroup.html)** | Several checkboxes in one group | [Checkbox group Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | -| **[Radio group](https://insality.github.io/druid/modules/RadioGroup.html)** | Several checkboxes in one group with a single choice | [Radio Group Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | -| **[Dynamic Grid](https://insality.github.io/druid/modules/DynamicGrid.html)** | Component to manage node positions with different sizes. Only in one row or column | [Dynamic Grid Example](https://insality.github.io/druid/druid/?example=general_grid) | | -| **[Data List](https://insality.github.io/druid/modules/DataList.html)** | Component to manage data for huge datasets in scroll | [Data List Example](https://insality.github.io/druid/druid/?example=general_data_list) | | -| **[Input](https://insality.github.io/druid/modules/Input.html)** | User text input component | [Input Example](https://insality.github.io/druid/druid/?example=general_input) | | -| **[Lang text](https://insality.github.io/druid/modules/LangText.html)** | Wrap on Text component to handle localization | ❌ | | -| **[Progress](https://insality.github.io/druid/modules/Progress.html)** | Progress bar component | [Progress Example](https://insality.github.io/druid/druid/?example=general_progress_bar) | | -| **[Slider](https://insality.github.io/druid/modules/Slider.html)** | Slider component | [Slider Example]() | | -| **[Timer](https://insality.github.io/druid/modules/Timer.html)** | Handle timers on GUI text node | ❌ | | -| **[Hotkey](https://insality.github.io/druid/modules/Hotkey.html)** | Handle keyboard hotkeys with key modificators | [Hotkey Example](https://insality.github.io/druid/druid/?example=general_hokey) | | -| **[Layout](https://insality.github.io/druid/modules/Layout.html)** | Handle node size depends on layout mode and screen aspect ratio | [Layout Example](https://insality.github.io/druid/druid/?example=general_layout) | | - -For a complete overview, see: **_[components.md](docs_md/01-components.md)_**. - - -## Basic usage - -To use **Druid**, first you should create a Druid instance to spawn components and add Druids main engine functions: *update*, *final*, *on_message* and *on_input*. - -All **Druid** components take node name string as arguments, don't do `gui.get_node()` before. +All **Druid** components take node name string as argument. In in some cases you don't have the node name you can pass the `gui.get_node()` instead. All **Druid** and component methods are called with `:` like `self.druid:new_button()`. ```lua local druid = require("druid.druid") -local function button_callback(self) - print("Button was clicked!") +-- All component callbacks pass "self" as first argument +-- This self is a context data passed in `druid.new(context)` +local function on_button_callback(self) + print("The button clicked!") end function init(self) self.druid = druid.new(self) - self.druid:new_button("button_node_name", button_callback) + self.button = self.druid:new_button("button_node_name", on_button_callback) end +-- Final is a required function for a correct Druid workflow function final(self) self.druid:final() end +-- The update used in progress bar, scroll and timer basic components function update(self, dt) self.druid:update(dt) end +-- The on_message used for specific Druid events, like language change or layout change function on_message(self, message_id, message, sender) self.druid:on_message(message_id, message, sender) end +-- The on_input used in almost all Druid components function on_input(self, action_id, action) return self.druid:on_input(action_id, action) end @@ -117,9 +76,89 @@ end For all **Druid** instance functions, [see here](https://insality.github.io/druid/modules/DruidInstance.html). + +### API Documentation + +**Druid** has a lot of components and functions. To make it easier to use, **Druid** has a full API documentation with examples and annotations. + +Start read the API documentation [here](hhttps://insality.github.io/druid/modules/Druid.html). + +### EmmyLua Annotations [optional] + +[EmmyLua](https://emmylua.github.io/annotation.html) - annotations for Lua. It's a great tool for Lua code autocompletion in editors like [VSCode](https://github.com/EmmyLua/VSCode-EmmyLua), [IntelliJ IDEA](https://github.com/EmmyLua/IntelliJ-EmmyLua). + +Since the dependencies can't be processed by external editors, for use generated EmmyLua annotations you should copy the _druid/annotations.lua_ to your project. + +For EmmyLua it will be enough. Remember you can _restart emmylua server_ for refresh the changes, if something goes wrong. + +After the annotations is processed, you should point the type of Druid in requires: +```lua +---@type druid +local druid = require("druid.druid") + +-- Now the autocomplete is working +``` + + + +### Advanced Usage + +If you looking for more advanced usage, see the [Advanced Usage](docs_md/advanced-usage.md) section. + + +### Create custom components + +If you want to create your own components, see the [Create Custom Components](docs_md/create-custom-components.md) section. + +The custom components is the most powerful feature of **Druid**. You can create your own components with ease and use it in your game. + + +## Druid Components + +Here is full **Druid** components list. + +### Basic Components + +> Basic components always included in the build and available for use. + +| Name | Description | Example |
Preview
| +|------|-------------|---------|---------| +| **[Button](https://insality.github.io/druid/modules/Button.html)** | Logic over GUI Node. Handle the user click interactions: click, long click, double click, etc. | [Button Example](https://insality.github.io/druid/druid/?example=general_buttons) | | +| **[Text](https://insality.github.io/druid/modules/Text.html)** | Logic over GUI Text. By default Text component fit the text inside text node size area with different adjust modes. | [Text Example](https://insality.github.io/druid/druid/?example=texts_general) | | +| **[Scroll](https://insality.github.io/druid/modules/Scroll.html)** | Logic over two GUI Nodes: input and content. Provides basic behaviour for scrollable content. | [Scroll Example](https://insality.github.io/druid/druid/?example=general_scroll) | | +| **[Blocker](https://insality.github.io/druid/modules/Blocker.html)** | Logic over GUI Node. Don't pass any user input below node area size. | ❌ | | +| **[Back Handler](https://insality.github.io/druid/modules/BackHandler.html)** | Call callback on user "Back" action. It's a Android back button or keyboard backspace key | ❌ | | +| **[Static Grid](https://insality.github.io/druid/modules/StaticGrid.html)** | Logic over GUI Node. Component to manage node positions with all equal node sizes. | [Static Gid Example](https://insality.github.io/druid/druid/?example=general_grid) | | +| **[Hover](https://insality.github.io/druid/modules/Hover.html)** | Logic over GUI Node. Handle hover action over node. For both: mobile touch and mouse cursor. | ❌ | | +| **[Swipe](https://insality.github.io/druid/modules/Swipe.html)** | Logic over GUI Node. Handle swipe gestures over node. | [Swipe Example](https://insality.github.io/druid/druid/?example=general_swipe) | | +| **[Drag](https://insality.github.io/druid/modules/Drag.html)** | Logic over GUI Node. Handle drag input actions. Can be useful to make on screen controlls. | [Drag Example](https://insality.github.io/druid/druid/?example=general_drag) | | + + +### Extended components + +> Extended components before usage should be registered in **Druid** with `druid.register()` function. + +| Name | Description | Example |
Preview
| +|------|-------------|---------|---------| +| **[Checkbox](https://insality.github.io/druid/modules/Checkbox.html)** | Switch node state on click event. | [Checkbox Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | +| **[Checkbox group](https://insality.github.io/druid/modules/CheckboxGroup.html)** | Group of checkbox components. | [Checkbox group Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | +| **[Radio group](https://insality.github.io/druid/modules/RadioGroup.html)** | Like checkbox group but with single choise only. | [Radio Group Example](https://insality.github.io/druid/druid/?example=general_checkboxes) | | +| **[Dynamic Grid](https://insality.github.io/druid/modules/DynamicGrid.html)** | Logic over GUI Node. Component to manage node positions with all different node sizes. Only one direction: horizontal or vertical. | [Dynamic Grid Example](https://insality.github.io/druid/druid/?example=general_grid) | | +| **[Data List](https://insality.github.io/druid/modules/DataList.html)** | Logic over Scroll and Grid components. Create only visible GUI nodes or components to make "infinity" scroll befaviour | [Data List Example](https://insality.github.io/druid/druid/?example=general_data_list) | | +| **[Input](https://insality.github.io/druid/modules/Input.html)** | Logic over GUI Node and GUI Text (or Text component). Provides basic user text input. | [Input Example](https://insality.github.io/druid/druid/?example=general_input) | | +| **[Lang text](https://insality.github.io/druid/modules/LangText.html)** | Logic over Text component to handle localization. Can be translated in real-time with `druid.on_language_change` | ❌ | | +| **[Progress](https://insality.github.io/druid/modules/Progress.html)** | Logic over GUI Node. Handle node size and scale to handle progress node size. | [Progress Example](https://insality.github.io/druid/druid/?example=general_progress_bar) | | +| **[Slider](https://insality.github.io/druid/modules/Slider.html)** | Logic over GUI Node. Handle draggable node with position restrictions. | [Slider Example]() | | +| **[Timer](https://insality.github.io/druid/modules/Timer.html)** | Logic over GUI Text. Handle basic timer functions. | ❌ | | +| **[Hotkey](https://insality.github.io/druid/modules/Hotkey.html)** | Allow to set callbacks for keyboard hotkeys with key modificators. | [Hotkey Example](https://insality.github.io/druid/druid/?example=general_hokey) | | +| **[Layout](https://insality.github.io/druid/modules/Layout.html)** | Logic over GUI Node. Handle node size depends on layout mode and screen aspect ratio. Contains helpers to build more complex UI layout. | [Layout Example](https://insality.github.io/druid/druid/?example=general_layout) | | + +For a complete overview, see: **_[components.md](docs_md/01-components.md)_**. + + ## Druid Events -Any **Druid** components as callbacks use [Druid Events](https://insality.github.io/druid/modules/DruidEvent.html). In component API ([button example](https://insality.github.io/druid/modules/Button.html#on_click)) pointed list of component events. You can manually subscribe to those events with the following API: +Any **Druid** components as callbacks use [Druid Events](https://insality.github.io/druid/modules/DruidEvent.html). In component API ([button example](https://insality.github.io/druid/modules/Button.html#on_click)) pointed list of component events. You can manually subscribe to these events with the following API: - **event:subscribe**(callback) @@ -129,57 +168,29 @@ Any **Druid** components as callbacks use [Druid Events](https://insality.github You can subscribe several callbacks to a single event. -## Druid Lifecycle - -Here is full Druid lifecycle setup for your ***.gui_script** file: -```lua -local druid = require("druid.druid") - -function init(self) - self.druid = druid.new(self) -end - -function final(self) - self.druid:final() -end - -function update(self, dt) - self.druid:update(dt) -end - -function on_input(self, action_id, action) - return self.druid:on_input(action_id, action) -end - -function on_message(self, message_id, message, sender) - self.druid:on_message(message_id, message, sender) -end -``` - -- *final* is a **required** function for a correct Druid lifecycle -- *on_input* is used in almost all Druid components -- *update* in used in progress bar, scroll and timer base components -- *on_message* is used for specific Druid events, like language change or layout change - -It is recommended to fully integrate all **Druid** lifecycles functions. - - ## Details -- 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 is needed if you have more than 1 acquire inputs (several Druid, other input system, etc) -- By default, Druid will automatically _acquire_input_focus_. So you don't need do it manually. But only if you have components which require _on_input_ -- If you want to delete a node which has a Druid component, don't forget to remove it via `druid:remove(component)` +- **Druid** input goes as stack. Last created button will be checked first. Create your input GUI component from back to front. +- Don't forget about `return` in `on_input`: `return self.druid:on_input()`. It is required if you have more than 1 acquire inputs (several Druid, other input system, etc) +- Druid automatically call _acquire_input_focus_ if you have input components. So you don't required to call it manually. +- If you want to delete a **Druid** component node, don't forget to remove it via `druid:remove(component)` [See full FAQ here](docs_md/FAQ.md) ## Examples -See the [**example folder**](https://github.com/Insality/druid/tree/develop/example) for examples of how to use **Druid** +### HTML5 Live Examples Try the [**HTML5 version**](https://insality.github.io/druid/druid/) of the **Druid** example app +Each example page has a link to the example code directly, so it will help you to faster understand how to use **Druid** + + +### Code examples + +See the [**example folder**](https://github.com/Insality/druid/tree/develop/example) for examples of how to use **Druid** + ## Documentation diff --git a/deployer_build_stats.csv b/deployer_build_stats.csv index 09bbddc..d42a7dd 100644 --- a/deployer_build_stats.csv +++ b/deployer_build_stats.csv @@ -9,3 +9,4 @@ date,sha,version,build_size,build_time,platform,mode,is_cache_using,commits_coun 2022-08-29T18:46:47Z,13003e472169cbd261e703eca7b133adf64a24f7,0.9.592,2316,40,js-web,release,true,592 2022-09-09T17:55:42Z,072507cc9e715541bdee7636d2e5eeeb3c22a57d,0.10.603,2340,43,js-web,release,true,603 2022-09-09T18:00:07Z,072507cc9e715541bdee7636d2e5eeeb3c22a57d,0.10.603,2340,5,js-web,release,true,603 +2023-07-05T20:19:22Z,d0062c2a78e618871ebb4c8ee66b1509b763f069,0.10.671,3292,12,x86_64-linux,headless,true,671 diff --git a/docs_md/advanced-setup.md b/docs_md/advanced-setup.md index 0704e26..1c1393b 100644 --- a/docs_md/advanced-setup.md +++ b/docs_md/advanced-setup.md @@ -1,5 +1,10 @@ +# Advanced Druid setup + + ## Input bindings +As default input bindings **Druid** uses the `/builtins/input/all.input_binding`. + **Druid** requires the following input bindings: - Mouse trigger - `Button 1` -> `touch` _For basic input components_ @@ -14,6 +19,7 @@ ![](media/input_binding_2.png) ![](media/input_binding_1.png) + ## Change key bindings [optional] If you have to use your own key bindings (and key name), you can change it in your *game.project* file. @@ -59,6 +65,8 @@ no_auto_template = 1 ## Stencil check [optional] When creating input components inside stencil nodes, **Druid** automatically setup `component:set_click_zone()` on _late_init_ component step to restrict input clicks outside this stencil zone. +For example: button inside scroll stencil nodes. + To disable this feature add next field in your _game.project_ file ``` [druid] @@ -66,7 +74,7 @@ no_stencil_check = 1 ``` -## Code [optional] +## Code bindings [optional] Adjust **Druid** settings, if needed: ```lua @@ -74,21 +82,30 @@ local druid = require("druid.druid") -- Used for button component and custom components -- Callback should play sound by name: function(sound_id) ... end -druid.set_sound_function(callback) +druid.set_sound_function(function(sound_id) + -- sound_system.play(sound_id) +end) -- Used for lang_text component -- Callback should return localized string by locale id: function(locale_id) ... end -druid.set_text_function(callback) +druid.set_text_function(function(locale_id) + -- return lang.get(locale_id) +end) -- Used for change default Druid style druid.set_default_style(your_style) -- Call this function on language changing in the game, -- to retranslate all lang_text components: -druid.on_language_change() +local function on_language_change() + druid.on_language_change() +end -- Call this function inside window.set_listener -- to catch game focus lost/gained callbacks: -- window.set_listener(function(self, event, data) druid.on_window_callback(event, data) end)) -druid.on_window_callback(event) +local function on_window_callback(self, event, data) + druid.on_window_callback(event) +end +window.set_listener(on_window_callback) ``` diff --git a/druid/annotations.lua b/druid/annotations.lua index e9fd95f..159a221 100644 --- a/druid/annotations.lua +++ b/druid/annotations.lua @@ -20,7 +20,7 @@ function druid.on_language_change() end function druid.on_window_callback(event) end --- Register a new external Druid component. ---- You can register your own components by creating them with the druid:new_{name} function. For example, if you want to register a component called "my_component", you can create it using druid:new_my_component(...). This can be useful if you have your own "basic" components that you don't want to re-create each time. +--- You can register your own components to make new alias: the druid:new_{name} function. For example, if you want to register a component called "my_component", you can create it using druid:new_my_component(...). This can be useful if you have your own "basic" components that you don't want to re-create each time. ---@param name string module name ---@param module table lua table with component function druid.register(name, module) end @@ -125,7 +125,7 @@ function druid__base_component.component:set_input_enabled(self, state) end function druid__base_component.component:set_input_priority(self, value, is_temporary) end --- Set current component nodes ---- Used if your component nodes was cloned with `gui.clone_tree` +--- Use if your component nodes was cloned with `gui.clone_tree` and you got the node tree. ---@param self druid.base_component @{BaseComponent} ---@param nodes table BaseComponent nodes table ---@return druid.base_component @{BaseComponent} @@ -162,31 +162,28 @@ function druid__blocker.set_enabled(self, state) end ---@class druid.button : druid.base_component ----@field anim_node node Animation node ----@field click_zone node Restriction zone ----@field hash node_id The hash of trigger node ----@field hover druid.hover Druid hover logic component ----@field node node Trigger node ----@field on_click druid.event On release button callback(self, params, button_instance) ----@field on_click_outside druid.event On click outside of button(self, params, button_instance) ----@field on_double_click druid.event On double tap button callback(self, params, button_instance, click_amount) ----@field on_hold_callback druid.event On button hold before long_click callback(self, params, button_instance, time) ----@field on_long_click druid.event On long tap button callback(self, params, button_instance, time) ----@field on_pressed druid.event On pressed button callback(self, params, button_instance) ----@field on_repeated_click druid.event On repeated action button callback(self, params, button_instance, click_amount) ----@field params any Params to click callbacks ----@field pos vector3 Initial pos of anim_node ----@field start_pos vector3 Initial pos of anim_node ----@field start_scale vector3 Initial scale of anim_node +---@field anim_node node Button animation node. +---@field click_zone node Additional button click area, defined by another GUI Node +---@field hash node_id The GUI node id from button node +---@field hover druid.hover @{Hover}: Button Hover component +---@field node node Button clickable node +---@field on_click druid.event @{DruidEvent}: Event on successful release action over button. +---@field on_click_outside druid.event @{DruidEvent}: Event calls if click event was outside of button. +---@field on_double_click druid.event @{DruidEvent}: Event on double tap action over button. +---@field on_hold_callback druid.event @{DruidEvent}: Event calls every frame before on_long_click event. +---@field on_long_click druid.event @{DruidEvent}: Event on long tap action over button. +---@field on_pressed druid.event @{DruidEvent}: Event triggered if button was pressed by user. +---@field on_repeated_click druid.event @{DruidEvent}: Event on repeated action over button. +---@field params any Custom args for any Button event. ---@field style druid.button.style Component style params. local druid__button = {} ---- Get key-code to trigger this button +--- Get current key name to trigger this button. ---@param self druid.button ----@return hash The action_id of the key +---@return hash The action_id of the input key function druid__button.get_key_trigger(self) end ---- Component init function +--- Button component constructor ---@param self druid.button @{Button} ---@param node node Gui node ---@param callback function Button callback @@ -194,9 +191,9 @@ function druid__button.get_key_trigger(self) end ---@param anim_node node Button anim node (node, if not provided) function druid__button.init(self, node, callback, params, anim_node) end ---- Return button enabled state +--- Get button enabled state. ---@param self druid.button @{Button} ----@return bool True, if button is enabled +---@return bool True, if button is enabled now, False overwise function druid__button.is_enabled(self) end --- Set function for additional check for button click availability @@ -206,29 +203,30 @@ function druid__button.is_enabled(self) end ---@return druid.button Current button instance function druid__button.set_check_function(self, check_function, failure_callback) end ---- Strict button click area. ---- Useful for no click events outside stencil node +--- Set additional button click area. +--- Useful to restrict click outside out stencil node or scrollable content. This functions calls automatically if you don't disable it in game.project: druid.no_stencil_check ---@param self druid.button @{Button} ---@param zone node Gui node ---@return druid.button Current button instance function druid__button.set_click_zone(self, zone) end ---- Set enabled button component state +--- Set button enabled state. +--- The style.on_set_enabled will be triggered. Disabled button is not clickable. ---@param self druid.button @{Button} ---@param state bool Enabled state ---@return druid.button Current button instance function druid__button.set_enabled(self, state) end ---- Set buttom click mode to call itself inside html5 callback in user interaction event It required to do protected stuff like copy/paste text, show html keyboard, etc The HTML5 button don't call any events except on_click +--- Set buttom click mode to call itself inside html5 callback in user interaction event It required to do protected stuff like copy/paste text, show html keyboard, etc The HTML5 button doesn't call any events except on_click event ---@protected ---@param self druid.button ---@param is_html_mode boolean If true - button will be called inside html5 callback ---@return druid.button Current button instance function druid__button.set_html5_user_interaction(self, is_html_mode) end ---- Set key-code to trigger this button +--- Set key name to trigger this button by keyboard. ---@param self druid.button @{Button} ----@param key hash The action_id of the key +---@param key hash The action_id of the input key ---@return druid.button Current button instance function druid__button.set_key_trigger(self, key) end @@ -647,7 +645,7 @@ function druid__input.get_text(self) end --- Component init function ---@param self druid.input @{Input} ----@param click_node node Button node to enabled input component +---@param click_node node Node to enabled input component ---@param text_node node|druid.text Text node what will be changed on user input. You can pass text component instead of text node name @{Text} ---@param keyboard_type number Gui keyboard type for input field function druid__input.init(self, click_node, text_node, keyboard_type) end @@ -942,6 +940,31 @@ function druid__rich_input.set_placeholder(self, placeholder_text) end ---@field component field The component druid instance local druid__rich_text = {} +--- Clear all created words. +function druid__rich_text.clean() end + +--- Get all current words. +---@return table Words +function druid__rich_text.get_words() end + +--- Rich Text component constructor +---@param self druid.rich_text @{RichText} +---@param template string The Rich Text template name +---@param nodes table The node table, if prefab was copied by gui.clone_tree() +function druid__rich_text.init(self, template, nodes) end + +--- Set text for Rich Text +---@param self druid.rich_text @{RichText} +---@param text string The text to set +---@return table words +---@return table line_metrics +function druid__rich_text.set_text(self, text) end + +--- Get all words, which has a passed tag +---@param tag string +---@return table Words +function druid__rich_text.tagged(tag) end + ---@class druid.scroll : druid.base_component ---@field available_pos vector4 Available position for content node: (min_x, max_y, max_x, min_y) @@ -1578,7 +1601,7 @@ function druid_instance.on_input(self, action_id, action) end ---@param sender hash Sender from on_message function druid_instance.on_message(self, message_id, message, sender) end ---- Remove component from Druid instance. +--- Remove created component from Druid instance. --- Component `on_remove` function will be invoked, if exist. ---@param self druid_instance ---@param component Component Component instance diff --git a/druid/base/button.lua b/druid/base/button.lua index c295480..d13bed5 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -1,56 +1,131 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to handle basic GUI button +--- Druid Component to handle the user click interactions: click, long click, double click, etc. +-- # Overview # +-- +-- The most generic and useful component you can use. Set any GUI node clickable and providing different callbacks. +-- +-- # Notes # +-- +-- • The click callback will not trigger if between pressed and released state cursor was outside of node zone +-- +-- • If button have double click event subscriber and it is triggered, usual callback will be not triggered +-- +-- • 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` +-- +-- @usage +-- local function on_button_click(self, args, button) +-- print("Button has clicked with params: " .. args) +-- print("Also the button component is passed in callback params") +-- end +-- +-- local custom_args = "Any variable to pass inside callback" +-- local button = self.druid:new_button("button_name", on_button_click, custom_args) +-- -- @module Button -- @within BaseComponent -- @alias druid.button ---- On release button callback(self, params, button_instance) + +--- @{DruidEvent}: Event on successful release action over button. +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_click:subscribe(function(self, custom_args, button_instance) +-- print("On button click!") +-- end) -- @tfield DruidEvent on_click @{DruidEvent} ---- On repeated action button callback(self, params, button_instance, click_amount) + +--- @{DruidEvent}: Event on repeated action over button. +-- +-- This callback will be triggered if user hold the button. The repeat rate pick from `input.repeat_interval` in game.project +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_repeated_click:subscribe(function(self, custom_args, button_instance, click_count) +-- print("On repeated Button click!") +-- end) -- @tfield DruidEvent on_repeated_click @{DruidEvent} ----On long tap button callback(self, params, button_instance, time) + +--- @{DruidEvent}: Event on long tap action over button. +-- +-- This callback will be triggered if user pressed the button and hold the some amount of time. +-- The amount of time picked from button style param: LONGTAP_TIME +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_long_click:subscribe(function(self, custom_args, button_instance, hold_time) +-- print("On long Button click!") +-- end) -- @tfield DruidEvent on_long_click @{DruidEvent} ----On double tap button callback(self, params, button_instance, click_amount) + +--- @{DruidEvent}: Event on double tap action over button. +-- +-- If secondary click was too fast after previous one, the double +-- click will be called instead usual click (if on_double_click subscriber exists) +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_double_click:subscribe(function(self, custom_args, button_instance, click_amount) +-- print("On double Button click!") +-- end) -- @tfield DruidEvent on_double_click @{DruidEvent} ----On button hold before long_click callback(self, params, button_instance, time) + +--- @{DruidEvent}: Event calls every frame before on_long_click event. +-- +-- If long_click subscriber exists, the on_hold_callback will be called before long_click trigger. +-- +-- Usecase: Animate button progress of long tap +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_double_click:subscribe(function(self, custom_args, button_instance, time) +-- print("On hold Button callback!") +-- end) -- @tfield DruidEvent on_hold_callback @{DruidEvent} ----On click outside of button(self, params, button_instance) + +--- @{DruidEvent}: Event calls if click event was outside of button. +-- +-- This event will be triggered for each button what was not clicked on user click action +-- +-- Usecase: Hide the popup when click outside +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_click_outside:subscribe(function(self, custom_args, button_instance) +-- print("On click Button outside!") +-- end) -- @tfield DruidEvent on_click_outside @{DruidEvent} ----On pressed button callback(self, params, button_instance) + +--- @{DruidEvent}: Event triggered if button was pressed by user. +-- @usage +-- -- Custom args passed in Button constructor +-- button.on_pressed:subscribe(function(self, custom_args, button_instance) +-- print("On Button pressed!") +-- end) -- @tfield DruidEvent on_pressed @{DruidEvent} ----Trigger node +--- Button clickable node -- @tfield node node ----The hash of trigger node +---The GUI node id from button node -- @tfield node_id hash ----Animation node +--- Button animation node. +-- In default case equals to clickable node. +-- +-- Usecase: You have the big clickable panel, but want to animate only one small icon on it. -- @tfield[opt=node] node anim_node ----Initial scale of anim_node --- @tfield vector3 start_scale - ----Initial pos of anim_node --- @tfield vector3 start_pos - ----Initial pos of anim_node --- @tfield vector3 pos - ----Params to click callbacks +---Custom args for any Button event. Setup in Button constructor -- @tfield any params ----Druid hover logic component +--- @{Hover}: Button Hover component -- @tfield Hover hover @{Hover} ----Restriction zone +--- Additional button click area, defined by another GUI Node -- @tfield[opt] node click_zone --- @@ -195,7 +270,7 @@ function Button.on_style_change(self, style) end ---- Component init function +--- Button component constructor -- @tparam Button self @{Button} -- @tparam node node Gui node -- @tparam function callback Button callback @@ -357,10 +432,15 @@ function Button.on_message_input(self, node_id, message) end ---- Set enabled button component state +--- Set button enabled state. +-- The style.on_set_enabled will be triggered. +-- Disabled button is not clickable. -- @tparam Button self @{Button} -- @tparam bool state Enabled state -- @treturn Button Current button instance +-- @usage +-- button:set_enabled(false) +-- button:set_enabled(true) function Button.set_enabled(self, state) self.disabled = not state self.hover:set_enabled(state) @@ -370,19 +450,25 @@ function Button.set_enabled(self, state) end ---- Return button enabled state +--- Get button enabled state. -- @tparam Button self @{Button} --- @treturn bool True, if button is enabled +-- @treturn bool True, if button is enabled now, False overwise +-- @usage +-- local is_enabled = button:is_enabled() function Button.is_enabled(self) return not self.disabled end ---- Strict button click area. Useful for --- no click events outside stencil node +--- Set additional button click area. +-- Useful to restrict click outside out stencil node or scrollable content. +-- +-- This functions calls automatically if you don't disable it in game.project: druid.no_stencil_check -- @tparam Button self @{Button} -- @tparam node zone Gui node -- @treturn Button Current button instance +-- @usage +-- button:set_click_zone("stencil_node") function Button.set_click_zone(self, zone) self.click_zone = self:get_node(zone) self.hover:set_click_zone(zone) @@ -391,10 +477,12 @@ function Button.set_click_zone(self, zone) end ---- Set key-code to trigger this button +--- Set key name to trigger this button by keyboard. -- @tparam Button self @{Button} --- @tparam hash key The action_id of the key +-- @tparam hash key The action_id of the input key -- @treturn Button Current button instance +-- @usage +-- button:set_key_trigger("key_space") function Button.set_key_trigger(self, key) self.key_trigger = hash(key) @@ -402,9 +490,11 @@ function Button.set_key_trigger(self, key) end ---- Get key-code to trigger this button +--- Get current key name to trigger this button. -- @tparam Button self --- @treturn hash The action_id of the key +-- @treturn hash The action_id of the input key +-- @usage +-- local key_hash = button:get_key_trigger() function Button.get_key_trigger(self) return self.key_trigger end @@ -423,10 +513,12 @@ end --- Set buttom click mode to call itself inside html5 callback in user interaction event -- It required to do protected stuff like copy/paste text, show html keyboard, etc --- The HTML5 button don't call any events except on_click +-- The HTML5 button doesn't call any events except on_click event -- @tparam Button self -- @tparam[opt] boolean is_html_mode If true - button will be called inside html5 callback -- @treturn Button Current button instance +-- @usage +-- button:set_html5_user_interaction(true) function Button.set_html5_user_interaction(self, is_html_mode) self._is_html5_mode = is_html_mode and html5 return self diff --git a/druid/component.lua b/druid/component.lua index 2e1e1b6..fb29b40 100644 --- a/druid/component.lua +++ b/druid/component.lua @@ -64,7 +64,7 @@ BaseComponent.SPECIFIC_UI_MESSAGES = { local uid = 0 -function BaseComponent.static.get_uid() +function BaseComponent.create_uid() uid = uid + 1 return uid end @@ -128,7 +128,7 @@ end --- Set current component nodes -- --- Used if your component nodes was cloned with `gui.clone_tree` +-- Use if your component nodes was cloned with `gui.clone_tree` and you got the node tree. -- @function component:set_nodes -- @tparam BaseComponent self @{BaseComponent} -- @tparam table nodes BaseComponent nodes table @@ -226,7 +226,7 @@ end -- @tparam BaseComponent self @{BaseComponent} -- @treturn string The component name function BaseComponent.get_name(self) - return self._component.name .. self:get_uid() + return self._component.name .. BaseComponent.create_uid() end @@ -362,7 +362,7 @@ end --- Basic constructor of component. It will call automaticaly --- by `BaseComponent.static.create` +-- by `BaseComponent.create` -- @function component:initialize -- @tparam BaseComponent self @{BaseComponent} -- @tparam string name BaseComponent name @@ -375,7 +375,7 @@ function BaseComponent.initialize(self, name, input_priority) default_input_priority = input_priority or const.PRIORITY_INPUT, is_debug = false, _is_input_priority_changed = true, -- Default true for sort once time after GUI init - _uid = BaseComponent.get_uid() + _uid = BaseComponent.create_uid() } end @@ -512,11 +512,11 @@ end --- Create new component. It will inheritance from basic Druid component. --- @function BaseComponent.static.create +-- @function BaseComponent.create -- @tparam string name BaseComponent name -- @tparam[opt=DEFAULT] number input_priority The input priority. The bigger number processed first -- @local -function BaseComponent.static.create(name, input_priority) +function BaseComponent.create(name, input_priority) -- Yea, inheritance here local new_class = class(name, BaseComponent) diff --git a/druid/custom/rich_text/rich_text.lua b/druid/custom/rich_text/rich_text.lua index 88bedea..b84191f 100644 --- a/druid/custom/rich_text/rich_text.lua +++ b/druid/custom/rich_text/rich_text.lua @@ -1,6 +1,18 @@ -- Copyright (c) 2022 Maksim Tuprikov . This code is licensed under MIT license --- Druid Rich Text custom component. +-- # Overview # +-- +-- +-- +-- # Notes # +-- +-- @usage +-- local RichText = require("druid.custom.rich_text.rich_text") +-- ... +-- self.rich_text = self.druid:new(RichText, "rich_text") +-- self.rich_text:set_text("Hello, Druid Rich Text!") +-- -- @module RichText -- @within BaseComponent -- @alias druid.rich_text @@ -21,7 +33,11 @@ local SCHEME = { } -function RichText:init(template, nodes) +--- Rich Text component constructor +-- @tparam RichText self @{RichText} +-- @tparam string template The Rich Text template name +-- @tparam table nodes The node table, if prefab was copied by gui.clone_tree() +function RichText.init(self, template, nodes) self:set_template(template) self:set_nodes(nodes) @@ -38,7 +54,12 @@ function RichText:init(template, nodes) end -function RichText:set_text(text) +--- Set text for Rich Text +-- @tparam RichText self @{RichText} +-- @tparam string text The text to set +-- @treturn table words +-- @treturn table line_metrics +function RichText.set_text(self, text) self:clean() local words, settings, line_metrics = rich_text.create(text, self._settings) @@ -56,6 +77,9 @@ function RichText:on_remove() end +--- Get all words, which has a passed tag +-- @tparam string tag +-- @treturn table Words function RichText:tagged(tag) if not self._words then return @@ -65,6 +89,8 @@ function RichText:tagged(tag) end +--- Get all current words. +-- @treturn table Words function RichText:get_words() return self._words end @@ -99,6 +125,7 @@ function RichText:_create_settings() end +--- Clear all created words. function RichText:clean() if self._words then rich_text.remove(self._words) diff --git a/druid/extended/input.lua b/druid/extended/input.lua index 2178d46..da1b220 100755 --- a/druid/extended/input.lua +++ b/druid/extended/input.lua @@ -115,7 +115,7 @@ end --- Component init function -- @tparam Input self @{Input} --- @tparam node click_node Button node to enabled input component +-- @tparam node click_node Node to enabled input component -- @tparam node|Text text_node Text node what will be changed on user input. You can pass text component instead of text node name @{Text} -- @tparam[opt] number keyboard_type Gui keyboard type for input field function Input.init(self, click_node, text_node, keyboard_type) diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index ece0568..7f1a45b 100755 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -288,7 +288,7 @@ function DruidInstance.final(self) end ---- Remove component from Druid instance. +--- Remove created component from Druid instance. -- -- Component `on_remove` function will be invoked, if exist. -- @tparam DruidInstance self diff --git a/media/emmy_lua_preview.png b/media/emmy_lua_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..eb138a465792c5a0fd451682a13e657eae5537d1 GIT binary patch literal 325246 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

D>>g^{xeO=kegDDj*y_j-RiA zgUVsO80-c)sf6u7B6ZsWC#;?&JSNI%(ZO;al4g_0k1ca$2(WPvc|5?@@_Exn0*y(_ zY5{HN4rg0!5`i|yPaOs1Pc4Vp$K(`)Yl1qEEta*B zl1#!B?(=RYdo4xi0h^|K-Eg*Io6ED=tvUBgt@@*vC;O>@HSt0*Zgv$pQHC6RZ^x9$ z8t`x|EBtKJvXDK*!NSG6nKm}Zp^*GurSA;&`=Ogt6%4IQnD!e_DJ8OEa#%KEz}`Nl~Ew+|B|OUQLIpH`NI7Fji z%T&(J>HR(Hv+;MF%FuySdBw_;{3nel2|OK14IV}yw{G^$@ghOiSS)4^Xg(4C7jr0zvEa8!W-#mP{=J%=Nvqnl5 z=Lj$zcR*n9;Cpnp)M7+}fYt2L!bd>223x^H=VB3nHiW9n?884b8mg1$Yvg3o%VO*kk3Mvwb%(n4=2{EQjl!oH zMC<=$0{PbQfZS6Zq%ZC|>2^agDLf$;Iun}Z_m6p3#*9dvI_D@@ZZSh3hNF2E#{M%A zcbz@p0}TT?Ou>9nN8+o60C52+rlyiPN0TeaZ@u3FZRF*qPK;M=e;GfV{`r$44p^yTc^mTUu~Xo)Rl7KGTtR-rfPj-N!g~gu~*F4U58-U=T z3bXvJ_aczClqNRZzRti4RRd$E!CpZ9u4cQTz$XT1i?(|dbj2j7K3M?dgZ=%WYus*n zr>VeAkIB7SwkuSyGy%vD=Rtxiz;8x3p9gTbZr!%#xNh?RczDVGw=UNRVJQH8Nk@pd zfb`G5^I??(kT+9yT=2;3|9Ax}251YJD6GZ1Y73qQARTnQ=Qn$G^E8hOByz+2!fwX7 z3qYhnxFa`xZk|F#fzY8-d==W&*jQ`u*=Cz+Nv$IWCmFdO zUO{ep2de}7rfAx?H+zK&pA`V{-Visv0$i^M@YXFjZ=$v@-L$CyiCl);e-7;N|2mP2 z@;9(5ogRjw=2jEk$lnc1hkspPUTe_-v@XC+NkZYoE6+$IH5zXS?1jZN3Q_6A-7QLfeIee?QtTL@g> z#+-L*Tu<8pRA@YA!^e7OYdxDVBg9Pxu5}8s355VkjlhTxMy)a z;eSt9UjR|y;h}jW!CnL0dQA2|`@tFf{}+INET6~!rv#wIx7*w#?wUZH!Eov^yHRlW z`Aj{?*`O0f4m4E*f(({8JTzd;o4mgvQ%Ge%S#bcdI~8 z0J{nCtj>Ubi5QcLBZ<`Qep1R+A1OayH!bYY!}+A}pAG=A17kM6OT+tfNCZz1Ag_=y z9)IFDa>nVkufpmj=B<@&J+O>l#i!FaS2wnYp&eGcNA`rOL19w1gvqx211Z8wVL?2_ zLCr?}a_f&1|EYEZDFBC@Je|r3^Up~@0zexgv_1H~0Fyx^JpF9F7#iI1WU{gzF`Gj zPH+A~cqR=UmEOciL6`D&*)ZSs zay$Qd5wS3l92O{9`g0xfDzwPR&uYb86GK#62ZSo!A@6m99&)(Pnx`J&sfzcg%xqpH zHAqFW>^0c-wUmWWit-pcT|U#$A8WQ-&kDf z^R2RbY1l_jR}=VhWpGm0crYXEc1z*csg=H@u$eg3D!T-9J4N11N3DZbqw#krToS(@ z?#C!n>CGM5$tc4VlNxoV)JaWy&lDOUmeg|d_l9J!#dS}P7YDqH-B);v%??qDoknCW zIO_>bx|GX0YNN`;eO``f2g@=ly_T#O0f2+g&$lbES64?^7!&8N# zH==~Y$1b%T3#T2`?{!W&^%0B9XXZjQ??@bR7ouQp&(bQ2&XBiZ2utg$*9ssSpZ_2% zzbKHVS@OrOXmieo`S29-R7AR8o(R`F?U6#){AUl5lQU(BBT`Z9#kU30&&y$b#S<@G z%oqrNInjjY3G-=yW@;*i_5le z#n(dm9V}2ep+ko0@@<(3iUT|>R!RHQ(ubT6wtV_}ZA+dS^~Q5-4Uh`@b#|+jxSCwo z2zkP7wdd^ze`*1Q+x&Q_B3SEO!GVKQCHiG)ebEy{0a+_D#GDkmr_8oFRY~C8l06$< zA+)YT3oUXKd-Krv<4+P7^LX9QzGq6qf$DF-IiL#Hh`@j})@64I&ZL-1( zM@ChS5BBhTR=e;1!@kfxM}|T9F9h@J?X6~2_bM}0dQXMiV$N!73JE=tlfh)ABZ!4H z=IibKt3UypZ660ASm2;9iHf7<0SnnazXPwvw%2kM+T?i_cCvfTN_;>PuM2(ahyM6u zf62_uOitxRAPZ1Dg*0l|{cP^6g}#CuoDk;j%B!;Mj)#Z9*|tAK=mTzJL7i(jx9qSG znQ->rlcsSGx19UP{cYrc-#r=!4`iy5KUo@*DjEdt*}XD}_~C-+0Y%S^NV$1J5(T~D zUp+kV*FV|795;S_&~Yy^kCu&RN2foF{E1y!Y6Wx6=^bi7`nrgTD#$>}{5Owb3>6ZI zWco|3ZB&)y(sl%+%DfPhzBxw6NW#GYlKx>Lx^?YM!_)=Ep=pGzp~kIwBH`7{yA6J4 zcalrmc&Im`TvtY6fnP>m|MJ#8Fnh78gvyL+H~Ef-<@5IL;O!bh4XmxR+d; z=U+{+oDFW7tKU+|o=wReHkq2)-WYDsbsqk}*g2Z5nI?uEbJRg)4~vg6fyF+Rj#qTO z3I|}p{e}{A zQBZQ}LN#(6JEQtywMKS05KQco1Q6o8WTUrS!~M3@73$v*E5{bceQ~-!rnlDZFar*G z;Im%+#R21Z7E)L^xB65=<#Ks@3VjG)OFQ0D6l0?vIiA4Q*`E!S`>Tz&)DvfKSgDb_ z^VE@}oGC}GgXumP|IlPKi{KmK7tXxVuf&X)b#QM@wz=Dj91 z)brgXPW_eECB_1i{^TG)4tEg4Sp365r9v&f+qiXLf_?8<^tbG*p1Bs=rehH!=9au` z^$#tvPKKHrcUKs~Qe_<7>{s_<7HiUKx#umLixkWByCMe*Wl3sW7Td9nXIM>~^;Wo& zuIPROcfHvM@BL}Gd+-G#d13p|Cvj@qHfLI9+a8z?et}rJ96?){7Edu#zdz&dKMEvO zsJG{wlboMP+I=g^39(o61S!{k$aO9uc%^M z8J(crMle-i4~I%d3=QY=wQ+U?H_q77h5s}k5Ihm!RG-MWY;g7Bsm_q0TYeJPA-b$)emzGtX$p7^sttd({`df8ECmXTbT#kKbIIEg}W zG~U7{%x{j&rJ^8Y6tkYRg+?eqX4pzbu=+KgC0359cHo-)kmV3q`l}3nUW>y_uh?Ay zLOWN9=flv~a|0E9Ta9SE_aX|Ov+W=CZ?Bzvg~D>6+(hO=t8IuHF~)%v!kmSi`PFsw zlm$jcL4A+sWJl@Fz#>H4a^+@f$3N;|n^izIUSc6b`h0W&^xqEu@A?_^h<~*(so@!o zTQt@}2aw>l+`3F(q*t2ME&=rAvEfACqp?%YuWoC!IAp}7nYHA%?b231lA}m@9OiRp z@~0xF{42*<6u`VNZ@u0`Ds`jv!gGI)WpshQcrYpSAa9`}=DU7Q$3aj)*@|mZ13+@z zEQ?g`#t;gH&0EHa}9ihVY zag0q>QU%6?%~FM~y)%Z0|2YX>)syw_p(n|A zAuLelJhY6!Vp7AI4VU(vrc=F{ltSUYjnZ6T>u9yK)nCUQu%Vj@K=C!WEwM~QGkMf| zEJqX~2)oL(bc$ALhmO}heUOr!?nQ)XoVdR!9CLUw)=)Ha2qTBIc5ic@2J#%J&dn7` zn#N?iLO;iL0$D+l#Tv$-liY_}uX;u?#RDQS$8`y;HYO7;J{{J%p_D%1u9SSrHNvG{ z21Ilxf5A!&#C`8S-sG<4-TgqTLu`XSW`z0e>aqfbI$%)`=xN?KLpM*s;qXk}sKqI7 z_UJs%sY#s5#k0BkJ+TxWCe_B!!FS)3TxKFi8YYab(Ew#=`p{KhB+G3vkUjq30%!1S z7Q1{_r$HvtDG5Vnziz(z8=;R0H~KS{tbICF)-_r?OUG&A*>Z~zDVKbIjdY{q$-(l| zM>P$nbG%D?_?%UM-dBhyWaM9eRuebPznT%TCq;7J=M?^mw{GK0D<0T|&femvDUZ@w zwUpJH$fw>iqm|AuqkZJ%T1nsH!9Z&2Oc2q3=Mxov`@>35{bna`o={W%DNh&(S?NuP zz&vFQRcs5QIO(Yl)TA&T(*J5|VbC5g4dhL!hIF9MHO4M1M1|Jd#n2b6@t(bz8kG+K zS2ISpu%T-0ZgCd>ii_r-qJ!{8aS5kRgAvS zMKIp37JBe4*L_^;fGE{8>uE7u>a6ZJslP=tgaG-5O>5)JMIqSN!2MzDr1}<4mg0h~ zY*SZf$*c$Itzof#T!i~fet=s~uz{GR zxjW1>LmSc~)iBl0ok>{jmRYdyxEo%fc9KNGJ=Ceyr36*3lu|C?S@qjC=XEO2e=@mO zSd+x6<-7*AE~+UsP22`-A-Gv5U_JHiG3)AxchURw?K=hwv-s{|_hX7D1;HmuqRCG) z7TYzNr}s2mK2`^A&B*P~%+ml0Tf2C<+cNi%-j4QgVpxU0+e#D z6Q=8ON*q}3F6@ml_-iyXg=lYk^LQR7T$VAln7C(7Zp*!(YYVw?eG9%6+Z;p^(@>M~EbK}>Tl z0+Z3%IxL`rhg!M&T_Fy_E<8}DnSy^Ur+us4vtyeS#qQoy+u&&y+XA>dJ@fKswgKFw z?h7R^RBAYMtIF#=*k-Php>#L30k701fyv4a?SjM@nTnO?Ml=j!u&XblL#i)2Bc#ES z2^%DPgv}N@4X+Gp4;o%&PL3FR*eupHvl32$Q%@48)z(Zj3=hYt^v^?~XWSyCx90E^ zLg^tQoOGLw355EWz3!p&_TsY!fUlH(v~;ipLu`1`XVYe|V9#x>F zIL}xKuXzQu8a6y&9x~G@`In&dPZ}%<;I7W|T_DBv!ea9kwQ^24WU&A?$6z{IfS%d5 zqV{jB4^<5?c!ReHh;J@uUK z+*o$C!hFqu&=-+X-6gw%T*XpA9(;PJX``UhttLy!5J}TJ!ynP=38=eP0x`4D>96mF zk_iLqQNcMB_WSw%Pjiq7fy$7Ru?Hcw$p0CDAgq^w^-DU0$Ax+Yxv>~LJb)0yF89qq zsJ?(>^a9uT%DnnrF@cPLf%sF?NUzLjkTN_qy1u=#bd?&t(O;hZIDmIv$Mf^!)exRm zKmrZDO?x5cFTGJ80_nCNy-U~GHBUWwx=qB);x8#h5LN?#<(bIv4c;GgfHiR=H~Gzv zyQY#N73lr)tqsjJ-d=#5B(Jn_`b#bp^aN;YDjIV%xbD3VgjNL$WgW?`AlDqk_vZ?D zet`#j144bT$i7(;K&6ucjPrl1y99EZoY#o{hW!7Ba+~D2D?qGGNJ7PI5thCz^9bZp zo_FX%U+)drbHVoxEJIy|8N!}8F@yk-(g{iXixR1aZcO0%F2TdIjl%lpYQ+W-HsdUr(!TLpp&wONxCBzr4)m>SuJykVs62s>`Nrhos9d(!|3SYhsviT+Kmv zKxG###06F^o%gCrVHN_dCM6tZlU8w!8T zM7QZJe5!KmYq9(Kx}y^?jX6U}6-OV9U~EorT>ofNWk96q2%JI`teM z$7kKBpD-!&kagJ|qhb(wf}Qabf=scq38@U$^sJ0NI%rBr`` z{=^93Haz1wG3U+a-47TI&r}@1Kr7g2x*h*A;zOcVm2QIqqpN|sIy!slVqXR7|_MSi0x-BG-Bn`?@W{h{L^B~cHR zthrfp9>a_IP!0`?8u!84rpB4LX`AXI-E)QGtuE|=Kqm*2u^h@761Q;|F>OL_b>Obn zqpep8+g!7$e#1ab@a{^Vo>;*H|AbguQA$xAVpQwV_!_U9+*5bA9l_UV-=b#51H~rlDSkOLH4z{$SVBt%`vHn%DKBaMH3KZgC8Yy0&>{PNhk(=i95E`Yb?Ii4Wa%|XO zendPBZOmtzqm9zE{oGeNkAMn^ssF)2^NS8P^cdNTw-5E~3 z;H&fQPO^?v3>i=#S+ce29Pf>cfs0;n76DwP|G#*9%c!`vZEJLgSOLKjB)A0#5Fo)_ z3U_x4A-KCk2!*?Q5!~H9NN{&|C%F5!YM+yRa_`A)?frT`(i*8+6syLZb4VY3^wq;a z9ybP*{kYp^U*&0l4H8MKSwCZTfP%ElUB6@n>jCQ(9Vss`@J(jMYV90E8M5BEa4whm zB)Q$3mbS!Lkm4+vO_j7bZ`Hzht0lKx(r0&cEH#Kr2 z2Awu;e1qRFYCh^v@v7z{w=|!tDLv5paE==vHm*)ft*zB@3187@=UR z`6rUM6>Q12M*!Cw=o2EvX7#z*RJER0DutD*79r|AsX(t-44&*GK2tu!MqFqZmE^v4 zLKpz8bPWW1bg?ny<;&#uM6lg>w9Go_5<~}6yIbydQ~_(sXe?m(yt)=>^;`vk=6^y* zgYosFOf*KZY%2)VAN3)9>#ZyeK-AoOisf$jJ&V*W5QCZ=;9pxw2RmJ8V)N*H ztv@i;n9m7+;eM`aFd0H}XL4rD=6+j)POG635a&_BQ+WyNcb!Iulg^t|qBM|#t1q$9 z@;vvZPD&v7^2Dtgp3+U(qvj(xX{OXTb&lP!tlcZN-mqr6#r zn)ECWh(xw|KQ3?QAQ|k&Gn8uD&AYyRh6-k#S54atb2F6J+LuGa+1l>+wHXYgcFAdH z6+DP>;i=Azz?n?*KxX=u1*->OLFISS)o--|Om*W~_O6<(ld72Z^ceH`K?+YViv<^6 z`Z9^0iAZL?MWpJ1uw?X3VHk}vU+vxW!Cd$^k2`i%_XI|T0gh3T1k}{w!pD6Tm9oT{ zQt}){i%j-2nid>Qv;Ih6pzAVTRj*)y#uQ+6m1Jcl<+bZlxSy?ns`l>&(>|%&(RwWX zhy=<`lrMp+4Eus}e!0oxen<#tJdiPNWcza?aUwva{^sEUOe}fKQCfPjk&L-bA>v-U zUqjVa5W&Ln4h}-sM&IpXe` zWNZ?E1zjp>Y{`0lcVXt2^PG{Waae+DSKXFs1=wa&Z60@Lv78^9P?|D5;gcPCQw`E7(arA35jj4y|L$=#>d)2*((hH$x)&b+@FYj8g7g6PB+vo~ zK=^p8#Qa>|1ois1M8|$!&~7;VE6bd%{0kC`u(&w1)EOC%a(zSagvJYRA_cDsBW<_! zkS<(9AuxMOs@Do`oVPgYbt63Qb0;DDof{3cqND}`p|8fn!{L&NEY-6Mgpqv;?cV)S z?P{NJnRW^ZC+&&&3^n$4*ffi6mPVy#jeU{vBdR6^Q>tbFjM1S+vfe&zl-ecmSsVM) zikMLD`zfUDWOf{a!RvhvmW)%Z8g{!g`Nc^Wl;k4SY%_bY3t@sIj$n&&{eFST8DORh zeMpJ}Xj$?)0^8fip!sO*zq2>q_P@8jNu%c~lqO%V2k{}8S)vQSuAzc=#GubKf2VTB zrx`{y_?vSPpN z<%K5ZJ2Q!DLQb`#mjwQH!RW-!X#+eBdxU~;l<_d7 zlSTb%hzeaYmrYi3nKCuwhn6jX7yqfS7aka%l?H&0!=EfroZk!1e{D5CfWkPmWNQYX zp&9n|!gC$AJ2OZgu5^h?{gGz+g+ubdzbUa9TkMS8F2T~|kh9BukB6v1?Vu*56pQsJ zWUyNbMeTVr(1FpUK0cy=h6x5@b=FiCwXp8Do+befmqI$81ZRUh0|G|fNj@K2ybc*~ zX|Tw;rctgcm`Cy@QsA%8$7Qi6;F-y0u^hGgVArE&;nWT}!Dqj%#w>zrH+=TLz3rtt z9+l?t4{4GxJo1V5PsUL`NL_3r(7)EiugvAEU~nrqxMN}*I~;;_0Aa(*heN3gqxLsV zw3=(cAYH}m^(OBFr(S~Y)X6gmGvB$`Zs3^Ia%#%=JAry_Ia2Cv@Jis^t_NqA!tD8kDDJ(K+yKa-g z#=U}o5oM4!(HIBG`zl$l>z{Oq7kR+Eh+D8F2z(bDW_$fHOLdjrW+Mk}0^mLPGe_r7 z3~zsIe(zaTV7P01Qf$uRrY&owS(nKh7|#&KV3O>zM@kry^AR? zC7h_#1b}&bm!|_j{851&LcQvvp+6kLHP|66wg7T&17UA1tpoDzD5mU19~gxv1^L77 zZTzsQ6s1~I71BGq2LK8^KFNqnuS=?17zBF7JwPAI3FXI>R3Rz2kuRqx|Me`W*-1Z7 z24*E)^~b}^YbT`WUu86PtzYPOT(z@o+~s!?iLSPw!NQ-j%Ybq+V^Fe9LN~YS5-k0soiuI&-Wptbl?Qto%A9q_L7rHl@D2I?5`|RVhv5TD3ru#sGv7d**UFLiy#4+=?kH81G-mLcV5p?#Oim8t7n^d$fXnBJVnH;@Re6b-Kp$~ zrjB*}I3eEep%bO6v0SR<@PRMqBB5r2-OQ*7_m0+;B?6c-J>#-VmZkxw!6Ni&)TZ_z z_giLQN2J@z0<}sp0@urBh!&1XBULoD`1VNV{K>TjL!WIYI^dPuU|#8f6#56jKoLd2 zD|L^~1FiqJ00qF@!rpO_`O5KQz9CDK*;2K>+i=dX8}+6eNwb7I_smt`JS_6TBB0CF zzo-{E1|o(o0GlhB-98HFNCw*1v-EYfNmG!!OO6=^x0j#na~y~Og_T+1RF)V1)p4&} zy0e`+1+e(QjPZ<&q{U11t}7tFkZacBy1^?QFQssEe`70P2*@|Brys4(=Q9P3%S@;P zm5sq2klySiH?=5&M}Ut*Nari9Md?5i%zB_=2~`m(UfJ1~guUqiG{aBxy|pC?7?_ zAYDEi-2cX5{_=#tT19=7O=_{@jePdEn8gpo3K7~5U7z_t&x6Q zP2|KytD@63d1z4k=NkZd3{mQw?p7?xP%v|@zGbxXgC`hZ_XQ@>t;T6a4r6k7H`~MS z=&)Vuk3X6JkcWs<|?EqP+K?q9%{KlV?~$Z(QIk)YF~n56L~1l{h8w%e{WX(5XejmKO}FwX zef7eO_o&`zKrKL2ea4`6`m$TQ;A>R=u-Gv=t?q8ag@75G&2@(Q;-b)XQ2aV{nMZua zR+c!}Cl!{#$akX5?$k3Eg*C^vbFY7{d6s%@t?hQ?4al^0Hf;h4(wc60)<#68xY<&= zPS7h2BiKB1<=&v=(yByx-r&)2Ct)x7tDi@T|*uQEuK$>E+eSurjE zw*XK)JGl0^FP$9-1xDDXWOM2cl0PY4*!3$Qr47V~U2dH3%`*|4CB*=rZg;Aa zuQV*oA4?-IWUG*h>Gp8ZXUJteja5!kN4vHo0}iqe z$KMO4%K<6Gr)7YcQLaXAgxzo@?_D9O+T@cAI?jj1xAteyPc!N|t@H9(DYkpl#^ZU@ zXj9IinHz)40MagSa=7mZ%moL5?A}}o5LLin(RvR@_WwSPMB}i2NOo^B5o6N?jH()` zU8C6k1gVM41xjK)pMEeqGztvF-T_Ty=VYnieEGF&SZ6_Gz>!b^X1nr^S5-e7kCE7OZF<)rB_mZg|R$*p59nFP|lNY7k zUF^qwh#;55X&%Q+M6K}MMzI)f8shfPF93#IY3twrumNy~>lc#=m3(#q>YIZCri1Hr zpz*rUIN3s+pPl+kW^_RQ#j#heg*C~Zw_ral^p|H8z^9kI;$DLP@7nLt6HdUj69oOm zY*Oj2LR;(+`ME!S(Sn*Cf3Js-Cw#HlU2~v=DPZ&oW#tU#JH^C#6L9W>5P~xW)YHsAEo(@$6!kg9y0!lcgimPt*p@Tk^w z;->85OwMb&6?RJ-U*zNF{rPl7r?az3J!`ztPeS>4OCeI8H$Jr~Ap)l{0FiFW$e77* z%VL{*>%@g#dy;19UdZJ!3E8%pb02Ev%QmKjL^Pd(liUpB(buB3M++4dCl4F#42BrW7o0v%+_zhvws0W-^S8qj?OX9HD3y(PuZdbVz>U%si zG95NfR2P+Nf8%|$ZJq@gN6TCo?r?Tb#U8#EDAoel@h3Y%!5J1Q+!28A2=M2(9QdExP&hCSe-cszgIjbUff0a9@B zm2jiairC?KH)70jJaKjmFPYeMwmq^J?OQL_;6G1?Hvuu6_5b`77$co;lvj+nB zoYQ*OJ-+ovfXnYNTUYZ~h9@)}0Cp%<^2*jI6@)_Y7j!2G=S^o+b+anDRpZN5Bcm$iWIrRXWOn_n81`- zhn-y8QIN=P0gb1+8q3Y7QS7SDm8aN!JN`+(qR_`-*5PN^nLcD+?3D}!<6lUpWK4dO zUupoEK$u|YRX=2;Y1jLib7;F(@nD8LOTHxcYMFc6GmiekqS%D62tYQV_PB?7&t?03 z!{ec{2>uH32_RMztISE<;M2-Zr7ZkR9uRIhg}IdGP)G0|T#6##QnK>)H}rr;vS%3P z)@Xe-2fZpGQ1i4B-@$R>!To=nS_TV$Q^=L`*BTwY*hV2_BXPKtK>Vrh>-GfC6TteZ z*uSa=hCJJ|?4>DlxiH^k1W2@~E5KPLUf|;-`0rkN*bLAomRAowX#%~``0kJ}0@1$G z?!TPSzAGkI&(-A3UQ1?hsjBDRvN+ikw8Y2c?$x~E%#brZEBlZ0l&Wtru@6mX>opMmC=P{V0NhIH&eQOZpQJRb@kE2@c` z6i~cv0e14yN;wqx6{UXz5Ay)TNpgICu=k(A4L(@I9)}F+52Oar6Mo=6|A#alFKUm& zfBNA6`H3h4)-BKDaD4r1;fPFurEII(b+r8T%5PWG1MiWRYdig?H(v|95~-f_r@2K? zJB$%RfkN>g0>MjwijlzkHt$b2{U#JJ;4!NW)~~-yGy?l;jlNEQn3yK&1Ma)6pv_U^ zpQ{CctNAN*9pC+W<+uB;1Zv-`3Fv0yuUqk4f>pzlkrRJ9&2TX018P|BuZtf&`9Iak zJ;Pv$RPO$g&aV&hEP;)y&K9k<{O8yId9MrjH%S%WRCxz+w32Dgb&vjK}F zaV81;^G!rxO^=m zwp;Zse7ZRlv7E)Pp_4{74Z?YHI(q&C(50kJ*K%Vz){0>HTPR%w1NaiTX^Bpve^^CV z*qUb-e?7{`q|1HxQ14V>X53rEbbL&q={5Y$>aP#GFrw|K}I&ro#*Z32yB}@RgSJ5Z9 zY5lO@==}Zg{{QxC4+aPCmh!rqSnuUg(Eurbg`fMC_4V~Ods;So=08G!pKbP3?Cui% z=HCXSrM=vEfZoLEEV%IdE!dMQaJwoplryUZHm;jO0Fr*kvrOT}o=pjhkG}ZL@YEh`OFBL1tIAEqpj@buC6!dPc0g>mON*fezJbRO=-SlKuHOcHKp?fP(!M7O~CeR{Y4aO4DSt3UzTSQos#%kj*ZS~_dwEwr8%FH)Zu4%g-O z@(AC8r=c|+i=|{ej=}Yg`)QpL_FIh{RA<|RBF1&Qfd;1<$D=e^?az!#g({v?n3#@x z%bq;f=Yq4$W->*ls;q2mEh8f@7Zw&Qt*lzU5%V9e_r?;1$`lyN+8QnrgoK3n5%M%8 z-7L2~2SiZON3*0m?`|%E{#L3unv;>-1yuY++ti`M_Kb-3gg@1ZX8 zzVrD1Vfo+x0~Q1>ky%EtJw9EaSdUx8B1~$kL&8AV2~@SJpUNEv<{s#vR8 zZ(dtCg*>)hvXS?`&2Y#g$IIJ?(;sh!u%=YRkd0*x`E{un{sluvgu}*gRFfL8m zO#cf)t_%taC*3TG1X<9>()HI)e#m$EK1BvwQv)tzja^3jQbhAmAnX83@ zP%N!S_maB%)#+Zng9zOdxlHYNyf{>L1;;`qAoGrYrmd~b>3k~Uh~*J$UqP}fu&i14 z@coe;t@5uUD}eC`6PzBvc+mEL+lvHdFOYmmWCi#wJS5NoxqXkq=difc`^$9WGM8=gNbvW|Pv*K5%8S5-6Svf`k~zT6S>x!2D^FlHX5VPp-vO zaj2n3X8H}U5MwX!m6k0M>iAm)i$R|g zh1AoD)sqnh1vam3raDk6dVqajjTI{(*v(1e9i>@niru9ii2$E*hQkFy($5Lv2v>Hf~r2eUA{J*;DM{CTTvV}q`*#)o$W zDRhj0Eju&PnL`4mwja>ZIHXySG4 za<(5#tz4WZZ+|cc-?J{d4ngG={XQ1MYPGU-*y1JEm*LJuY}=hC*hOL;D3_{{@up)Z z8h^H`Wnn=JxgW}b1?XW9Cw92OA_~l4B*A|nriS~(ATj*o;(opLYokKEflG8!^_zsK zAt5Rn!YmpEHpQ#PjJA=0teNnug$Ww7SpS4z+Tsx^&>bOd$uz3;lBQ3O86MOtC{yri{efmTN6b#qZ z@bvef`yclPgk#<=_!3kcYbCyZ1&9oS=&Xgk>U^%6MX#p~^~x>_zn@|PXYLKLiYgAc zL`rq^*}etA&dlq1tLJYG-eMrQxombfml4nv(R4UWQ|$8j$LSrj@FmO5uXD;1M{&w^ zGcZ-G4|zwkTACXf#tL4$3WCTi2I$vM1?Ne9pEyucJH_-U=J(7c_O!&%Xa-1NGxTgI zEt|oJHhNuK?7G*sKtD$N9G}A-k5o7~;tXg@=u9GeeUsEN?Tw+csE{(U-5-OeNx%h@ zB_gESGPCO%2IeLY6>VPq+7hi`AheaptTO$2;nyDdb@)EQg$n_f`0?d~Qr)#(-#fZv zXr{la`}ur*Dg&HqMJYgw(X+TccLOOH#oCLT+1AD$`sAIEVl#V$&FW@Xk0-ht_Np=Q zU6`GAv-Im@Wv0>0vSbz;wu)SCwFyb@p*%qk;dK%-yUC~HPWv6SruQytGV<;{aU_r( z??y#r+pX`9n4TL};xGk)7x(9yG&de)*4hZs zSxA;-GSzNWbtItw4ro#0pYDwcBgZ4eIUTRH%<(=^;Zhe{oUOKy&DP?|>{kAjZ^^=} z@V2Ed@ju`Cf7=6)V?j(MCc`*wI0U6)Vp_eg>|ES=cIPd;?Xawxr+jZ%hH8XY)|=XB zfVF%OX!4n>T;AQbkVk&P>m}GGgU$!JlA_ls3vAd(-zY<+&Cj-Rw#|eL)h6C;adSFd zd8XCijyhNImJp>Fwa($f{EbK$FVtnH!f2||AatMWbaxiZ&Ui9L7yUX0yd+1dS;yFM zwMm8~25>%W=>hdUlF2xPR5jeSX_#m$8(j_E;M|<0!kXZE>%Uzl5fyA3M^`w}k)w(} zF+SJu`D|pf;@cHnYHW$^`fyGbVSmlk&y3fA1Rs&nYH)y}!c&*Gba6J>AlpR!%S`{+ zg!cvUcd%hQXAWQs+pk7kp~Uv4h)!{(y*SHzzOi-BM>k$-mO8K&%`-Sgke5mNpzT%n zFriz=f)940Kh>I~%U<1EcPW5q67n%|lwT8daxQSSwMY9{7CPI10&6>Z580Va5ZUdF z9VxY*Y zbjPr%vPA>&&V8P2Qfp`)4h+%>CG(J=Byz@cIop~OOD@!%pzbnnH(z0fyX;I;X|1s+ z6e`FeWlC-Jv}Z4Mv-lj z|K-~M$JtDa12!buW6lQfR$K^&j!C2nf&TKjd(GWi+I|aMFPSlpmc#csgv+dxW9Iee znVhK#65cY|=+i^l+azoos~3;>AM%KIm#*>a~Ec`GZM~He!?a>fZhJjYQzW zNg(A@vP!1ghwd^%m@R z^Je$QmCUy^{R|i!6!u(SYLtAiqFD%&eQYKjh8ff8>sFE9l$6H0Wr1@ty)m**SK4QVLcBRpm<8L9#@-8N6R8`R## z4?mo)ZGX;Te81~TZl@l%>L`!Met^TQuC>lqoLmrRxefx(+2NT$p;%9J#!y! zl(DZfi>avR+}V1PY(wO-*aw*MbMJKgVSNJt6Z#9bFSXw9F<3?xg*7W}&FGQ1uMJ*j1t-mv1LsdHn=ZnTK zTy|z0HO)>r1Oq@~cU`UGgMPmKc`+S}Hm)%@pIr)L6fb2}nXxUl_)+-4u|BOY^SE%n z32<(3zA+4`=Ey*Ya!qDdB8y{96WzNLvQS5|d%PZR#sJmcUferK1j}y6*{))^ymS{H zjX<|GAU}NrNEjgIDHS8vQR$8Op}jpgK!eq_K+*r2oBL5p>R6%tbAV$jn-w@HKQ~k$ zh*&9!v4?m4BFo@lp~ikMVHhuyk7VYLl} zzeLs}FP~S9r#?PBJPPqE?_kB<%~SA=^f*4w7xxMsxrJhw3Y5{C~MOR4Z6w_BsY|MBC_U z7LoyJ6$d{*&DqokefF12w+^>I&P$qb(sY3p*9pfsumsC)fz)F$3t5`ZK}R>dVWUR| zZXFQ^(bO6I)+s7vuL5xmU(CC8m!Q6a;9|aLr4dyKKO#eT27OwV$OU7nLmU#iVDaIT z6+WBtfw%-Fc-vhc0cG&^>LkBf2pahug+M^V#AGaA9jn%6U9Pi2$0~XNmTYB%V)Gq? zn%r(M^9A>Zv!zqSJS)@`+YIV^T)Bv&Iz+?)4-plG8#ZOGT^zU}4p8Gz|U)4Eeo5T?W5he~PbM0O2HEhf8)^_ds)6c&$fG z;yv`*Zq;>)2worxHDQYQ@ea~^i0RSYCFZV>60-H;7Uyd;@Yd9k2eG>=e^(6OV~@#x z3p6~hyyQ({y_i<(nOd{RWoLbHOL51f|FSwzJb3;cRG3I0LlU_j{F`;7A9c_uy7-fu z>hNbnaJ8(NlU3NY`NwEppQJD4P{DSoKnY)NhZsZtt& zqA|j)Ns2?lH7|D81Pwiz(s@R<^}BrGDfU`fnNg>pKbgq?ZxbnDfO%YW58-s_c=UXa zG|x%2=AM+XS(*#F-kqyr%N4_$MW&kEVT(XngJ-f84DV;WR;|wVKV*tuBvA8MY4Lmyi7fYaYum(;p40qbqidiywPkFEL0FgdWEDZ@k9Fd7K>A;9I1TfyuYwJEN}*$U=erA zR|pcN83B63nZY})vynT_>p%!6Djrt_Gv3|b)i0pGzU78#YhK>Dk>+RP8PSyZ$2m5 z!^_m7t$gLDsdS`|IsbT_vXK2}RxdbH^^&Y7d}rqNd6>p1{nSZc?y-CR_?>3uc!Bop2a_GtE3dfhO^zTu9<1P9 zWx*qoW@5#jwd3bpgxWlFO(&?YlCk_*)=p2*!y4h5*9As>o-NCor0lpL<8}JWV@cNQ z%`R{g3!$L#Xxw z-@p+ZK$mMfxm<4uE)6(R7v4U5S5i?S(A3}*PN&U{jlVncaQ|Fcd6M_3aHDz}Y86=k z7FNn*r{$sLHpdIv!$Ggp32Hassd)mA(8^f&eO|0E#7#P$ZlRe28EfO^3&xr!*zmm;6S@(f{@kfb1$n9kiFgL6>0AkGb+#!)?!#pfh-}OHC^mfgb)*wAegX z{b2_S5nJ^qN12w^9Abzhl?Rl~yPOV6&3~L%`QbLD{Iz;T&2Y^K(WBz%u2NAFvyWu4 zs5}(tbe`>2UdWZhD@)v*Xz)Lxt-ndRwPSsi6X{(=(K2+hY~DXz_6`(#ByUmjcYe&h zMJTf3$5L|tP6njNNK%( z!||a&>_WP2XVie%u6{3-e^U0qeISrbQ}GKa7o(&cx=f~e-hZ2Fu##jf$bZOM7>?Zh za8X<-bRH$taVizZ?*3)u#qiloFvn{q9rJHCtL>G1`S28DM;MO-y;)QAR@y}mHG~4e%k?cC974k{+I;o@6>PTz|8`r*5u2HEBZ$%xg~BKe(dl$yxBm*$rtHYg7Y*YTV_zO)v|w{qmPrn5}afG>^P51TF&Gs zOI6m&LX4QNa=B?pkT!h5A~G ze!2U#GQL{96-w1UXGT?Jv>X{inq)bQTX~2+)ZlRHw4{bKQ#9*Xt3%2t5o?Fi-0}h=LjprIOVIlo}^KGwvzB{F-p1*A!5;`HG`siy?-5C z0aQ>msgV$y5G)CdIs#Pw>k z4hO68m?`kBs(NM}l`S{M0@O`9zdp1bjl7^2;^Lb~ zQlL!Knpxv9Ig4OUc9yx?!YT$onP!jZd_PC;4!*c)E;l+^SU&c~v%R}BTPe}W%uAN;0%sV?MP%)qGGa!8S?Wv-n zwz@vmvC}AiiAg**CMB>2B1>$KzLaxvTnB{|61>~J{bl3d0oAk+AbpbUOmO%F$CLOy zjL%C(aSfaaPEj7mV$+~3ev9>MCDHhnV$s28tp^=1E9@tWd?EMCyt@bUPf-X7Nqs6u z48HTCNyQ-eXENEFby9?%$P~+LP1BJRK(kKVV^C)YIC(2Al#UyQD1kEPvc{hvj^bsf3tlcC-)rT+qJ?(ecZLR;#xa{h3}~IuuCK0^ z%2QIdE&XPf(ZJFGtbd(^A>@)Noro~->LJPvfS>qRCt6(IkF2FoLNId{@SUhDGIhW2 z4LIRxytNMV`IaG_@-#|4G9dJV;syQ)+mn2_tT*BtUt0LHbMXg8eOe?*zfwJ(F5eXF z9PnYe;C4T4_0xH_tcK0fC`3VgTHS+xq#iAG?6;3XtGmd_KY!Xc_b;dQKcIcjE>ZxE zTPxM;l_07^GaS}n#f_q-NLCt1;Rz)Zj}@vWJ$Cw+k0g5b>XOWRD4az2t<(F280^g6 zv~M6palt{a@Z*4(Gpuu^x`p-#-qwkP8Ki={a>x)F1{JBvO8c=&`anwCqI60eemG>V z?F=W6*n0QpG`zI7wjERnG=H;2On&FWhc8bhS^in@g7fOLO>Qqzfu)_SPhXM0fRrdl z`11*{W9mqvCbU?)g*uKiTVLpwqm>k5|MLT!1!wRH=DP>&xv?-?(K?&XU|X zRww@*jG1N&+;EpO^=~$no6fseIJ%v;Xj^mNpON&CD(srwOx!)Hk~Vue6*Kpz#%8zx z033+G_3Hn^4uP<8NJx4pj*z++ir0!Cjxt*Df?DAT@cg03`8(;9cBcz0A$cXmB7`0* zvCMpsi_2=iNyCo_xnEiU=|@A%z?Q5NUcH(*{jOExcAMjJ%A}Y_YzD`{rcd?4#Cyn_ zrAVirMwtOOdNkw5VXF^nZsPtzM^e6W-^N?~Z3aEXyyG3x?tYQ9#mJ;uqR{%pH;!(NNuY(J?;9FtPZ3Nhm3+?>8Qglk)8R{kQb_!>E zq*wT6GhUwcW~Fvm_g>vmL`_wti(4K=G~J)r^!5dD6!@z&v?K;>yGIDt^Y+FTU?+0Rb>-d@RH+jG=Y8g_5#Plq&25u|X z2*NSj9)nMu894tpaRcV^mdSx*S%X&gKMw1ozunsI{x|>WawMJKLnqhrJ@TdDFFa9_}>Z;)V;Nwuj zTwO6TMzEnRDENjNJ{9{!Suh?`cRl^k`3_y3d_tK(+^+~w3W*>#AI<8|@Oi?lS!4YJ zPovR#A;)ECiBbgGddLN^HjzG<6VOi^dU|+mIJxY)kdH=fy@AA-u@PXq=f9J7ze&Mo zEq7{o&^-L3M-PB`biss+UtKl87T=2{i8?^3tAWwH+X}hsqeCYf8n8szA1_Lwl?q~> zFN@f{GA)8@hK&FHaq$HV9_HZ(WtRJll`AHSR}6NqUS5ogpDB^5fymmJkIZy*bSPT~ zu3_G|PT7!J2kGyxTXh~{$Y~oZAgq-{{p>Xu-8UxF`|yiYEG>ieMo%cG6QU@eTP?9lOaPsUeztMxseUY^0=K#``+`* zwM<&Qe?S#=h=3)1{q5-GZ=3!7BL=u(Feq8Qiu0IUk{o4nXULuN_?Vt!t1KWooK5!A zG@&Xuhgsq06yn3uP-Lh6CP>m(2~^l*!odyFp)B}OtALFzwM-OS&E<-EvDl0_7G=L! z)EVNZk!@kS`7BzTkscy5&ksqB^p<&CG4V>eWu!-qxk}3T%LRdSEAObIsOMJ_Q}f<0 zCAEeYCJ{iBd=7+9T-$my{=r>-BPsE&p#rDgx~5F=H$&V` zf&>tWZEc5F-lohfc{0hY?QG53iu*@DSA`il zN|YzsuJv@T0=jfk1ZXWNpDc8;!&!)!`3ixONx%!3Cn!$h%jT3n3yr$XEkXs?sdMMo ztIRr-gEt9*K6fl>)He%t7WFcU;Ud1kg&iA^WTskm^HN;t7medVWP>@*N@B*|$H^SF zm$q+2BQ!$jR2h+2EVN`dH+nSxYOX#Yon7;1Hx*I7ymroCUCxzAsTHc^_@=E+Y3S3T zB>+l2&n^3AzF29k&O=C7fUiW%D7;krTax+9Ca8Qcz>+A;)aN(I=)nrMG4^7BqEN4& zobZP#@z;oFH!9ElWx3xS$KVYBpz*S@~vr$n%TC znNCiu+_I03%V{}DbBz^AUi-v#Z{IPPGXITI9uBmx4d685xV6c8QOq%yX(WK z*RMdfSN(L8(Uri&LYu@x30`n#NF{zbOt$Js1a?lN2xbDjTn&i+I^@_cyaX-Eu7aHiOIIYoUgs4~L}wk#ll zw2R$;N;?)I5eJdo6qe};XKOe`6}rf>wdcW79?~U=#>1^<(Ceuo`U0Bw83GxhAPm|Q z#3CLehcflVei-nGXOD-wgY>q!>SXoC&9wTJdN<*8zqJX)^Z}FtxpJjfQN=Ri_)RvO&*rpi{LfLQ9X>u(5j9Gaf)EyV{TwjDrI3%U*R&duYI}6DDN6BBH*S}PKCx30NpAcd+3shMG z=P!dlPd*^udQgk^m72-E+h2 zHx%SB@Rgq>aRpyi-zBNGyT93fCH0i!roA63Ir>5j`ha40ZtlC|!=so~%U!*`Ahp)E z2(gDz3af?rDR~o7@18EI2BzGxg~nGFcYXYc$mk34eA8ipcg^T%;I$#JcQ|WNWtIAb zXxu!IfW-us)N;2zrp*EC*iy4)@*yr8CCo5;;@HPdgt1Wi=Vs|y`^&xEPgxzceOJN^ zpZBJ~7%|z+_2^|+@|#@XQ+VKu$Iu>1z7M5)+5c^Y=;p1%=4_NQqyZ(9I1%7@JJSw>Pn`olDadTCf`4yu|XJv$D z|IC?h%A&#Ed-jKg*NRjzj5~-$R$B)QmnPdCyxC->(h&Q?om83oIpa7Dz2j(;>i7C1 zu9?_d<1-Tk{X%jzXpxnuf>aEdi6uZqhdo>l6G|^Gyt{AS+c%nS4EaiIl zyc2|NPcdSTn+vmad<5A>r2`C+81n3-dJjI9h8hE?I*Wjhw})(OMSjdiL8= ze}D1>)(mOmk9J*^o0%aoNoyY&4Qg#{IypfM?Y1ngL?ejChGZMFb8v(?UP?eR+_u)e zi~0N{mlqhnBB=zrbiHZa%PJQKA#}Rj%&R+ICm{YnYoJLCB!TlbdGOTGd$AC>>A>2y zKIVhEmm~%$k)(pix`eZw)?d22pY3=99v0nVu?c?IS?{HPETA$am{5VOV}$*@m}@Sx zFqSTbT0ZTLDOcWp>|QsTGrKbqcZw@tvx0|#FzmNL`LBb2NDY({r^@bit``4z0szKg zhZ`0H1=r1PBm-$BKT(w+UIm_m!Un?K%4RTAThG&NjO*Pwr}lZ#J?{K4Mmu{W%ii{D zAOU7v2`VT1Ej{@K4}zEgsF^=F2II^iSx(UFwdluC)DXd;Ll^ew7+alN7*57oP>0pdUc+wgYz; z#_IT2mp81G9VBL_GZ$W ze#lDZ(4~y(o8^UGwDvdF*zQ^evAKvK8|&$LWA-Nk)0TZA(0ACMeuU7(*4EX1N+`Dx zkvPOd@&uk~P3lmjQD!g_MF~7?)>}U+AGU0s+9|*`ZN6vN;Q0K1vD$-RPAkY+qlKVK zdG$(U(-8HO1V!Xqr_~mtQSjn=;2JB{t}Qc|q@9|c?p7~Q%tl^l_8{Dt)gxx?+j1lZR=*hpthz_|^X}@FKWwmn znHNUhZ0?C1YYr_sGavzIW^AwJ003^J{r^$+*Ktv`+xs~FsKn46k`5tAcjpj-NOucJ zmvr|40s^9xbV`?mba#VvH%JaSG{23{Iq&nF&+B{s`2DAwVbA8?>%P}o*SfB??2vJI z6@+Go0HXi{WQ6?FiGq`FzIWFI2ZFAh9idqAly`nvO@2oPozawrOV$8s9Cl$lBb+#0 ztP{*-IWD8yNbJbR|e1Lqid**n(1DOG-%nZzhBq}5#04&|uV;nJd7y}FV zU$=!VKPKdzqJI5-+S!tHIf~y%W%0g;xGY>=9pj-aC~{qLLDyTp z_%f}`8tNhlMaE>Iy6O;}ToV5A+Vghuo9pYfxX@4mX#!16%}?oUZTa?{ z_h4a}rpCrk-34QrK3=g*%8-kZBu?ZF+d^g&>F9VKD30^dEZ&vh4aQ@U8ED@3&ej&A zUv(EyR)|Z4tX!RL&*j#;pjrxweXIxOnoE75kt-t)e%v|r(3bvnXQAD0BzD7wS8VZVRT>2uC)*SjAZ3wd1Q>kGI^NA1tXuo*$V zoyP4CrtstCDWp$Tx268sA|HV>*Ftjqz3%_o)BlIfkUZ}NXgqUMWO-W?TqF}*Dbv-V z$vyh=SZqyj+3XsFj_D)3E!zXr8V!4v^E(^x+3wxi<*MmSn=dy1#ThA@?f{WP?Wi>{U zj{#7>cWp82e)?`<%Vh8afn3m;jYN}#2Ei3KaB0yC9?Mc`4RoqtcZR*|48!ZOc{@KQ z0Vk^k?(jnr zhrZB8jGMaBW&$FIfD^ASXQdlGI3=HdH~|Afzr>M8;@mpVqq}<1h|tai{XP<_es~94 zI)J4GO#d%O_qey?fKAE}{z3CcE_0xQOJ1RCFWLm48UZ+2A1{w_!NEQ{GvSPJ+N2FD z6*uxOEb92+*r}#F7;0J99M)2rOzaE9altLzG$^5?NMy9ZoS3IH$@5XmTN|(%|M*Qb zh5N-W=9iamX!&wf>vPTbbJUq9Yg8=NGDX8T3z?I{Uo%xyVWX?i4m<_qIHnAx3;f~g zH?Iq9ZD|`vXz0OJzO$lA9QFWh`8@RHO4in>?MRZc=bFu&JOiUq; zA#NN4SB+7#q_C#$5B>Ke`ePvsNxi1;fA|!D2yX^_B;jcz=ug@#8tS+>&8IgTH98n=6%*nWmOXeYN5gs5eLWJnGUDK+3j<>cWvkT-{>B#Q;V`6bx2V!X{HzUk#i+K;K+YE73 z{MH$=U81I6p{to_)`{#9AI)(SvFD1%-{IpLeTw_xxGbaBcKdi; z@$bV4`{m=xqa@E}p$6+@NgpfxNQc&~Mp$*|ZXirDIxww=3qgH7 zCB!dc*kqrAi0(6;;>tYpHj&U(ud zmJ*6Zq1Mq*L&(oZDeU>avqm$T!eWQACZTh@9>V9tc=B$S099D-3KGO1DhEmx^x^?n zY}C=xOT~ath)vK;6KwU^tMlTkCOt~WTowUDmaSB|DE`~@PPpj+x`%dGd-dLw(Q1~I z4&L8fH%WRR#GuBfBQ^P-F$Rbg_(+G`XnFJNj=J8@{V%L;olJOn?#Ney3D^b2w#ZXw z4l=m5;a$i<+nOj-XTYjN-!~9?4Kr~Gn#Xe?jscYLnMOY&eb8Wf2rlxx>7;W-H-h}*;hg`4{!6dDK zJCsGc9=}MVjHlsTo|LDzyqqgzyG_O*c0*ov^XwZZF|N#v4nG*d@Ui6MbmK~+kfN3L z;ahDU0i$M8YCLq|+08}4GAA%`%Rd?PP=sHC?fGkxK)>EqJ!E2U1t^COiPEt6wBV@z zp;ZO+K1Ry#V@w{aqA)QF*04o1&E5uqVBL+8Hl29I^8ODqCu1;S z_(oxviU(=yFwd(s?JmvJoFs)MH&^y3JubpYsv%ktf; zIc-p4DWrFT5g%!0YDxppY;@>=&&tbrr)bI;nRiE`;f(N3#=Txq_$?i2W1!Xt_F zXgxs;^ZzT;_zMrj`Di_#hAmdB(t6Zl>;}h?+~H##7D6KTicgvY=0rO{IsS^&};U7 z-XtZW{{O#8BrVmGEb9{a0{j z57F@j{hvBT)^&y7ie)^uEg{Yh(e1 zwS`J+qW%5-4R@{JQ3+&B|C17xOtv!oL+(H2L}!B%b89r5`itMc^6GzP4$%q>%|36C zw0M_Wj$Qb91%O?+^P{H94? zcVp1#aw(C)H^bS@jW-!DDauN{D8p{C-mx#9S=ZsRH)fP+yDm^{*QQIkZk?%bZ8eUX zug3GkrD!_n%#9-X;j!K1OSRI`-CI|dN@eaP`BYFE$e)oqRedgQv50w}JTK*2uj~ zKgL(KbDws`ZQ0hkxf>UAxbJs2o!%z#Da{j@o{Pv6c7SC)>y}fP7h(I8sr2)Ljil#x zjo7cgn#Gy{IawGTs|4Ka`|tbTWKLPu!a+*wTMo#Tyl$MSC+Sv{{LV@rIV*DD+FkwX z#uH6t`c0^qm?58ef{?JJ1yEds%}F|CV2GP^d{r|lBXla=4g&yQYQ1i z1H2!fH##R!Ge-;-yU)(ahiWEJKb0-l8MXJD?WRPze1G9pp9S<8$WLL=HaoMXc;WvW zC3Dr|Wxr9?Ht<_qr35yzt!Y(-rWr>5mLe!n8hk6XunZt89e0(I6=s4w25tayAikdm zE5`q>u8T|i2I0gYXCyQqDCG+H%yHqL5$!cLH7Qqnx*V`W^p`7alRrS%LGXWpNfNda z+Snvu=fxy$nbbMhc7InFqJD#$=3xHxc&?nuLL$3WgR$u`RlB)_g~jeC3vg8^-?Omu zIS#XZEwZZ{dt0LEKcG>-BS@;m#qN~>>6&|l(>?JN6rPJYEEPc2LFC+?nEO!V&ni2V zwLm|F{;fN&pXJVd&ZhKl%9x-?D*#O7k2nc1LRSEk>aU3Mi68g{L0=+6`*PX)NMkV< z>gBOkajZb5QU{-&SB^==1N&tIMZkE%<~%`$V`F=p5z)AiQmCAqF6t<+&`$O<4L1n} zyLaN+-O@ACZs<{h#G-ud*MH*KFS;LDF~$^NsVI^uyX?y=;TkUY>s=ljL6KjBe8H-= zN*7pUb+sgE22XIps;)Rv|Hd7%tG`ox1VF`z2%#j5f%CW;nGEu#swWn<7U3F+jaM+H z_GTcg1FPd16>oalK$XDKNeiJN`PR{L^ zGnjm}Ge(^|zhAGmF*%qryRzXZDS1x9X_qpa^4S$C4YHldc;b1!|4Lp}C%JU7{<()& zHx8>#8Igx5Fb9KWTS-J6m9ChX32J5e0T4U}?1%v{;SLNxYXx1u0So8Bee1Je@S{L_ zbje40;M}mqyKSQ{2)1=TK+op^)9ri@uF}1mrQ#}Gts7ignA|4{UpZQGM?%Z&7Bc>U zUGF`sl5?ymu>8}|PY=UfhJ+9j*}@B%&-ze`KNZ(M{G0i>`@q#gUNZR#kB(JY_@;vj zI+Z_*K)^8d1%5idh{0+8DHdX3VW%|U1TS`lxjRyG4S29TLLmRz*NLru{*S07{PSM? zVc2*JqPuF7``ur8Wwu|hAg|PHbb83>zm`=D(poWKVp=sJ_2K2kgkD`AaI!4llM+dm zD#?Ls2zm{)w}vLt08c_67P8*3uYRiig?RTGM&^Ah^2RB8(SGeDHKVDCUS4HH`gG#p zck^L`zPjODi}MXzT61G=6d=5$K|g#jFX$!kM2V8+$oP&eu&z7bcZE;r)_Yrc$s)uM z_ht5#X#Erxc8n~($k7kvXoK3;R~|eS&75mp@)>UvGy&xjQv2y!3m+v2edJejt7WqY z^(VK>y2urWEAAv5jDWC@nYt0L$Ep!eU+UwOzSo6J=;tJEs~14O18F#!HiX`m!+3^G z?JT-m>ajIM#p{&dM*gpKav?wmxU6tkT8>^;Z2NCxY_OGl(~F~px@QT=yptcwVD&4{gs(WengE07*o|N9E=sjFa)S#qS{s5T>l( z2BT43zw@lJm_i2{11N7_U}ycV-kYA}QP%=-x3^&cHK42~Ko*eQCh;+x8mb9mR;gl2 z;yQQ{?FrPwi*@+v7^29tgaIQV$s$GXq5&+!sOvp=;!>e~*%-{VkB%q!UaaW}Y3`Hd zX!{Dg_hM0r<+^tsj2(>7`=w?q$4!`ju&GnAFPw9`>63adZvv}D zE5Lpe@rsKjxObBAUjm^faJERl{2Tr^=ivpQ0wBZQp<&l3Q{tNikgWCHMH90Q{atyi zFVta0iqOk9=_5+)!a>GtLL*Qc1Ul$=N_entwkLasxyOV-vpId~GOwaM?yq2_`k%rL zu5H7^FN{@nb!B?J)_)gl;Y7X#$2QVFB#9cHZ%m|hR8gd0zp2xGWoX{$j)Z0U>zq>5 zR}yF&Bj1qw)2vXfVDLI<_cGhw@b<{>K{YRyK^qr-n(a(*&=p-YH?2=d93f=`&Qfo;#u_~Zplps7g_>Tk6NdmISYx8 z!K41KAJ1>JLO|oy8U$!e2{TLL>_kYup%S}=+`PV-@__mTxftyeB|)qJCBr{Cdbc`{MUBhtZ>(}2 zTm_eTB-iQ<&rsYS@F-#d>9f}I$dfc9u23Pct~zOMh>rTy*vQHBVQOc;4|N8>m@OLv zT0=0X1~z>;K%$bg!xelzDHuyA{5LX#<|-_o@u52RghvcApHqlTbFR9i+%H;)k4lt0 z%Ja=e!C(=U#)`q#Gzw@kbX#3g2Ku&_<@{WKU8`Fv`{YiEt-+&N4QMQ+Rb}Eo*rx+D z5~#CVp6%jTD38IBr!F4JF$)`}H!KgXa{jxSLQ=PtSlmh67dLtW+=7P`!`XeeG6WRd zcSnbdPa-4_fQH0W94XB*wp{Fiq<7F4nt86amM-Zql@u-y$B(XnI31CYMJr=#LXGh1 z`Z|1qC3{pFIxzI@*9(P_L~gWssbMACOtP#nJks$1Zrdd?00*1K9JmhjI1Q}I)K@Aq z5I(~Oo5~V%Gt&$j+`w<=xer$7z}hM_rK?5 zF43ux?7>9JykC|}82xD|`sII-frgp{b7rBY3km@ z6^?#iYDMg2W=#x8{R@Q#m1YOBy`qvxh<@I7rbJ0!1}}cW;OsaC5XOxyHfw~H%B)j{ zxK7^3oFKPabqNHXXlvBy7`LF z`CZFxZ;=4QMu|i1Qmx@A;BD@LvBW*jFi)e^EPa{r4|(V&*S(dvQD^x|#X4SWO&u z3+}bQZ?WwJcy()vcP6t#F9UcnY;4y0B+p}u0NP+2y>1OU!&Rtxrs2z!yb(5iibL0m z>t`_&uLOO)AHYJlo?y!)vR>sMC@SxJLu-%sVO=AnX(LB#GrMgW3!lZ~_@<7PYo{n> z(paKFvdJWb@fwbI4GCB)j*h|QP>+UaFSpZuf{gfoT%He zhT5kthBpww6Xk6M94T$~(OZ~~l9!(!!h`M`<|o7g0%?^BRLE)Y{i1s!t=-oXA)owi zHxQ?jH61Pnmp?dp+0+l_r_w2c@maN>L}4mWEt^APqEC^RntdW)M;{sueBXqfpYtS9 zs!>-#Ebc;VJK<_blkayYEW42LsP60p1=OB7ylO;BKighta`m*$7^#`^5Oe3aYAU`-lDCGrm+0JdQuFa!;px+$+m9in!!b>-~Gth{K@8u9E z`lq79_U{(hIVa&~iTAyJDq3l>7W)rGTVIe(Yl^j%%ioC~Kew_W6LJQz8bJ3wqzTgj z4K>*B{u1+ia2brj+nux0DNF5}0 ziKhMB@y}-dcT<*dkMrH1(govfp$g~>yt-GY+~OWHK(#ivfzt=n?9@YY9B?YW=?gv>>+yUM&k~t0{9;JsBtbf z14bs8p3=Oikh)6%S--)&^r*E|)oHS#Z!xO(+Pq>K))lhgzMJ7^>KvL{m?2=JjNyH? zYc7CDlW(Swx?G$t0A#DLe2+g&lB){*ZWJaRmbi6CiDSv$i$u^KDZ95 zf#T*ALv!PN6R9|^Vf{EMTD*EQ*9>s_e=$1u60n%NH-jSH3)ix4&cBte7uwvca+?3% zdj9DcYg}gppamJfV|N)@vH3N?c!wN?+%$o!c8tv$|CVgo&@DXI-K)xUz^?b}&(DW^ zE`aXFc&xqPBsf-#&Jqa%G^rxymb>+k$*RD1j=R^NtMG9d{n}|!r-2tEVkpIbwDmjk z(!AlGbg+$N4duT>EgB%y^6TsA=l#<=3`Fn**C;hlL46v55LYX;mEe&c+d;V2bf2WapFi6Fp&f#kn*&QMRRR~NkANtHoK z(53g{=3*iOhUB(?5^`-p@iZA>mzCxmqsxKpoKC|(b6CFYOB8Zh_B-*<4UPkye$kry z#00KVS>@?Xt|(qeXr{rT$f1c>dQ=OZz-`Mbc)TAz*PcV%13i5_nU^=zu5;OsX*r;y zqG)M0VGciNnsIUQy6Zos`b?@+kb~gGKNFC7K4D%q@Y6SNY5X)`jAc=kO1&6glov`sKB;>tcSzqn zk|Jhg*IVS+UhChoJ%O0Tu`&|om^Qxs`*(o(2u0gV1MeKUgy%G|Dqw|d>9bhnXR&nw z`Vx##9-9dbj9@t))m)AX(D?<=1xVOI=siW|Y&fsvF_K@u$rt3K3(KLWf*kPwDtX@` z1HG26DZO{R2mTl%-qRpt3`ljM`s9-3@bHW&ZofA92I`;UIrdX!DyYDB$3Pb$(#vc2 zbxk6P`THeO{Pxe`MSJQ@ga!iNX-&Fq+D)oZHJEszY?D!RZxgjTOVdkGUu+LkbWJfc zc7`r2Z*t*Elkiy4Nxlg}#tSYW7b#A*Bi1Nc1dhA8YPB+hY#fI0(I~Yj%6Xy!qYs-e z?+vA^<_kSVMLbsng9WcYDwQJ<0x(*p6S=v%Ob#u8Kv=SbNzN+_wgxBPMSVIjkS}EeVuPL+A`j73<39=#g+ia)U7sSrYvHRg_yZvqxB0QDUG)V)Y)^> zX*L_SB+nr`1tIcp?ZJ|^SjXlq_e+c5B+@Ukn3$Ma4FWGldWQ8I*u93yTr9U0$j54x zsjKB115qQ3&Oy0STz<1B1X@3Ro2;k9I>m{N6)iJi$xayFd2TYdEI0?B4pHq!na>PQH zINN?&iKRHv+Xp+kq8aFGMI z*bB?sXdG##tT3}^jUd}K{)*ZJ9d+Fm{Q=)IH!LQxIYdlvlB8DZHDoADuQQ(hH1&hx z3#&=@kfxztW=qdViimO5r+X1rt^8Q`;ev86%~p64$1A^pHH+E8WSepLM#y=@hvUFi zih^Hrb4bEoSen7(x~0=l^BsIskBn*Hoqi9g;)iSxk_3ff9VIHDC=04jW#y0e!M3O1 z*>qEp=-81G@BQiiJEs{3a+)*03T(Y--js^?ftOm@h zyVxql?Yw|uT2*UcJh=rpP&2;cS~5Se`QP@q%oU+_0Cs3Ad8pYB-`?I18ll26Q`&S7 z>MqA#leZXN0 z%=Sbb>999MU*3K-zAX_+5wV$~8C_~Ll5+8*^iCzi(`}<J&C4P*s911B zt3)IrGf1%Qbt5)*QWgP|EWNO+bJ?t8|DurRzR>x|-Dh!fDf}mtl^%1LC5x?8coy5q zQ`B!j)oz2I>hGpyPXkcKzI!<({}X^*X^{Yeyoce+Ex|wRJp}1@XT3309O?|W*mxSH zdSSoJ1Mks=*aROnkga~nVzt0Zy1T!uQ9K#&3b8_b{nI>p1<)eoH+Q_0*M2EMJ5Hq| z$8+|k?@OFgixDZmq%mVysW`zwT|9GY0O>Ru&b_w5Wt$ z$VUM6G2$hbRwqsX(+ZAFtz&fkSi3OlFGHbHpu3kge(cA$zwEH*oRo&;`TSMFr4;j8&0y;bkfu3UK$T8%Y{q`XeG_hq0=|%tSp{LeCo-<*=I^ddnQm(P zOLeO5!QEd?l)=!nMGl;w!?v7)Xefp>{>uF2<$`I;bs572Q!W9ZNL{6xzOS)DZ_ZJJ zf8>6yQ4?u&=-5IDX)FT59o#Ds#@_pE#$fnib@mT~`YVg~3`+V_53{SElJj_aJ?|M( zW6B(nwewQ4Vs$5~Vr_)bwZn;*fHqs3<=FbqAnD1&+_u(;J=CFYM$1d`-&LR5&eO?; z7v|>J zJszlbpa0GK`42Ry1=>9NC&IxN@bLw<9hj>)^isWJLnB{{l-r6&qe5wC4j6c{_I4n@fHPE-CQzXN3-aF|)s&wUXeeC;ImbrP zqXtq@%~+_!F2!J~QrsLg?WcSyN7hD4TzQbgyuLQLD>O49m2PCKluZv9J3FSUX6|qPNx~ z!@~o?Wd#j(`sW94@^OfJ_XvWq!`TJcHS#!IysY^zC#FCK^bA?G^tlP5bI&k`DaJFE zbsH&tlP11QOSRz!%e@6`DRkNID)9&_%?aCvQGN4f%;v3EdMDNazbk<|63^;YLp)|s zZ8@p8;q9?aI?8CqVv!Kz{`ITNgBzgDM%VS)z1O-KL`=+%n3t%Vp>oF}O zecCK!%#3hxu1;Ha-dVxqD;I^YV^?3$N`bl(E1u<9cAoU`YY(db*zzdjG3%#(D(Mfx zenKUN@bNDkdOrji5VN1P0_V&BToyCJrsn~3v4bhT;I5&XD0I!4OPR5U+F2KAxTuo% z1jWAR^SejzQ)ceEi)FaJ)Ck3TIh=qQxzyd$(;Db;Z8)4D4Ls3{G+^kF=@^ z1ut@CxoZcG4^R$Hftl&Ez@ICQ$;NaEauMjzl7>jnWhdp3{nh zQiUw3ocHG9qW8Opl3~DnYewk;e!a6kI@lnm{FS&eQ2Hcn1Qnpfcyy1SpXaXVmT`}W z9-qFg^|EZyLtb|=UKqapPAOtBocxh6M0QNP+;;2*p?wvD(>E`rLlyi5gPThPt=Sn) zYYVf;kH!p@dK%yJ1e%eC3`f}_QSOuLM#yuEvrdUi1oGq`J~gCi6ycK-U|PH?+?s3j ziheR$tt(n>=6T9idd8}Iq9YR#`6e7YoQf-aERkbej4=Rd6XrYfqZg*uwqqPSU!&<9 z+;UXJOLWekAj-X^U%0&hS)ApM$6+m9a`vJ<{(X)Qo3Fw$Sb%+g0LKcAswx)cecQF~dg^^;ITx29=J3^)7V zX=i4A?9RWd+PC>=JT+FY;@bm8&AdZGhsMU@PnJgCx_;c=ehs=?hN8gW%MbY%d4o(S zke%0@W@4ehEc;R5uBThW0oyv&Yv3|H?>>77 z(b2M?`|8ga(sMWJ*8RXkC+2%f!ex`CiY-Q^)C{%}Y0``I~U`^uD%JQ4Y--QvAwsvSAM&x)~j71ap&M zrB7Jl4v05dIMq0SrFkA$ypJBV7)^S{?A|c7a^AdjO#zkOb{Pr_R)|}8 zcU>OYXyB^wa_~|E@948RNHonB_VmpDK{U_8)`wlWe9fOMBP<1wozGXVTf2v2qLrVEs_|3m_Xsa(x2=7$ zVv_vn%kh^Er)Hgn2l3gqQU03xvlQW{E7!l7{aG9ZF?D+z+SZ-sxhYBLZ%WiA(U68_ zx+-ZM)U|tNOjub(^EF%8xvUn*Ztu9^O%oTDig}hOiOjk#P;u7it**<}!FEKv+`^ak za^V19X_+Q}S$h4A$i~t7hmAbhmm`q^|K7BJpRIzAMj>b|%L)F6Q8?hz|(v&27s~^&06cfh^ z7Jf@)PXRTI+9F_J;Ml8(ULJP&s-p$jp*y#2Z|N1lVDrh&bVnEzM$ zr#@3|A5*tpkCe!~@i)Yj`0G$(4h_)cZfmQ!5o#uqLW%nAz?S^rowIrx{A#VM{GnC6 z#8Jp%@(1l;I&Z=@5g_fZktaom3?7C_;49mbt#HON|(y#zc`Db)Q)_ zK5T5f-w}n;HkaL2{NBb`+1l!^#6ZbJtTU`IVej6Kf2sw&_*PD#=e-MKzrP=NO1Q0x zN0eYre3h-7w>nxp-OzYZcaSatjM){JLSy8+U6)*P`&w%ML2eSJyPc^Z7fJ79an4uk zclv3V6J6IGm8rzmgFn2euOd@mk3@In_ir>jkwoP9!C=nsK3+dR@Ybn#iMISjJkrl@ zRQ&t-ujMb{ZNwm0bv6xTUIAg|SpEW>kv#vvK^daH7VjA60e$c7H=VyzxOyuXyXN;y+GYx_U zgQ3kDKPj|ywLa!?S&4>dLk=-HmYz;44ZD^F*>#!uq0Y;Ry-0&}sk zVQcsmRjf_XI1mSmW&O?V(xw4o0Gc88e0dFm^P`IwpKcA=d|Z zyw5iTH$3Vf+nau-{7JpjV+rwv(KX^icO*!QY_bDUIo4}UQHp2IL$OmUEBh#{^3%16 zU6;8Q2Vp1!qg|z?6DEUiV1=0#3Zg$v*!4u?22?ajO-{zv@R&u}Qw80~YHY3*>_VRY z&KdzG>-jaDs0Oi&ZgwNNejmC_30otvUS}orLohNDN7At%N|pnWSL~n@6;!~}&0T`d zCJ+wr#&G`6Lj!MCtnQ^4#G=l?H%aIpmj|UYWS~lwku~_v6Kk`s*v?0WVwxdV1@2KZ!yOppXCT_}(5wKlQHny^9C+7Rx=7lB*favjZEDc7EDLx01cw;+pxd{*J< zdQNn2ON6p7Nl8zg%$l(H`8}9XUCx!sAo zf=$JZP%?id>gt$pr4jyGMYCSzy=aN$TECQyQVqWXUS}5lr!}_kv7yK179DKN@P@x5 zFOjv)%WO8NQr)TX5)L!_v51G)pjNHZc9c+||L&yGd7*tB0jn8dJa+h+NO*`!60A+K z_IlcI9DM2S)sd9$8{4By453d$XXew_=cZJ8=dJq5iQ&7VC=j%yje$H84ON1byk2X% zdu$m{^x*Y)xXx469yeU~;7+;5trkReyx8dn%Y1B%oZRGEt8_YXdd7*@{t!$q7Xot} zyJImEdJ`2a?=-0|e~PppN=(Ofc#ko2-o;iRb5w)pC6X@am7@JLuW%}v<6IR6J6koq zf#0FFkdN2+lV8sfTU-x1HIl7EeQPX|6j-0^cnZJBz$BY_DB7*-e0xibEZX1Zd^bmM zX?Jd1F|*Rl4^>*OFUi;=H9T?3q;E29i$EHYBlt&zCWg>Y^aK|&FzxxvChQ-9n-*~V zb92sqt4s)}tVHYVlx(NmR)n~_v(eDeLL!q~R$md)RkM3 z0KPtMT#{}c|u$QkRk2V@$dC1T`+#;4Drkb&HE@tXR z;H<3W;Naw-0;fXr%!R(iU2J#c%e1|TNyF9QJI0lb71Y!uj5sM3OERlJK{}6teF5t7 zh36sjY~bn4W+ZkhcCq^XNYk$$GnVG6C}xp!ED=^=SXnErb(AlT#knT1ED*_)8nY&A zn9wr$#!6ajjNnO}=}xY$JT`NUi1&ch!eXJ8y%9*W-dS3{I;Cd<<13b%{*neJ0mbxG zIQ%j*Ga~9fJf9mav!`?&+0+@`#f2#6oWbDU zQdjm$AZcYY9jB=yGx=_}Sc5_F04GK|+e1Fzn@$+`ke7p+$ya06)D6j2p#G4Mm$=fh zI(2n`P3enPY|H2Xukk&f^Vcjf(_<5^Sf#G@y7E^`wZBoA`Agl$YQQ7mqQt-GHP=)e zc?gSt>r4I3A6{=|gqwXsyo>8qGoPa0T;}XkxOKc9k?79GpDZ*6Myc*yt)|XT1NBbP z6_K0#O$PB;iwi8ChA}LDA3KtHk9F1+oeH z@XW+vyPH^)r4U3tgKxh7PWAryo>*OkQK}BBs=Nked;+v(=w`UVtFBk^mdVt7s21$QCD?+atpTv_Wp5s z0R6$sl$(gm1p`y66!mR>tC|)hzo~?JkgQH!B-)WlwxD9Abyw!lX%adLH`I9|Vpq5J z=?7M|$)@)l*DhAm{0^Z2n;pGQzA?id#NyO!=v~{bhYlpW7rRSY7M=MmxC)qI%4T%? z(5Y&Duw3UwWHpuFcIu3hX+3@0S@OD?goH1V&yqvWsJ$#U-tU|i=+3MuFjz@&^z{o9 zRHNA9N$P86q-D>N(?M}&33-t1m=_t>KAT!;v#GB=A(5I%ZZwru!gR~$0fl=Zv_ri) zI?BB{%Sk_u3F|vt)@JW_w6|CD@cP33t1s9Lz<45l&-c9hvn3AOMa6;fX@JUSo3fIA zAhzc+Ac7r2UqgD=jbJgFQSbxJ*BjQ#)B4~-`{<)*1@^zHE?5yYJugn33qk4Z_M#u< zX6dKk|A#0%~y;7DPb0ENMGqgF99+26Y?x}nAmD=)UbyUmiN z>O1c(QNsM*zQ#NXY4VydoZH)d_pl`FVX)!Xv_?8pqmNgns3|!3+Tr+oDI%j@^I3`2 z<eO7!^CyIoor{x&bmVWn&tHEiTI<0gvL{1i56e`EQJ%L-!&r$V zBI+~Fo1kamCu_bx*H093W}abRCH(ct-V5RyRTFpE@GK!Hy}>T?&934C%lrvXvSR6g zCQ}h5j12vNN0m@0_geW_ynOEr)xC1WT!@ir>m`%P{p{)%s%&8wODd24x2YU*d* zikE*i8{8ALBseDK>P{cl#dqn%%?9k~xDL*^txmN(Fcj?wQ}7!jpp$cG6=5!Yoi1DU z_dwg~_@3^!Ws0SunrSaO@kxSU0*$1b1B@x0#okjd=$4(N;}q2h?^ zd^8nFd9+lC9M5vYp(y++I|II#@w{Q9HhIU6aB-MHbz51kwMASv&BtcZ8FYQhYf9j& zS7L;0akI;0hghfq7UsqYd=O|y?0fynK}Ve}jjsE=6MF8O7H9n=eB{?E6OU;yDuD-o zyb-xXUyX{oyUT^|5(}p=!6?I7OHcGUj|5Rw0QaurfI@XR7Ug%2C(d{&qHcO6TEmsq z)j`uCk-_!nB&U1YEbc#orgdasb&u z0<0DUctAAB&_|w&i@4SiQGZ>Rtbz8N9QTh=;r<_cm71RB>r5*ss3+cZB&{5-Vqj6w zNRZ))b#zF8h4t5`G)m;P2RjloxxLen;0*U4cyCb`qWjXdOfg?t*#6#DM!pp$5yN$o z_2N9k>K%N;`Fi^5up`^bCI9z4!Z?S@sx(ZydB}~aVFHdfCV`*RMy&GuOe^p;LDT zOTM@8fa+?D&Mv9SW#mukbDl-*WVdg4oz{UqV@C7=EAR;`id=W{;}%x2ajjM0i(?NKaL8qz865u*{6j} zg7|mL8T;WW{TfE9Uu+NRP`^9Ep6I^CC_@!gv7k3}y6Q$3=A1Bnl{szz@~dd0 zwu#0=Yx&)(PrR<@MaZSTB)p3N&`AyEO5Z!cfpMuF7xozknzglTyEH5hng3Kv{XgUp zu%rxhT;T5LEDZ8t|G3;G<_{e;_E*RQ5SEO0kAFBZuYQRPXi_TV&BxTplq$fvrmHj1_6d4E5^)3EcYrK2x+H8=KM+ z9av3TT=4Pc0giIOFFH1yaXI{RA^sBs00!{((EtWrGL_?mp90m`a-cVaNX6Ni^Uhq8 zSB(6)9?)*M^|kK}MsabmI}b|c8v*CHkB|BP2_gSK>+zT!g&9zg=sl+b{`FkvZ4&C= zHk%JvfEods=|61lzYZIJ5dLFq4N%}ye>MU>u&S|yZz$o>T9ob|7wdj1#q7^h0Os`n z{33P$t~_v3{YvPW8z)>kY(Zd9%LhHWlDkU|;!y{oi4!lR6vhS#0Q>^bDmV)te8eu5 z&bf30X=oSj-_1QA6p_t4qcwjl!pT7?uII=Hm0tAM&(r*ig7nSNnIYm z*2i-bTnNyrU_SAnF)W7~?0a$?5b(~V) z@bj(ax(K(}_~XAQzUTTEIhF3bOk2IJZYsZm!1t^3rjDxI{?Ef_Mf=`uv_xv6;hU^8y8CzawQ@ zGj-f{cLQ*#6^6Zl-tj;`4OJ1APpQC6@s3^fqLaz<+<^q6TPTXh95BmMNHLA$*?N>h ziqP|Wptpx5eK5|eP=bxk*`x-_(SlD z7;%jKs2MFLCdQHC;O{jP>!W)I(AaSZ^-j!Xss9VG{;%yq&yCQykaDGEj~pDA#GX(U z5Dv-bbp;# z7+{!!@dmcNMgLNv=-&P<(f|3{^Oi4kT4F%$?YG(ApTCe`VY)`W>tSMI4+G|&?J_?p z5n#{!NRp0=QW0kKIWD!WOWzPK(1`B0GGkV9$Vj;!MGwv5woEuJ zN$@>JOsBpVW0dJ*AYg_Z6=^~5T`$>gtIQ%7q~~IwN;V0xv7IGi4tr~BPl5UB+dd}x zOn#=Y6``kD7B~#&-{RsB#l^)JNPbOEYaTvhX7_^s&i+-eW)(eui<${U7v(1NJmux( zpBuz0I2jmF7ZOeBPsHUk--d;SjpiAO*8SssJbG-y{~ujn9aUBLZmmcoozfw2XbvSJ z(ukCFH%NDPH%N%IbT=HjJCyG3E(w7{!?)4*ckla+d+$FC21C!;d+oKKn9rPZQ4v!7 z-Q@psYxe`3G$Cmnt6Yq*&Se>Qe!sTkw3v5f)Ane*TE$fS9|nHBS~>UWD@jWru1g>Z5USUY3AX;>_F0Ehst$YLWj0pj<1@eQ8|p1Y1sh8e%0$=b7 z0DQ(gIzG=`(PSv%{aLB5+M5AXKntUWOx7e&-H5 z{VV-j{)S91Y0QRYmb)en``I^6JfFeQRR z4$&QDD7Rsdf{g#bqsZ1L5rdb4?oltcfJBCisuM>a`U(?%p*A4kp?%RA}0b zu83U3DJ*zIi*=An|3Cw@-)<&KJeHzwQY}R&&Oud2i)XiWJO|r#t4WPoiBr2`&98d5 zy9rX|V*+I53Pc&ke+ti>&|h{w`fatf4qOsVSs+lknGyiR7S5FVX0?6z`8Tg%J?BmL zGsBnn7~JhHo9zNUjy(EHh&-EHwv;csx?CBh-ew~@NkI@fId~z~4z9Nz3C!x!A{01F zqgfb5QoylhK7NqRWN2=JPSEbIi6Lj{#vNj&b;~u)OFb)haHhs;hcKsKy>hS&8XB2C z8LFzr85PcFxx`$NzgdPl{TWgwwReO`!2hTy{>elj6<`fHJsaYLb^{E5DZaD3z^U>% z%z^m4jJ!i=U1Xz?X(@`-J`ws}mq{4Tu&=wrs1Z%ipg%bHbHGvKFjQza|3KS+Hvq#B z-!01ghRgSeNz7jZSEs@lBErO2qIkftLxGeDVQk&&}3XHdVWxGKR!10H_ei>du`k`jiDZq+t^Qi0_JTABRY;*@4IYP=>W63Dat3<4bFsKv!$UrYF#^~1n*8H)4WsE{EzgNGxf2UOnN*P z#lmL~1dVlx!mV#u-;1hgQbtK*3gI)WJ_Ak$G4z?vknc=PGx1G|#zNwLBQ?c)z}`{& zW(7T>@ww!iww}w=;Ln(5K*GB{Na&N0(k8l(b-vg&vI|qg<@VFll zOC|AejvU_I-|OAa*YK`H1Hp4wF7dsyRT>|w0btX$y1Cgs@CDL67=>{&G@~Qz50C1y z(ice zu3fT$q3O@o-I;nW_j3>`7Hqh0OhEV06r6>H#ccG0f5;CL;K(LhaYE9Fz&{<<_7g08 zgT(;X4TNF=x85#Z5@++bSdH)B#q8)bUB2^Zb0=K+Pag2}6f*N~pJr{W`#{e5+C~B| zGiX25f0A}G>|&JuVh+B=MOh9hbN!k@xd4$nX#2wb#6sB04aYJHM`N#+8NK<;Rf4x5_k|mA?$LS>iijRJrZOAoLYwE=jYeG&U+h- zP6A_YZl1Q1t-|7R#d_?>!kNrwigm8<$f^Zcsx7~Ir%X?OQah#~BPbx?v&hHJjtwQ_ zCMTOf`@2>+OivAFyz|%8U%$W;8R|93MLQaGMsGEN<78{3bO3mey!oM51d5L2L6MWH zZ$PE@b0@hRp+*w<(Zu4hydzt}(JRZ^`2oFi!wUaFe8?dP?AZn*lOV9Xu)jnmpgJi1 z%?)~4fL`8q^6Hq1@(8VD@$GQVLjf2Q!~{!x_)D!BBZ7el`i3B234O=P`8;A}VB&>^ zCFcmc2PPQ_c5yjR9HuXpVEfV#E-^8OP7>{F8bP~Cw?zt-gd*7nJ8C{7oK-CG0EXWe zT|42A-&BQPCB4GHa%=n1Co3;w0@!_cweoqm?7e!0L8#0&2dh{P51Q9UMn>~3Ikae% z;s5(;X8h@;c#Lx~8jlCfxIOf=(jxQGR}jmFlUIiHrKH3V@DuNEoV0b)&6h3_N`3aV zQC;5)!x#$&j7~?~bofMWxIR7xX$QnD&~7IA2L|FYy128bYRvzxT*nYP?Z%z;4)05i z?t7!B_RdwuatAo^RoB><7XQ85Ib!4GAsre1)Udb_QYaGt-Tr7H_R7p<*Te*Nt;KwI zamJ6C26L6E{e$Tey<^(qQ#N5CP(1%gfZkT0F(C5`km0`;IU?)JFQLNco11HOWT>yN zKgqV;=Nn?0r41hFw|U-N7etwC_)`%I_Q{7w7o8)XCrhM@#mI9#FpA=Q_Wk%Z2mSzBf0JVp-Kr6xG@84v38 za**>!#GzbiAroelc?O*)nBf^GOz{gZ-|#&_GkTE^q6Y!G*47BE%MB3CPAaN7{H)}9 zHXb6m=a``9uy^+!9q}3k&#~WpBj;k)c2sQT)7G`l$COea<@G7pC75!HRda!r!W4Ru z^vw8L#HY!g<;Q9`X^mQ9HhPWM&{r{`g0~=fvOgG4rOXrFF{4Tspzkr_%8xc)iCnrh zgR{KXrpPzfOs4JEjnLpNDGuR;bgrk13A>a)`*tGCYJ)LbwtxOY5k?gKirb?s^-9f@ zH^@}kDahl~qHE0n#~c=R6pAEb>93WSO$a!jr{q!7^YsqfSzNzT;Hee@XTfImY<)rJ z4^YULDVCODIPQiR_;`mKxLvkfu9mkwPSblsoUIeDIuPvAC@63ktX3c|T2+(X-z%4> zVscd^X7KS5Wq6$J0vnr z<}Fxa5(fYLre5IaI%;kX95(hUMPq7Y*u7VKgM@UNHKc}EzA+yFWG$wava!#fS*aMj zMu^?mD=O(|pr9+@SW#WEI(5uer}OshwewH2NWL#5)?No+F_Lxk75`o;-=7%U$Pg%d z2)>Y`Jbdt^?tUF0kZQ)1D7lC!H8}1eTV!PU)^XO&rhI(_!M{wqe31vnyFxWHeh}s? z$xSO$ZOKag1?TGr+-^#o()aig_tK=a!)uE*?@un56lAByP|~cq2t1Y!Od_%?0!BNu z@`bD1mY$1loy|Z6Z8ldhz7fEaDisSG&>-_GWize1fVI$hUab7;CwikmY$A>+B)WzM z*B+k0EI107?s3c@4y!!eVKeKrGNO^xvQdlW;EsiI3v@|OaRBvFY3O$jk&!Sl_A`a)QpyCNT^`mL+U3L#Uzf~WGy2` zf%XttNhyc7!#);w>MWT8=}`k%)lWz$DX^(gR~;{Ll(-)cNDTwiZu`j*Z$+f+&oj+E z^0vQWn9&QG{o!bW$o@0}sc}M}-s@Nq8N=h<8)y|O6*&d9MDdRa>Sr|QTG?^=y!E(l z&-bs)ManyYVCeBHjT8~U?8*wtEC+1w%V2{%~kHq(V#-&Me`1G1il<7G6CLpJ*K zrVr;D!_GFn&n{+0GX(v4uM;5#JD*g4_u#7=9v;TKA3+VK#rdXKWQi7PuKgT7%@(T>S!#Q{M(Az5 zEvqCX!TyVS0Nf>t>S%#%hBXK#J4B$|&1-T}~gJO@iY7(&=;I1Te5ex3<-vd*Dsdz;-(^h08C zJN_>B3Vs}V^-AyV4_&p`lA9j3`PK`zgVf<~!YQI(n4^1j*Xh4K;@5bDgT`%E^;>u~ zZ%nd5b9Gb9k`hh3wjVp~4Kk9Ag>CF?{QDla1RR7|HR~J5^uGzMUEuR=Oi`^LwfCoP zbmytx?hbE6%;?PYYxJ}}G?mc$@G4uW6KSnD?EFI0(d7P!sV@qJeQVO8@di5;o2 zFy*bE!)4MIMz?17t|V>-OtmF1;=Zywo@T1*;=5Y3D+DPaiPwv|2R7&9JXcZowA8#Z zB#(G^HamqZ6g*&6`thdHUo*r!9IkOQ4K@a3nhl<+)}Hi?OR&Isi<#r!_+MAelBo-J zQ2Y+i)G891qF1^)HGqoUF1dI3cxMz+<48mJda-->VZaX{zP>T0PxRq}$qBBXIB8BpLg;YkSrZUy@UT^Go_$vy?)xM_T*CBJtudE;aLfxz7=w$cVTSQsE zZNY*Y`>yD6En7@ecDhGC8DD*a2h62Bt$dhd)-h)cc0MpQ-NV2pN-$;uE--O`NfMfJ zi!M9K#nqr#3WFx|fDsiIYRDYJ9$~4zevl-I$hp%<$-%%N>C{$VanPCESKECHR~~HP z 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%0D5+!Ag7m}Bf3OtB4m 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 >*Ag_s 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 z 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 WcfQcKi7ya Date: Sun, 9 Jul 2023 11:11:30 +0300 Subject: [PATCH 2/8] Update docs --- README.md | 2 +- docs_md/01-components.md | 2 +- druid/base/button.lua | 39 ++++++++++++++++------------ druid/base/text.lua | 2 +- druid/custom/rich_text/module/rt.lua | 2 +- 5 files changed, 26 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index c2fd370..f80fe74 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/insality/druid/ci-workflow.yml?branch=master)](https://github.com/Insality/druid/actions) [![codecov](https://codecov.io/gh/Insality/druid/branch/master/graph/badge.svg)](https://codecov.io/gh/Insality/druid) -**Druid** - most powerful Defold component UI framework. Use basic and extended **Druid** components or make your own game-specific components with ease to make stunning and customizable GUI in your games. +**Druid** - powerful Defold component UI framework. Use huge list of embedeed **Druid** components or make your own game-specific components with ease to make stunning and customizable GUI in your games. ## Setup diff --git a/docs_md/01-components.md b/docs_md/01-components.md index 892b8d1..16c30b3 100644 --- a/docs_md/01-components.md +++ b/docs_md/01-components.md @@ -133,7 +133,7 @@ Usually, Place _view_node_ and as children add _content_node_: - *on_scroll_to* (self, position, is_instant) On scroll_to function callback - *on_point_scroll* (self, item_index, position) On scroll_to_index function callback - You can adjust scroll content size by `scroll:set_size(node_size)`. It will setup new size to _content node_ -- You can enabled or disable inertion mode via `scroll:set_intert(state)` +- You can enabled or disable inertion mode via `scroll:set_inert(state)` - You can adjust extra stretch size via `scroll:set_extra_stretch_size` - Multitouch is required for scroll. Scroll is correctly handling touch_id swap while dragging scroll diff --git a/druid/base/button.lua b/druid/base/button.lua index d13bed5..566336b 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -245,7 +245,7 @@ end --- Component style params. --- You can override this component styles params in druid styles table +-- You can override this component styles params in Druid styles table -- or create your own style -- @table style -- @tfield[opt=0.4] number LONGTAP_TIME Minimum time to trigger on_hold_callback @@ -270,13 +270,13 @@ function Button.on_style_change(self, style) end ---- Button component constructor +--- @{Button} constructor -- @tparam Button self @{Button} --- @tparam node node Gui node --- @tparam function callback Button callback --- @tparam[opt] table params Button callback params --- @tparam[opt] node anim_node Button anim node (node, if not provided) -function Button.init(self, node, callback, params, anim_node) +-- @tparam string|Node node Node name or GUI Node itself +-- @tparam function callback On click button callback +-- @tparam[opt] table custom_args Button events custom arguments +-- @tparam[opt] string|Node anim_node Node to animate instead of trigger node +function Button.init(self, node, callback, custom_args, anim_node) self.druid = self:get_druid() self.node = self:get_node(node) self.node_id = gui.get_id(self.node) @@ -284,7 +284,7 @@ function Button.init(self, node, callback, params, anim_node) self.anim_node = anim_node and self:get_node(anim_node) or self.node self.start_scale = gui.get_scale(self.anim_node) self.start_pos = gui.get_position(self.anim_node) - self.params = params + self.params = custom_args self.hover = self.druid:new_hover(node, on_button_hover) self.hover.on_mouse_hover:subscribe(on_button_mouse_hover) self.click_zone = nil @@ -297,7 +297,7 @@ function Button.init(self, node, callback, params, anim_node) self._check_function = nil self._failure_callback = nil - -- Event stubs + -- Events self.on_click = Event(callback) self.on_pressed = Event() self.on_repeated_click = Event() @@ -451,6 +451,8 @@ end --- Get button enabled state. +-- +-- By default all Buttons is enabled on creating. -- @tparam Button self @{Button} -- @treturn bool True, if button is enabled now, False overwise -- @usage @@ -503,7 +505,7 @@ end --- Set function for additional check for button click availability -- @tparam Button self -- @tparam[opt] function check_function Should return true or false. If true - button can be pressed. --- @tparam[opt] function failure_callback Function what will be called on button click, if check function return false +-- @tparam[opt] function failure_callback Function will be called on button click, if check function return false -- @treturn Button Current button instance function Button.set_check_function(self, check_function, failure_callback) self._check_function = check_function @@ -511,16 +513,19 @@ function Button.set_check_function(self, check_function, failure_callback) end ---- Set buttom click mode to call itself inside html5 callback in user interaction event --- It required to do protected stuff like copy/paste text, show html keyboard, etc --- The HTML5 button doesn't call any events except on_click event +--- Set Button mode to work inside user HTML5 interaction event. +-- +-- It's required to make protected things like copy & paste text, show mobile keyboard, etc +-- The HTML5 button's doesn't call any events except on_click event. +-- +-- If the game is not HTML, HTML html mode will be not enabled -- @tparam Button self --- @tparam[opt] boolean is_html_mode If true - button will be called inside html5 callback +-- @tparam[opt] boolean is_web_mode If true - button will be called inside html5 callback -- @treturn Button Current button instance -- @usage --- button:set_html5_user_interaction(true) -function Button.set_html5_user_interaction(self, is_html_mode) - self._is_html5_mode = is_html_mode and html5 +-- button:set_web_user_interaction(true) +function Button.set_web_user_interaction(self, is_web_mode) + self._is_html5_mode = is_web_mode and html5 return self end diff --git a/druid/base/text.lua b/druid/base/text.lua index 5d7d110..286295f 100755 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -1,7 +1,7 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Component to handle all GUI texts. --- Druid text can adjust itself for text node size +-- Druid Text adjust itself for text node size -- Text will never will be outside of his text size (even multiline) -- @module Text -- @within BaseComponent diff --git a/druid/custom/rich_text/module/rt.lua b/druid/custom/rich_text/module/rt.lua index 5f3d309..b9c4d58 100755 --- a/druid/custom/rich_text/module/rt.lua +++ b/druid/custom/rich_text/module/rt.lua @@ -486,7 +486,7 @@ function M.adjust_to_area(words, settings, lines_metrics) end adjust_scale = adjust_scale + step - local lines = M.apply_scale_without_update(words, settings, adjust_scale) + lines = M.apply_scale_without_update(words, settings, adjust_scale) is_fit = M.is_fit_info_area(lines, settings) if i == M.ADJUST_STEPS then From eca76b12d146131dbd536227213626d2b454f4f8 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 9 Jul 2023 21:47:14 +0300 Subject: [PATCH 3/8] Update docs --- druid/annotations.lua | 71 ++++++++++++++++++++---------------- druid/base/back_handler.lua | 18 ++++----- druid/base/blocker.lua | 28 +++++++------- druid/base/button.lua | 12 +++--- druid/base/scroll.lua | 28 +++++++++++--- druid/base/static_grid.lua | 28 ++++++++++++-- druid/base/text.lua | 33 ++++++++++++++--- druid/const.lua | 1 - druid/extended/lang_text.lua | 22 +++++++---- druid/extended/progress.lua | 27 ++++++++++---- 10 files changed, 175 insertions(+), 93 deletions(-) diff --git a/druid/annotations.lua b/druid/annotations.lua index 159a221..4312422 100644 --- a/druid/annotations.lua +++ b/druid/annotations.lua @@ -42,8 +42,8 @@ function druid.set_text_function(callback) end ---@class druid.back_handler : druid.base_component ----@field on_back druid.event @{DruidEvent} function(self, [params]) . ----@field params any Params to pass in the callback +---@field on_back druid.event @{DruidEvent} Event on back handler action. +---@field params any Custom args to pass in the callback local druid__back_handler = {} @@ -147,15 +147,21 @@ function druid__base_component.component:set_template(self, template) end ---@class druid.blocker : druid.base_component ----@field node node Trigger node +---@field node node Blocker node local druid__blocker = {} +--- @{Blocker} constructor +---@param self druid.blocker @{Blocker} +---@param node node Gui node +function druid__blocker.init(self, node) end + --- Return blocker enabled state ---@param self druid.blocker @{Blocker} ---@return bool True, if blocker is enabled function druid__blocker.is_enabled(self) end ---- Set enabled blocker component state +--- Set enabled blocker component state. +--- Don't change node enabled state. ---@param self druid.blocker @{Blocker} ---@param state bool Enabled state function druid__blocker.set_enabled(self, state) end @@ -164,9 +170,9 @@ function druid__blocker.set_enabled(self, state) end ---@class druid.button : druid.base_component ---@field anim_node node Button animation node. ---@field click_zone node Additional button click area, defined by another GUI Node ----@field hash node_id The GUI node id from button node ---@field hover druid.hover @{Hover}: Button Hover component ----@field node node Button clickable node +---@field node Node Button trigger node +---@field node_id hash The GUI node id from button node ---@field on_click druid.event @{DruidEvent}: Event on successful release action over button. ---@field on_click_outside druid.event @{DruidEvent}: Event calls if click event was outside of button. ---@field on_double_click druid.event @{DruidEvent}: Event on double tap action over button. @@ -183,15 +189,16 @@ local druid__button = {} ---@return hash The action_id of the input key function druid__button.get_key_trigger(self) end ---- Button component constructor +--- @{Button} constructor ---@param self druid.button @{Button} ----@param node node Gui node ----@param callback function Button callback ----@param params table Button callback params ----@param anim_node node Button anim node (node, if not provided) -function druid__button.init(self, node, callback, params, anim_node) end +---@param node string|Node Node name or GUI Node itself +---@param callback function On click button callback +---@param custom_args any Button events custom arguments +---@param anim_node string|Node Node to animate instead of trigger node. +function druid__button.init(self, node, callback, custom_args, anim_node) end --- Get button enabled state. +--- By default all Buttons is enabled on creating. ---@param self druid.button @{Button} ---@return bool True, if button is enabled now, False overwise function druid__button.is_enabled(self) end @@ -199,7 +206,7 @@ function druid__button.is_enabled(self) end --- Set function for additional check for button click availability ---@param self druid.button ---@param check_function function Should return true or false. If true - button can be pressed. ----@param failure_callback function Function what will be called on button click, if check function return false +---@param failure_callback function Function will be called on button click, if check function return false ---@return druid.button Current button instance function druid__button.set_check_function(self, check_function, failure_callback) end @@ -217,19 +224,19 @@ function druid__button.set_click_zone(self, zone) end ---@return druid.button Current button instance function druid__button.set_enabled(self, state) end ---- Set buttom click mode to call itself inside html5 callback in user interaction event It required to do protected stuff like copy/paste text, show html keyboard, etc The HTML5 button doesn't call any events except on_click event ----@protected ----@param self druid.button ----@param is_html_mode boolean If true - button will be called inside html5 callback ----@return druid.button Current button instance -function druid__button.set_html5_user_interaction(self, is_html_mode) end - --- Set key name to trigger this button by keyboard. ---@param self druid.button @{Button} ---@param key hash The action_id of the input key ---@return druid.button Current button instance function druid__button.set_key_trigger(self, key) end +--- Set Button mode to work inside user HTML5 interaction event. +--- It's required to make protected things like copy & paste text, show mobile keyboard, etc The HTML5 button's doesn't call any events except on_click event. If the game is not HTML, HTML html mode will be not enabled +---@param self druid.button +---@param is_web_mode boolean If true - button will be called inside html5 callback +---@return druid.button Current button instance +function druid__button.set_web_user_interaction(self, is_web_mode) end + ---@class druid.button.style ---@field AUTOHOLD_TRIGGER field Maximum hold time to trigger button release while holding @@ -713,12 +720,12 @@ local druid__lang_text = {} ---@return druid.lang_text Current instance function druid__lang_text.format(self, a, b, c, d, e, f, g) end ---- Component init function +--- @{LangText} constructor ---@param self druid.lang_text @{LangText} ----@param node node The text node +---@param node string|node Node name or GUI Text Node itself ---@param locale_id string Default locale id or text from node as default ----@param no_adjust bool If true, will not correct text size -function druid__lang_text.init(self, node, locale_id, no_adjust) end +---@param adjust_type string Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference +function druid__lang_text.init(self, node, locale_id, adjust_type) end --- Setup raw text to lang_text component ---@param self druid.lang_text @{LangText} @@ -834,7 +841,7 @@ function druid__pin_knob.set_friction(self, value) end ---@class druid.progress : druid.base_component ----@field key string The progress bar direction +---@field key string The progress bar direction. ---@field max_size number Maximum size of progress bar ---@field node node Progress bar fill node ---@field on_change druid.event On progress bar change callback(self, new_value) @@ -856,9 +863,9 @@ function druid__progress.fill(self) end ---@param self druid.progress @{Progress} function druid__progress.get(self) end ---- Component init function +--- @{Progress} constructor ---@param self druid.progress @{Progress} ----@param node string|node Progress bar fill node or node name +---@param node string|node Node name or GUI Node itself. ---@param key string Progress bar direction: const.SIDE.X or const.SIDE.Y ---@param init_value number Initial value of progress bar function druid__progress.init(self, node, key, init_value) end @@ -1210,9 +1217,9 @@ function druid__static_grid.get_pos(self, index) end ---@return vector3 The grid content size function druid__static_grid.get_size(self) end ---- Component init function +--- @{StaticGrid} constructor ---@param self druid.static_grid @{StaticGrid} ----@param parent node The gui node parent, where items will be placed +---@param parent string|Node The GUI Node container, where grid's items will be placed ---@param element node Element prefab. Need to get it size ---@param in_row number How many nodes in row can be placed function druid__static_grid.init(self, parent, element, in_row) end @@ -1308,11 +1315,11 @@ function druid__text.get_text_adjust(self, adjust_type) end ---@return number Height function druid__text.get_text_size(self, text) end ---- Component init function +--- @{Text} constructor ---@param self druid.text @{Text} ----@param node node Gui text node +---@param node string|node Node name or GUI Text Node itself ---@param value string Initial text. Default value is node text from GUI scene. ----@param adjust_type int Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference +---@param adjust_type string Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference function druid__text.init(self, node, value, adjust_type) end --- Return true, if text with line break diff --git a/druid/base/back_handler.lua b/druid/base/back_handler.lua index 227103e..15b8de6 100644 --- a/druid/base/back_handler.lua +++ b/druid/base/back_handler.lua @@ -6,13 +6,11 @@ -- Back Handler is recommended to put in every game window to close it -- or in main screen to call settings window. -- --- # Tech Info # --- --- Back Handler react on release action ACTION_BACK or ACTION_BACKSPACE --- -- # Notes # -- -- • Back Handler inheritance @{BaseComponent}, you can use all of its methods in addition to those described here. +-- +-- • Back Handler react on release action ACTION_BACK or ACTION_BACKSPACE -- @usage -- local callback = function(self, params) ... end -- @@ -22,7 +20,7 @@ -- @within BaseComponent -- @alias druid.back_handler ---- @{DruidEvent} function(self, [params]) . +--- @{DruidEvent} Event on back handler action. -- -- Trigger on input action ACTION_BACK or ACTION_BACKSPACE -- @usage @@ -30,7 +28,7 @@ -- back_handler.on_back:subscribe(callback) -- @tfield DruidEvent on_back @{DruidEvent} ---- Params to pass in the callback +--- Custom args to pass in the callback -- @usage -- -- Replace params on runtime: -- back_handler.params = { ... } @@ -45,13 +43,13 @@ local component = require("druid.component") local BackHandler = component.create("back_handler") ---- Component initialize function +--- @{BackHandler} constructor -- @tparam BackHandler self @{BackHandler} -- @tparam callback callback On back button --- @tparam[opt] any params Callback argument +-- @tparam[opt] any custom_args Button events custom arguments -- @local -function BackHandler.init(self, callback, params) - self.params = params +function BackHandler.init(self, callback, custom_args) + self.params = custom_args self.on_back = Event(callback) end diff --git a/druid/base/blocker.lua b/druid/base/blocker.lua index 3c232f9..4905280 100644 --- a/druid/base/blocker.lua +++ b/druid/base/blocker.lua @@ -1,19 +1,15 @@ -- Copyright (c) 2023 Maksim Tuprikov . This code is licensed under MIT license ---- Component to block input in special zone defined by GUI node. +--- Component to consume input in special zone defined by GUI node. -- # Overview # -- --- Blocker component необходим, чтобы блокировать пользовательский ввод в определенной зоне. --- Зона задается размером ноды, на которой находится компонент. Blocker блокирует ввод только для тех --- элементов, которые находятся перед ним in input stack (созданы до него). --- --- # Tech Info # --- --- Blocker consume input if `gui.pick_node` works on it. --- -- # Notes # -- +-- Blocker consume input if `gui.pick_node` works on it. +-- -- • Blocker inheritance @{BaseComponent}, you can use all of its methods in addition to those described here. +-- +-- • Blocker initial enabled state is `gui.is_enabled(node, true)` -- @usage -- local node = gui.get_node("blocker_node") -- local blocker = self.druid:new_blocker(node) @@ -21,7 +17,7 @@ -- @within BaseComponent -- @alias druid.blocker ----Trigger node +---Blocker node -- @tfield node node --- @@ -32,12 +28,12 @@ local component = require("druid.component") local Blocker = component.create("blocker") ---- Component initialize function +--- @{Blocker} constructor -- @tparam Blocker self @{Blocker} -- @tparam node node Gui node --- @local function Blocker.init(self, node) self.node = self:get_node(node) + self._is_enabled = gui.is_enabled(node, true) end @@ -65,11 +61,13 @@ function Blocker.on_input(self, action_id, action) end ---- Set enabled blocker component state +--- Set enabled blocker component state. +-- +-- Don't change node enabled state. -- @tparam Blocker self @{Blocker} -- @tparam bool state Enabled state function Blocker.set_enabled(self, state) - gui.set_enabled(self.node, state) + self._is_enabled = state end @@ -77,7 +75,7 @@ end -- @tparam Blocker self @{Blocker} -- @treturn bool True, if blocker is enabled function Blocker.is_enabled(self) - return gui.is_enabled(self.node) + return self._is_enabled end diff --git a/druid/base/button.lua b/druid/base/button.lua index 566336b..62b85ed 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -3,7 +3,7 @@ --- Druid Component to handle the user click interactions: click, long click, double click, etc. -- # Overview # -- --- The most generic and useful component you can use. Set any GUI node clickable and providing different callbacks. +-- The most generic component you can use. Set any GUI node clickable and provide different callbacks. -- -- # Notes # -- @@ -107,11 +107,11 @@ -- end) -- @tfield DruidEvent on_pressed @{DruidEvent} ---- Button clickable node --- @tfield node node +--- Button trigger node +-- @tfield Node node ---The GUI node id from button node --- @tfield node_id hash +-- @tfield hash node_id --- Button animation node. -- In default case equals to clickable node. @@ -274,8 +274,8 @@ end -- @tparam Button self @{Button} -- @tparam string|Node node Node name or GUI Node itself -- @tparam function callback On click button callback --- @tparam[opt] table custom_args Button events custom arguments --- @tparam[opt] string|Node anim_node Node to animate instead of trigger node +-- @tparam[opt] any custom_args Button events custom arguments +-- @tparam[opt] string|Node anim_node Node to animate instead of trigger node. function Button.init(self, node, callback, custom_args, anim_node) self.druid = self:get_druid() self.node = self:get_node(node) diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 3850e12..39c3b6b 100755 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -1,12 +1,30 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Component to handle scroll content. +-- # Overview # +-- -- Scroll consist from two nodes: scroll parent and scroll input -- Scroll input the user input zone, it's static -- Scroll parent the scroll moving part, it will change position. -- Setup initial scroll size by changing scroll parent size. If scroll parent --- size will be less than scroll_input size, no scroll is available. For scroll --- parent size should be more than input size +-- size will be less than scroll_input size, no scroll is available. +-- +-- # Notes # +-- +-- • Scroll by default style have inertion and extra size for strecthing effect. +-- It can be adjust via scroll style settings +-- +-- • You can setup "points of interest". Scroll always will be centered on closes point of interest. +-- It is able to create slider without inertion and points of interest on each scroll element. +-- +-- • You can adjust scroll content size by `scroll:set_size(node_size)`. +-- It will setup new size to _content node_ +-- +-- • You can enabled or disable inertion mode via `scroll:set_inert(state)` +-- +-- • You can adjust extra stretch size via `scroll:set_extra_stretch_size` +-- +-- • Multitouch is required for scroll. Scroll is correctly handling touch_id swap while dragging scroll -- @module Scroll -- @within BaseComponent -- @alias druid.scroll @@ -132,10 +150,10 @@ function Scroll.on_style_change(self, style) end ---- Scroll constructor +--- @{Scroll} constructor -- @tparam Scroll self @{Scroll} --- @tparam node view_node GUI view scroll node --- @tparam node content_node GUI content scroll node +-- @tparam string|node view_node GUI view scroll node +-- @tparam string|node content_node GUI content scroll node function Scroll.init(self, view_node, content_node) self.druid = self:get_druid() diff --git a/druid/base/static_grid.lua b/druid/base/static_grid.lua index 93e4e86..938f604 100644 --- a/druid/base/static_grid.lua +++ b/druid/base/static_grid.lua @@ -1,7 +1,27 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to handle placing components by row and columns. --- Grid can anchor your elements, get content size and other +--- Component to handle component's position by row and columns. +-- # Overview # +-- +-- # Notes # +-- +-- • Static grid have constant node size, so it possible to calculate node positions before placement. Nodes can be placed with gaps. +-- +-- • Static grid can shift elements on add/remove functions. +-- +-- • On _add node_ grid will set node parent to _parent_node_ +-- +-- • You can get array of position of every element for setup points of interest in scroll component +-- +-- • You can get size of all elements for setup size in scroll component +-- +-- • You can bind the grid to the scroll component for auto resize scroll content size +-- +-- • Pivot of parent_node matter for node placement +-- +-- • Prefab node used to get node size and anchor +-- +-- • You can point *position_function* for animations with _static_grid:set_position_function(node, pos)_ callback. Default - *gui.set_position()* -- @module StaticGrid -- @within BaseComponent -- @alias druid.static_grid @@ -81,9 +101,9 @@ function StaticGrid.on_style_change(self, style) end ---- Component init function +--- @{StaticGrid} constructor -- @tparam StaticGrid self @{StaticGrid} --- @tparam node parent The gui node parent, where items will be placed +-- @tparam string|Node parent The GUI Node container, where grid's items will be placed -- @tparam node element Element prefab. Need to get it size -- @tparam[opt=1] number in_row How many nodes in row can be placed function StaticGrid.init(self, parent, element, in_row) diff --git a/druid/base/text.lua b/druid/base/text.lua index 286295f..be74cd8 100755 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -1,8 +1,29 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to handle all GUI texts. --- Druid Text adjust itself for text node size --- Text will never will be outside of his text size (even multiline) +--- Component to wrap over GUI Text nodes. +-- # Overview # +-- +-- Druid Text provide different adjust modes. Text will be scaled down to fit into Text Node area size. +-- +-- # Notes # +-- +-- • Text pivot can be changed with `text:set_pivot`. The anchoring will be inside text node area size. +-- +-- • There is several text adjust types. Default DOWNSCALE. You can change the default adjust type in the Text style. See all adjust types in example here. +-- +-- - const.TEXT_ADJUST.DOWNSCALE - Change text's scale to fit into the text node size +-- +-- - const.TEXT_ADJUST.TRIM - Trim the text with postfix (default - "...", override in styles) to fit in the text node size +-- +-- - const.TEXT_ADJUST.NO_ADJUST - No any adjust, like default Defold Text Node +-- +-- - const.TEXT_ADJUST.DOWNSCALE_LIMITED - Change text's scale list downscale, but there is limit for text's scale. +-- Set minimal scale with `text:set_minimal_scale()` function. +-- +-- - const.TEXT_ADJUST.SCROLL - Change text's pivot to imitate scrolling in the text box. Use with stencil node for better effect. +-- +-- - const.TEXT_ADJUST.SCALE_THEN_SCROLL - Combine two modes: first limited downscale, then scroll +-- -- @module Text -- @within BaseComponent -- @alias druid.text @@ -188,11 +209,11 @@ function Text.on_style_change(self, style) end ---- Component init function +--- @{Text} constructor -- @tparam Text self @{Text} --- @tparam node node Gui text node +-- @tparam string|node node Node name or GUI Text Node itself -- @tparam[opt] string value Initial text. Default value is node text from GUI scene. --- @tparam[opt=0] int adjust_type Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference +-- @tparam[opt=downscale] string adjust_type Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference function Text.init(self, node, value, adjust_type) self.node = self:get_node(node) self.pos = gui.get_position(self.node) diff --git a/druid/const.lua b/druid/const.lua index aedd768..87013a1 100755 --- a/druid/const.lua +++ b/druid/const.lua @@ -52,7 +52,6 @@ M.MESSAGE_INPUT = { BUTTON_LONG_CLICK = "button_long_click", BUTTON_DOUBLE_CLICK = "button_double_click", BUTTON_REPEATED_CLICK = "button_repeated_click", - -- (value) TEXT_SET = "text_set", } diff --git a/druid/extended/lang_text.lua b/druid/extended/lang_text.lua index f30b48a..5be7f6e 100755 --- a/druid/extended/lang_text.lua +++ b/druid/extended/lang_text.lua @@ -1,7 +1,15 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to handle all GUI texts --- Good working with localization system +--- Component to wrap over GUI Text nodes with localization helpers +-- +-- # Overview # +-- +-- • The `druid.set_text_function` should be inited to get the localization by localization_id +-- +-- • The LangText supports up to 7 string format params, due the some issues with `...` args. +-- +-- # Notes # +-- -- @module LangText -- @within BaseComponent -- @alias druid.lang_text @@ -21,14 +29,14 @@ local component = require("druid.component") local LangText = component.create("lang_text") ---- Component init function +--- @{LangText} constructor -- @tparam LangText self @{LangText} --- @tparam node node The text node +-- @tparam string|node node Node name or GUI Text Node itself -- @tparam string locale_id Default locale id or text from node as default --- @tparam bool no_adjust If true, will not correct text size -function LangText.init(self, node, locale_id, no_adjust) +-- @tparam[opt=downscale] string adjust_type Adjust type for text. By default is DOWNSCALE. Look const.TEXT_ADJUST for reference +function LangText.init(self, node, locale_id, adjust_type) self.druid = self:get_druid() - self.text = self.druid:new_text(node, locale_id, no_adjust) + self.text = self.druid:new_text(node, locale_id, adjust_type) self.node = self.text.node self.last_locale_args = {} diff --git a/druid/extended/progress.lua b/druid/extended/progress.lua index ed08326..227e9f3 100644 --- a/druid/extended/progress.lua +++ b/druid/extended/progress.lua @@ -1,7 +1,18 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Basic progress bar component. --- For correct progress bar init it should be in max size from gui +--- Druid component to handle the progress bars. +-- # Overview # +-- +-- # Notes # +-- +-- • Progress Node should be fully filled in your GUI scene node. It will be the progress maximum size +-- +-- • Progress correct working with Slice9 nodes, it trying to set size by _set_size_ first, if it is not possible, it set up sizing via _set_scale_ +-- +-- • Progress bar can fill only by vertical or horizontal size. If you want make diagonal progress bar, just rotate node in GUI scene +-- +-- • If you have glitchy or dark texture bug with progress bar, try to disable mipmaps in your texture profiles +-- -- @module Progress -- @within BaseComponent -- @alias druid.progress @@ -12,7 +23,9 @@ --- Progress bar fill node -- @tfield node node ---- The progress bar direction +--- The progress bar direction. +-- +-- The values are: "x" or "y". (const.SIDE.X or const.SIDE.Y) -- @tfield string key --- Current progress bar scale @@ -95,16 +108,16 @@ function Progress.on_style_change(self, style) end ---- Component init function +--- @{Progress} constructor -- @tparam Progress self @{Progress} --- @tparam string|node node Progress bar fill node or node name +-- @tparam string|node node Node name or GUI Node itself. -- @tparam string key Progress bar direction: const.SIDE.X or const.SIDE.Y -- @tparam[opt=1] number init_value Initial value of progress bar function Progress.init(self, node, key, init_value) assert(key == const.SIDE.X or const.SIDE.Y, "Progress bar key should be 'x' or 'y'") - self.prop = hash("scale."..key) self.key = key + self.prop = hash("scale." .. self.key) self._init_value = init_value or 1 self.node = self:get_node(node) @@ -114,7 +127,7 @@ function Progress.init(self, node, key, init_value) self.slice = gui.get_slice9(self.node) self.last_value = self._init_value - if key == const.SIDE.X then + if self.key == const.SIDE.X then self.slice_size = self.slice.x + self.slice.z else self.slice_size = self.slice.y + self.slice.w From 894b62b888b35fb2bf28587d640b2a0f49173337 Mon Sep 17 00:00:00 2001 From: Insality Date: Sun, 9 Jul 2023 22:56:44 +0300 Subject: [PATCH 4/8] Update docs --- druid/base/button.lua | 22 +++++++++------- druid/base/scroll.lua | 39 ++++++++++++++++------------ druid/base/static_grid.lua | 29 +++++++++++++-------- druid/base/text.lua | 31 ++++++++++++---------- druid/custom/rich_text/rich_text.lua | 2 -- druid/extended/lang_text.lua | 10 ++++--- 6 files changed, 77 insertions(+), 56 deletions(-) diff --git a/druid/base/button.lua b/druid/base/button.lua index 62b85ed..f2d0a9e 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -1,20 +1,24 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Druid Component to handle the user click interactions: click, long click, double click, etc. --- # Overview # +--- Druid Component for Handling User Click Interactions: Click, Long Click, Double Click, and More. + +-- ## Overview ## -- --- The most generic component you can use. Set any GUI node clickable and provide different callbacks. +-- This component provides a versatile solution for handling user click interactions. +-- It allows you to make any GUI node clickable and define various callbacks for different types of clicks. -- --- # Notes # +-- ## Notes ## -- --- • The click callback will not trigger if between pressed and released state cursor was outside of node zone +-- • The click callback will not trigger if the cursor moves outside the node's +-- area between the pressed and released states. -- --- • If button have double click event subscriber and it is triggered, usual callback will be not triggered +-- • If a button has a double click event subscriber and the double click event is triggered, +-- the regular click callback will not be triggered. -- --- • 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` +-- • Buttons can be triggered using a keyboard key by calling the button:set_key_trigger method. -- +-- • To animate a small icon on a big button panel, you can use an animation node. +-- The trigger node name should be set as "big panel," and the animation node should be set as "small icon." -- @usage -- local function on_button_click(self, args, button) -- print("Button has clicked with params: " .. args) diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 39c3b6b..80b7841 100755 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -1,30 +1,35 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to handle scroll content. --- # Overview # +-- ## Overview ## -- --- Scroll consist from two nodes: scroll parent and scroll input --- Scroll input the user input zone, it's static --- Scroll parent the scroll moving part, it will change position. --- Setup initial scroll size by changing scroll parent size. If scroll parent --- size will be less than scroll_input size, no scroll is available. +-- The Scroll component is designed to handle scrollable content and consists of two nodes: the scroll parent and the scroll input. -- --- # Notes # +-- The scroll input represents the user input zone and remains static. -- --- • Scroll by default style have inertion and extra size for strecthing effect. --- It can be adjust via scroll style settings +-- The scroll parent is the movable part of the scroll and changes its position. -- --- • You can setup "points of interest". Scroll always will be centered on closes point of interest. --- It is able to create slider without inertion and points of interest on each scroll element. +-- The initial scroll size can be set by adjusting the size of the scroll parent. +-- If the size of the scroll parent is smaller than the scroll input size, scrolling is not available. -- --- • You can adjust scroll content size by `scroll:set_size(node_size)`. --- It will setup new size to _content node_ +-- ## Notes ## -- --- • You can enabled or disable inertion mode via `scroll:set_inert(state)` +-- • By default, the scroll style includes inertia and extra size for a stretching effect. +-- These settings can be adjusted using the scroll style settings. +-- For more details, refer to the scroll style settings. -- --- • You can adjust extra stretch size via `scroll:set_extra_stretch_size` +-- • "Points of interest" can be set up for the scroll. +-- The scroll will always be centered on the closest point of interest. +-- This feature allows creating a slider without inertia and with points of interest on each scroll element. -- --- • Multitouch is required for scroll. Scroll is correctly handling touch_id swap while dragging scroll +-- • The scroll content size can be adjusted using the scroll:set_size(node_size) method. +-- This method sets a new size for the _content node. +-- +-- • Inertial scrolling mode can be enabled or disabled using the scroll:set_inert(state) method. +-- +-- • The extra stretch size can be adjusted using the scroll:set_extra_stretch_size method. +-- +-- • Multitouch is required for scrolling. The scroll component correctly handles +-- touch ID swaps while dragging the scroll. -- @module Scroll -- @within BaseComponent -- @alias druid.scroll diff --git a/druid/base/static_grid.lua b/druid/base/static_grid.lua index 938f604..54554cc 100644 --- a/druid/base/static_grid.lua +++ b/druid/base/static_grid.lua @@ -1,27 +1,34 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Component to handle component's position by row and columns. --- # Overview # +-- ## Overview ## -- --- # Notes # +-- The Static Grid component allows for positioning components in rows and columns. +-- It provides a static grid layout with constant node sizes, allowing for pre-calculated +-- node positions and the option to include gaps between nodes. -- --- • Static grid have constant node size, so it possible to calculate node positions before placement. Nodes can be placed with gaps. +-- ## Notes ## -- --- • Static grid can shift elements on add/remove functions. +-- • In a static grid, the node size remains constant, enabling the calculation of node +-- positions before placement. Nodes can be placed with gaps between them. -- --- • On _add node_ grid will set node parent to _parent_node_ +-- • The static grid can automatically shift elements when nodes are added or removed. -- --- • You can get array of position of every element for setup points of interest in scroll component +-- • When a node is added, the grid will set the node's parent to the specified parent_node. -- --- • You can get size of all elements for setup size in scroll component +-- • You can obtain an array of positions for each element, which can be used to set +-- points of interest in a scroll component. -- --- • You can bind the grid to the scroll component for auto resize scroll content size +-- • The size of all elements can be retrieved for setting up the size in a scroll component. -- --- • Pivot of parent_node matter for node placement +-- • The grid can be bound to a scroll component for automatic resizing of the scroll content size. -- --- • Prefab node used to get node size and anchor +-- • The pivot of the parent_node affects the node placement within the grid. -- --- • You can point *position_function* for animations with _static_grid:set_position_function(node, pos)_ callback. Default - *gui.set_position()* +-- • A prefab node is used to determine the node size and anchor. +-- +-- • You can specify a position_function for animations using the +-- _static_grid:set_position_function(node, pos) callback. The default position function is gui.set_position(). -- @module StaticGrid -- @within BaseComponent -- @alias druid.static_grid diff --git a/druid/base/text.lua b/druid/base/text.lua index be74cd8..6372a79 100755 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -1,29 +1,34 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Component to wrap over GUI Text nodes. --- # Overview # +--- Component for Wrapping GUI Text Nodes: Druid Text -- --- Druid Text provide different adjust modes. Text will be scaled down to fit into Text Node area size. +-- ## Overview ## -- --- # Notes # +-- Druid Text is a component that provides various adjustment modes for text nodes. It allows text to be scaled down to fit within the size of the text node. -- --- • Text pivot can be changed with `text:set_pivot`. The anchoring will be inside text node area size. +-- ## Notes ## -- --- • There is several text adjust types. Default DOWNSCALE. You can change the default adjust type in the Text style. See all adjust types in example here. +-- • The text pivot can be changed using the text:set_pivot method. +-- The anchoring will be inside the text node's area size. -- --- - const.TEXT_ADJUST.DOWNSCALE - Change text's scale to fit into the text node size +-- • There are several text adjustment types available. The default is DOWNSCALE. +-- You can change the default adjustment type in the Text style. Refer to the example below to see all available adjustment types: -- --- - const.TEXT_ADJUST.TRIM - Trim the text with postfix (default - "...", override in styles) to fit in the text node size +-- - const.TEXT_ADJUST.DOWNSCALE: Changes the text's scale to fit within the text node's size. -- --- - const.TEXT_ADJUST.NO_ADJUST - No any adjust, like default Defold Text Node +-- - const.TEXT_ADJUST.TRIM: Trims the text with a postfix (default: "...", can be overridden in styles) +-- to fit within the text node's size. -- --- - const.TEXT_ADJUST.DOWNSCALE_LIMITED - Change text's scale list downscale, but there is limit for text's scale. --- Set minimal scale with `text:set_minimal_scale()` function. +-- - const.TEXT_ADJUST.NO_ADJUST: No adjustment is applied, similar +-- to the default Defold Text Node behavior. -- --- - const.TEXT_ADJUST.SCROLL - Change text's pivot to imitate scrolling in the text box. Use with stencil node for better effect. +-- - const.TEXT_ADJUST.DOWNSCALE_LIMITED: Changes the text's scale +-- with a limited downscale. You can set the minimum scale using the text:set_minimal_scale() function. -- --- - const.TEXT_ADJUST.SCALE_THEN_SCROLL - Combine two modes: first limited downscale, then scroll +-- - const.TEXT_ADJUST.SCROLL: Changes the text's pivot to imitate scrolling within the text box. +-- For better effect, use with a stencil node. -- +-- - const.TEXT_ADJUST.SCALE_THEN_SCROLL: Combines two modes: limited downscale first, then scroll. -- @module Text -- @within BaseComponent -- @alias druid.text diff --git a/druid/custom/rich_text/rich_text.lua b/druid/custom/rich_text/rich_text.lua index b84191f..54073ce 100644 --- a/druid/custom/rich_text/rich_text.lua +++ b/druid/custom/rich_text/rich_text.lua @@ -3,8 +3,6 @@ --- Druid Rich Text custom component. -- # Overview # -- --- --- -- # Notes # -- -- @usage diff --git a/druid/extended/lang_text.lua b/druid/extended/lang_text.lua index 5be7f6e..b1841fa 100755 --- a/druid/extended/lang_text.lua +++ b/druid/extended/lang_text.lua @@ -2,13 +2,15 @@ --- Component to wrap over GUI Text nodes with localization helpers -- --- # Overview # +-- ## Overview ## -- --- • The `druid.set_text_function` should be inited to get the localization by localization_id +-- • The initialization of druid.set_text_function is required to enable localization +-- using the localization ID. -- --- • The LangText supports up to 7 string format params, due the some issues with `...` args. +-- • The LangText component supports up to 7 string format parameters. +-- This limitation exists due to certain issues with using ... arguments. -- --- # Notes # +-- ## Notes ## -- -- @module LangText -- @within BaseComponent From bdacd4a440756416ede246f386ff39f17aebe376 Mon Sep 17 00:00:00 2001 From: Insality Date: Tue, 11 Jul 2023 21:29:12 +0300 Subject: [PATCH 5/8] Update docs --- README.md | 65 ++++++++++++++++++-------------------- docs_md/advanced-setup.md | 62 ++++++++++++++++++------------------ druid/annotations.lua | 8 ++--- druid/base/button.lua | 8 ++--- druid/base/scroll.lua | 5 +-- example/example.gui_script | 2 +- 6 files changed, 74 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index f80fe74..10e2ecf 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,14 @@ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/insality/druid/ci-workflow.yml?branch=master)](https://github.com/Insality/druid/actions) [![codecov](https://codecov.io/gh/Insality/druid/branch/master/graph/badge.svg)](https://codecov.io/gh/Insality/druid) -**Druid** - powerful Defold component UI framework. Use huge list of embedeed **Druid** components or make your own game-specific components with ease to make stunning and customizable GUI in your games. +**Druid** - powerful **Defold** component UI framework that empowers developers to create stunning and customizable GUIs by leveraging a wide range of embedded components or effortlessly designing their own game-specific components. ## 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: +To integrate the **Druid** extension into your own project, add this project as a [dependency](https://www.defold.com/manuals/libraries/) in your **Defold** game. Open your `game.project` file and add the following line to the dependencies field under the project section: **Druid v0.10.3** > [https://github.com/Insality/druid/archive/refs/tags/0.10.3.zip](https://github.com/Insality/druid/archive/refs/tags/0.10.3.zip) @@ -22,27 +22,27 @@ You can use the **Druid** extension in your own project by adding this project a Here is a list of [all releases](https://github.com/Insality/druid/releases). ### Input Bindings -**Druid** uses `/builtins/input/all.input_binding` input bindings. For custom input bindings see the Input Binding section in **_[Advanced Setup](docs_md/advanced-setup.md)_**. +**Druid** utilizes the `/builtins/input/all.input_binding` input bindings. For custom input bindings, refer to the Input Binding section in the **_[Advanced Setup](docs_md/advanced-setup.md)_**. ### Advanced Setup -In case you want to adjust **Druid** to your needs, you can use **_[Advanced Setup](docs_md/advanced-setup.md)_** section. +If you need to customize **Druid** according to your specific requirements, you can refer to the **_[Advanced Setup](docs_md/advanced-setup.md)_** section. ## Usage ### Basic usage -To use **Druid**, first you should create a **Druid** instance to spawn components and add Druids main functions: *update*, *final*, *on_message* and *on_input*. +To utilize **Druid**, begin by creating a **Druid** instance to instantiate components and include the main functions of **Druid**: *update*, *final*, *on_message*, and *on_input*. -All **Druid** components take node name string as argument. In in some cases you don't have the node name you can pass the `gui.get_node()` instead. +When using **Druid** components, provide a node name string as an argument. If you don't have the node name available in some cases, you can pass `gui.get_node()` instead. -All **Druid** and component methods are called with `:` like `self.druid:new_button()`. +All **Druid** and component methods are invoked using the `:` operator, such as `self.druid:new_button()`. ```lua local druid = require("druid.druid") -- All component callbacks pass "self" as first argument --- This self is a context data passed in `druid.new(context)` +-- This "self" is a context data passed in `druid.new(context)` local function on_button_callback(self) print("The button clicked!") end @@ -52,22 +52,22 @@ function init(self) self.button = self.druid:new_button("button_node_name", on_button_callback) end --- Final is a required function for a correct Druid workflow +-- "final" is a required function for the correct Druid workflow function final(self) self.druid:final() end --- The update used in progress bar, scroll and timer basic components +-- "update" is used in progress bar, scroll, and timer basic components function update(self, dt) self.druid:update(dt) end --- The on_message used for specific Druid events, like language change or layout change +-- "on_message" is used for specific Druid events, like language change or layout change function on_message(self, message_id, message, sender) self.druid:on_message(message_id, message, sender) end --- The on_input used in almost all Druid components +-- "on_input" is used in almost all Druid components function on_input(self, action_id, action) return self.druid:on_input(action_id, action) end @@ -79,19 +79,21 @@ For all **Druid** instance functions, [see here](https://insality.github.io/drui ### API Documentation -**Druid** has a lot of components and functions. To make it easier to use, **Druid** has a full API documentation with examples and annotations. +**Druid** offers a wide range of components and functions. To facilitate usage, **Druid** provides comprehensive API documentation with examples and annotations. + +Start reading the API documentation [here](hhttps://insality.github.io/druid/modules/Druid.html). -Start read the API documentation [here](hhttps://insality.github.io/druid/modules/Druid.html). ### EmmyLua Annotations [optional] -[EmmyLua](https://emmylua.github.io/annotation.html) - annotations for Lua. It's a great tool for Lua code autocompletion in editors like [VSCode](https://github.com/EmmyLua/VSCode-EmmyLua), [IntelliJ IDEA](https://github.com/EmmyLua/IntelliJ-EmmyLua). +[EmmyLua](https://emmylua.github.io/annotation.html) is a Lua annotation library. It is a useful tool for enabling Lua code autocompletion in editors such as [VSCode](https://github.com/EmmyLua/VSCode-EmmyLua) and [IntelliJ IDEA](https://github.com/EmmyLua/IntelliJ-EmmyLua). -Since the dependencies can't be processed by external editors, for use generated EmmyLua annotations you should copy the _druid/annotations.lua_ to your project. +Since dependencies cannot be processed by external editors, to use the generated EmmyLua annotations, you should copy the _druid/annotations.lua_ file to your project. -For EmmyLua it will be enough. Remember you can _restart emmylua server_ for refresh the changes, if something goes wrong. +For EmmyLua, this will be sufficient. Remember that you can restart the EmmyLua server to refresh the changes if something goes wrong. + +After the annotations are processed, you should specify the type of "Druid" in the "require" statement: -After the annotations is processed, you should point the type of Druid in requires: ```lua ---@type druid local druid = require("druid.druid") @@ -101,16 +103,12 @@ local druid = require("druid.druid") -### Advanced Usage - -If you looking for more advanced usage, see the [Advanced Usage](docs_md/advanced-usage.md) section. - ### Create custom components -If you want to create your own components, see the [Create Custom Components](docs_md/create-custom-components.md) section. +If you want to create your own components, refer to the [Create Custom Components](docs_md/create-custom-components.md) section in the documentation. -The custom components is the most powerful feature of **Druid**. You can create your own components with ease and use it in your game. +Custom components are one of the most powerful features of **Druid**. They allow you to create your own components effortlessly and utilize them in your game. ## Druid Components @@ -170,26 +168,25 @@ You can subscribe several callbacks to a single event. ## Details -- **Druid** input goes as stack. Last created button will be checked first. Create your input GUI component from back to front. -- Don't forget about `return` in `on_input`: `return self.druid:on_input()`. It is required if you have more than 1 acquire inputs (several Druid, other input system, etc) -- Druid automatically call _acquire_input_focus_ if you have input components. So you don't required to call it manually. -- If you want to delete a **Druid** component node, don't forget to remove it via `druid:remove(component)` +- **Druid** processes input in a stack-based manner. The most recently created button will be checked first. Create your input GUI components from back to front. +- Remember to include `return` in the `on_input` function: `return self.druid:on_input()`. This is necessary if you have multiple input sources (multiple Druid instances, other input systems, etc.). +- Druid automatically calls `acquire_input_focus` if you have input components. Therefore, manual calling of `acquire_input_focus` is not required. +- When deleting a **Druid** component node, make sure to remove it using `druid:remove(component)`. -[See full FAQ here](docs_md/FAQ.md) +[See the full FAQ here](docs_md/FAQ.md) ## Examples ### HTML5 Live Examples -Try the [**HTML5 version**](https://insality.github.io/druid/druid/) of the **Druid** example app +Try the [**HTML5 version**](https://insality.github.io/druid/druid/) of the **Druid** example app. -Each example page has a link to the example code directly, so it will help you to faster understand how to use **Druid** +Each example page provides a direct link to the corresponding example code, making it easier for you to understand how to use **Druid**. +### Code Examples -### Code examples - -See the [**example folder**](https://github.com/Insality/druid/tree/develop/example) for examples of how to use **Druid** +Refer to the [**example folder**](https://github.com/Insality/druid/tree/develop/example) for code examples demonstrating how to use **Druid**. ## Documentation diff --git a/docs_md/advanced-setup.md b/docs_md/advanced-setup.md index 1c1393b..c8b7463 100644 --- a/docs_md/advanced-setup.md +++ b/docs_md/advanced-setup.md @@ -1,29 +1,30 @@ -# Advanced Druid setup +# Advanced Druid Setup -## Input bindings +## Input Bindings -As default input bindings **Druid** uses the `/builtins/input/all.input_binding`. +By default, **Druid** utilizes the `/builtins/input/all.input_binding` for input bindings. **Druid** requires the following input bindings: -- Mouse trigger - `Button 1` -> `touch` _For basic input components_ -- Mouse trigger - `Wheel up` -> `mouse_wheel_up` _For scroll component_ -- Mouse trigger - `Wheel down` -> `mouse_wheel_down` _For scroll component_ -- Key trigger - `Backspace` -> `key_backspace` _For back_handler component, input component_ -- Key trigger - `Back` -> `key_back` _For back_handler component, Android back button, input component_ -- Key trigger - `Enter` -> `key_enter` _For input component, optional_ -- Key trigger - `Esc` -> `key_esc` _For input component, optional_ -- Touch triggers - `Touch multi` -> `touch_multi` _For scroll component_ +- Mouse trigger: `Button 1` -> `touch` (for basic input components) +- Mouse trigger: `Wheel up` -> `mouse_wheel_up` (for Scroll component) +- Mouse trigger: `Wheel down` -> `mouse_wheel_down` (for Scroll component) +- Key trigger: `Backspace` -> `key_backspace` (for BackHandler component, input component) +- Key trigger: `Back` -> `key_back` (for BackHandler component, Android back button, input component) +- Key trigger: `Enter` -> `key_enter` (for Input component, optional) +- Key trigger: `Esc` -> `key_esc` (for Input component, optional) +- Touch triggers: `Touch multi` -> `touch_multi` (for Scroll component) ![](media/input_binding_2.png) ![](media/input_binding_1.png) -## Change key bindings [optional] -If you have to use your own key bindings (and key name), you can change it in your *game.project* file. +## Changing Key Bindings (optional) -Here is current default values for key bindings: +If you need to use your own key bindings or key names, you can modify them in your *game.project* file. + +Here are the default values for key bindings: ``` [druid] input_text = text @@ -39,22 +40,22 @@ input_scroll_down = mouse_wheel_down ``` -## Input capturing [optional] +## 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")` +By default, **Druid** automatically captures input focus if any input component is created. Therefore, you do not need to call `msg.post(".", "acquire_input_focus")`. -If you don't need this behaviour, you can disable it by setting `druid.no_auto_input` field in _game.project_: +If you do not require this behavior, you can disable it by setting the `druid.no_auto_input` field in the _game.project_ file: ``` [druid] no_auto_input = 1 ``` -## Template name check [optional] +## Template Name Check (optional) -By default, **Druid** will auto check the parent component template name to build the full template name for component. +By default, **Druid** automatically checks the parent component's template name to construct the full template name for the component. It's used in user custom components. -If for some reason you want to pass the full template name by yourself, you can disable it by setting `druid.no_auto_template` field in _game.project_: +If, for some reason, you want to pass the full template name manually, you can disable this feature by setting the `druid.no_auto_template` field in the _game.project_ file: ``` [druid] @@ -62,47 +63,46 @@ no_auto_template = 1 ``` -## Stencil check [optional] +## Stencil Check (optional) -When creating input components inside stencil nodes, **Druid** automatically setup `component:set_click_zone()` on _late_init_ component step to restrict input clicks outside this stencil zone. -For example: button inside scroll stencil nodes. +When creating input components inside stencil nodes, **Druid** automatically sets up `component:set_click_zone()` during the _late_init_ component step to restrict input clicks outside of the stencil zone. This is particularly useful for buttons inside scroll stencil nodes. -To disable this feature add next field in your _game.project_ file +To disable this feature, add the following field to your _game.project_ file: ``` [druid] no_stencil_check = 1 ``` -## Code bindings [optional] +## Code Bindings (optional) -Adjust **Druid** settings, if needed: +Adjust **Druid** settings as needed: ```lua local druid = require("druid.druid") -- Used for button component and custom components --- Callback should play sound by name: function(sound_id) ... end +-- The callback should play the sound by name: function(sound_id) ... end druid.set_sound_function(function(sound_id) -- sound_system.play(sound_id) end) -- Used for lang_text component --- Callback should return localized string by locale id: function(locale_id) ... end +-- The callback should return the localized string by locale ID: function(locale_id) ... end druid.set_text_function(function(locale_id) -- return lang.get(locale_id) end) --- Used for change default Druid style +-- Used to change the default Druid style druid.set_default_style(your_style) --- Call this function on language changing in the game, +-- Call this function when the language changes in the game, -- to retranslate all lang_text components: local function on_language_change() druid.on_language_change() end -- Call this function inside window.set_listener --- to catch game focus lost/gained callbacks: +-- to capture game focus lost/gained callbacks: -- window.set_listener(function(self, event, data) druid.on_window_callback(event, data) end)) local function on_window_callback(self, event, data) druid.on_window_callback(event) diff --git a/druid/annotations.lua b/druid/annotations.lua index 4312422..f700ff7 100644 --- a/druid/annotations.lua +++ b/druid/annotations.lua @@ -231,7 +231,7 @@ function druid__button.set_enabled(self, state) end function druid__button.set_key_trigger(self, key) end --- Set Button mode to work inside user HTML5 interaction event. ---- It's required to make protected things like copy & paste text, show mobile keyboard, etc The HTML5 button's doesn't call any events except on_click event. If the game is not HTML, HTML html mode will be not enabled +--- It's required to make protected things like copy & paste text, show mobile keyboard, etc The HTML5 button's doesn't call any events except on_click event. If the game is not HTML, html mode will be not enabled ---@param self druid.button ---@param is_web_mode boolean If true - button will be called inside html5 callback ---@return druid.button Current button instance @@ -1008,10 +1008,10 @@ function druid__scroll.get_percent(self) end ---@return vector3 Available scroll size function druid__scroll.get_scroll_size(self) end ---- Scroll constructor +--- @{Scroll} constructor ---@param self druid.scroll @{Scroll} ----@param view_node node GUI view scroll node ----@param content_node node GUI content scroll node +---@param view_node string|node GUI view scroll node +---@param content_node string|node GUI content scroll node function druid__scroll.init(self, view_node, content_node) end --- Return if scroll have inertion. diff --git a/druid/base/button.lua b/druid/base/button.lua index f2d0a9e..9fcb62e 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -1,13 +1,13 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid Component for Handling User Click Interactions: Click, Long Click, Double Click, and More. - --- ## Overview ## +-- +-- # Overview # -- -- This component provides a versatile solution for handling user click interactions. -- It allows you to make any GUI node clickable and define various callbacks for different types of clicks. -- --- ## Notes ## +-- # Notes # -- -- • The click callback will not trigger if the cursor moves outside the node's -- area between the pressed and released states. @@ -522,7 +522,7 @@ end -- It's required to make protected things like copy & paste text, show mobile keyboard, etc -- The HTML5 button's doesn't call any events except on_click event. -- --- If the game is not HTML, HTML html mode will be not enabled +-- If the game is not HTML, html mode will be not enabled -- @tparam Button self -- @tparam[opt] boolean is_web_mode If true - button will be called inside html5 callback -- @treturn Button Current button instance diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 80b7841..0abd002 100755 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -1,6 +1,7 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- ## Overview ## +--- Component to handle scroll content. +-- # Overview # -- -- The Scroll component is designed to handle scrollable content and consists of two nodes: the scroll parent and the scroll input. -- @@ -11,7 +12,7 @@ -- The initial scroll size can be set by adjusting the size of the scroll parent. -- If the size of the scroll parent is smaller than the scroll input size, scrolling is not available. -- --- ## Notes ## +-- # Notes # -- -- • By default, the scroll style includes inertia and extra size for a stretching effect. -- These settings can be adjusted using the scroll style settings. diff --git a/example/example.gui_script b/example/example.gui_script index fded751..5e786c8 100644 --- a/example/example.gui_script +++ b/example/example.gui_script @@ -311,5 +311,5 @@ end function on_input(self, action_id, action) - self.druid:on_input(action_id, action) + return self.druid:on_input(action_id, action) end From 6ed48772a3adc1b5d98109baecacc2850da997b9 Mon Sep 17 00:00:00 2001 From: Insality Date: Tue, 11 Jul 2023 21:46:56 +0300 Subject: [PATCH 6/8] Update docs --- README.md | 2 +- druid/base/back_handler.lua | 4 +-- druid/base/blocker.lua | 4 +-- druid/base/button.lua | 4 +-- druid/base/scroll.lua | 4 +-- druid/custom/rich_text/rich_text.lua | 53 ++++++++++++++++++++++++++-- druid/druid.lua | 4 +-- druid/extended/lang_text.lua | 4 +-- druid/extended/progress.lua | 4 +-- druid/system/druid_instance.lua | 2 +- 10 files changed, 67 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 10e2ecf..392496e 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For all **Druid** instance functions, [see here](https://insality.github.io/drui **Druid** offers a wide range of components and functions. To facilitate usage, **Druid** provides comprehensive API documentation with examples and annotations. -Start reading the API documentation [here](hhttps://insality.github.io/druid/modules/Druid.html). +Start reading the API documentation [here](https://insality.github.io/druid/modules/Druid.html). ### EmmyLua Annotations [optional] diff --git a/druid/base/back_handler.lua b/druid/base/back_handler.lua index 15b8de6..93fe989 100644 --- a/druid/base/back_handler.lua +++ b/druid/base/back_handler.lua @@ -1,12 +1,12 @@ -- Copyright (c) 2023 Maksim Tuprikov . This code is licensed under MIT license --- Component with event on back and backspace button. --- # Overview # +-- # Overview # -- -- Back Handler is recommended to put in every game window to close it -- or in main screen to call settings window. -- --- # Notes # +-- # Notes # -- -- • Back Handler inheritance @{BaseComponent}, you can use all of its methods in addition to those described here. -- diff --git a/druid/base/blocker.lua b/druid/base/blocker.lua index 4905280..16a906e 100644 --- a/druid/base/blocker.lua +++ b/druid/base/blocker.lua @@ -1,9 +1,9 @@ -- Copyright (c) 2023 Maksim Tuprikov . This code is licensed under MIT license --- Component to consume input in special zone defined by GUI node. --- # Overview # +-- # Overview # -- --- # Notes # +-- # Notes # -- -- Blocker consume input if `gui.pick_node` works on it. -- diff --git a/druid/base/button.lua b/druid/base/button.lua index 9fcb62e..f21da7f 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -2,12 +2,12 @@ --- Druid Component for Handling User Click Interactions: Click, Long Click, Double Click, and More. -- --- # Overview # +-- # Overview # -- -- This component provides a versatile solution for handling user click interactions. -- It allows you to make any GUI node clickable and define various callbacks for different types of clicks. -- --- # Notes # +-- # Notes # -- -- • The click callback will not trigger if the cursor moves outside the node's -- area between the pressed and released states. diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 0abd002..294fd05 100755 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -1,7 +1,7 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Component to handle scroll content. --- # Overview # +-- # Overview # -- -- The Scroll component is designed to handle scrollable content and consists of two nodes: the scroll parent and the scroll input. -- @@ -12,7 +12,7 @@ -- The initial scroll size can be set by adjusting the size of the scroll parent. -- If the size of the scroll parent is smaller than the scroll input size, scrolling is not available. -- --- # Notes # +-- # Notes # -- -- • By default, the scroll style includes inertia and extra size for a stretching effect. -- These settings can be adjusted using the scroll style settings. diff --git a/druid/custom/rich_text/rich_text.lua b/druid/custom/rich_text/rich_text.lua index 54073ce..8bcc6e2 100644 --- a/druid/custom/rich_text/rich_text.lua +++ b/druid/custom/rich_text/rich_text.lua @@ -1,9 +1,15 @@ -- Copyright (c) 2022 Maksim Tuprikov . This code is licensed under MIT license --- Druid Rich Text custom component. --- # Overview # +-- # Overview # -- --- # Notes # +-- Heavily inspired by https://github.com/britzl/defold-richtext. +-- +-- Uses the same syntax for tags, but currently have less tags support. +-- +-- # Notes # +-- +-- • Nested tags are supported -- -- @usage -- local RichText = require("druid.custom.rich_text.rich_text") @@ -57,6 +63,49 @@ end -- @tparam string text The text to set -- @treturn table words -- @treturn table line_metrics +-- @usage +-- • color: Change text color +-- +-- Foobar +-- Foobar +-- Foobar +-- Foobar +-- +-- • shadow: Change text shadow +-- +-- Foobar +-- Foobar +-- Foobar +-- Foobar +-- +-- • outline: Change text shadow +-- +-- Foobar +-- Foobar +-- Foobar +-- Foobar +-- +-- • font: Change font +-- +-- Foobar +-- +-- • size: Change text size, relative to default size +-- +-- Twice as large +-- +-- • br: Insert a line break +-- +--
+-- +-- • nobr: Prevent the text from breaking +-- +-- Words inside tag won't break +-- +-- • img: Display image +-- +-- +-- +-- function RichText.set_text(self, text) self:clean() diff --git a/druid/druid.lua b/druid/druid.lua index 7132e5e..fffe0c5 100644 --- a/druid/druid.lua +++ b/druid/druid.lua @@ -1,7 +1,7 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid UI Component Framework. --- # Overview # +-- # Overview # -- -- Druid - powerful Defold component UI library. Use basic and extended -- Druid components or make your own game-specific components to make @@ -9,7 +9,7 @@ -- -- To start using Druid, please refer to the Basic Usage section below. -- --- # Tech Info # +-- # Notes # -- -- • Each Druid instance maintains the self context from the constructor and passes it to each Druid callback. -- diff --git a/druid/extended/lang_text.lua b/druid/extended/lang_text.lua index b1841fa..af36877 100755 --- a/druid/extended/lang_text.lua +++ b/druid/extended/lang_text.lua @@ -2,7 +2,7 @@ --- Component to wrap over GUI Text nodes with localization helpers -- --- ## Overview ## +-- # Overview # -- -- • The initialization of druid.set_text_function is required to enable localization -- using the localization ID. @@ -10,7 +10,7 @@ -- • The LangText component supports up to 7 string format parameters. -- This limitation exists due to certain issues with using ... arguments. -- --- ## Notes ## +-- # Notes # -- -- @module LangText -- @within BaseComponent diff --git a/druid/extended/progress.lua b/druid/extended/progress.lua index 227e9f3..ddd2081 100644 --- a/druid/extended/progress.lua +++ b/druid/extended/progress.lua @@ -1,9 +1,9 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid component to handle the progress bars. --- # Overview # +-- # Overview # -- --- # Notes # +-- # Notes # -- -- • Progress Node should be fully filled in your GUI scene node. It will be the progress maximum size -- diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index 7f1a45b..862586e 100755 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -6,7 +6,7 @@ -- -- For a list of all available components, please refer to the "See Also" section. -- --- # Notes # +-- # Notes # -- -- Please review the following API pages: -- From 23ac068f5198b8608500dcc50b3562f52ffc0dc3 Mon Sep 17 00:00:00 2001 From: Insality Date: Tue, 11 Jul 2023 22:23:48 +0300 Subject: [PATCH 7/8] Update docs --- druid.code-workspace | 1 + druid/annotations.lua | 2 +- druid/base/blocker.lua | 10 ++++-- druid/custom/rich_text/module/rt.lua | 46 ---------------------------- druid/custom/rich_text/rich_text.lua | 20 +++++++++++- druid/druid.lua | 2 +- druid/event.lua | 7 +++-- druid/helper.lua | 3 ++ druid/styles/default/style.lua | 36 +++++++++++++++++++++- 9 files changed, 72 insertions(+), 55 deletions(-) diff --git a/druid.code-workspace b/druid.code-workspace index dab8d24..ac43fbc 100644 --- a/druid.code-workspace +++ b/druid.code-workspace @@ -22,6 +22,7 @@ "input": true, "media": true, "build": true, + "docs": true, ".github": true, ".deployer_cache": true, "dist": true diff --git a/druid/annotations.lua b/druid/annotations.lua index f700ff7..8ede88e 100644 --- a/druid/annotations.lua +++ b/druid/annotations.lua @@ -161,7 +161,7 @@ function druid__blocker.init(self, node) end function druid__blocker.is_enabled(self) end --- Set enabled blocker component state. ---- Don't change node enabled state. +--- Don't change node enabled state itself. ---@param self druid.blocker @{Blocker} ---@param state bool Enabled state function druid__blocker.set_enabled(self, state) end diff --git a/druid/base/blocker.lua b/druid/base/blocker.lua index 16a906e..6ee9b26 100644 --- a/druid/base/blocker.lua +++ b/druid/base/blocker.lua @@ -10,6 +10,8 @@ -- • Blocker inheritance @{BaseComponent}, you can use all of its methods in addition to those described here. -- -- • Blocker initial enabled state is `gui.is_enabled(node, true)` +-- +-- • The Blocker node should be enabled to capture the input -- @usage -- local node = gui.get_node("blocker_node") -- local blocker = self.druid:new_blocker(node) @@ -33,7 +35,7 @@ local Blocker = component.create("blocker") -- @tparam node node Gui node function Blocker.init(self, node) self.node = self:get_node(node) - self._is_enabled = gui.is_enabled(node, true) + self._is_enabled = gui.is_enabled(self.node, true) end @@ -53,6 +55,10 @@ function Blocker.on_input(self, action_id, action) return false end + if not gui.is_enabled(self.node, true) then + return false + end + if gui.pick_node(self.node, action.x, action.y) then return true end @@ -63,7 +69,7 @@ end --- Set enabled blocker component state. -- --- Don't change node enabled state. +-- Don't change node enabled state itself. -- @tparam Blocker self @{Blocker} -- @tparam bool state Enabled state function Blocker.set_enabled(self, state) diff --git a/druid/custom/rich_text/module/rt.lua b/druid/custom/rich_text/module/rt.lua index b9c4d58..fa48fec 100755 --- a/druid/custom/rich_text/module/rt.lua +++ b/druid/custom/rich_text/module/rt.lua @@ -534,52 +534,6 @@ function M.tagged(words, tag) end ---- Split a word into it's characters --- @param word The word to split --- @return The individual characters -function M.characters(word) - assert(word) - - local parent = gui.get_parent(word.node) - local font = gui.get_font(word.node) - local layer = gui.get_layer(word.node) - local pivot = gui.get_pivot(word.node) - - local word_length = utf8.len(word.text) - - -- exit early if word is a single character or empty - if word_length <= 1 then - local char = helper.deepcopy(word) - char.node, char.metrics = create_node(char, parent, font) - gui.set_pivot(char.node, pivot) - gui.set_position(char.node, gui.get_position(word.node)) - gui.set_layer(char.node, layer) - return { char } - end - - -- split word into characters - local chars = {} - local position = gui.get_position(word.node) - local position_x = position.x - - for i = 1, word_length do - local char = helper.deepcopy(word) - chars[#chars + 1] = char - char.text = utf8.sub(word.text, i, i) - char.node, char.metrics = create_node(char, parent, font) - gui.set_layer(char.node, layer) - gui.set_pivot(char.node, pivot) - - local sub_metrics = get_text_metrics(word, font, utf8.sub(word.text, 1, i)) - position.x = position_x + sub_metrics.width - char.metrics.width - char.position = vmath.vector3(position) - gui.set_position(char.node, char.position) - end - - return chars -end - - ---Removes the gui nodes created by rich text function M.remove(words) assert(words) diff --git a/druid/custom/rich_text/rich_text.lua b/druid/custom/rich_text/rich_text.lua index 8bcc6e2..d6a7078 100644 --- a/druid/custom/rich_text/rich_text.lua +++ b/druid/custom/rich_text/rich_text.lua @@ -3,10 +3,28 @@ --- Druid Rich Text custom component. -- # Overview # -- --- Heavily inspired by https://github.com/britzl/defold-richtext. +-- Heavily inspired by https://github.com/britzl/defold-richtext. -- -- Uses the same syntax for tags, but currently have less tags support. -- +-- All Rich Text params are adjusted in GUI scene +-- +-- The Rich Text template should have next scheme: +-- +-- root +-- +-- - text_prefab +-- +-- - icon_prefab +-- +-- # Rich Text Setup # +-- • Root node size - maximum width and height of the text +-- • Root anchor - Aligment of the Rich Text inside root node size area +-- • Text prefab - all text params for the text node +-- • Text prefab anchor - Anchor for each text node (you should adjust this only if animate text) +-- • Icon prefab - all node params for the icon node +-- • Icon prefab anchor - Anchor for each icon node (you should adjust this only if animate icon) +-- -- # Notes # -- -- • Nested tags are supported diff --git a/druid/druid.lua b/druid/druid.lua index fffe0c5..fe90baf 100644 --- a/druid/druid.lua +++ b/druid/druid.lua @@ -7,7 +7,7 @@ -- Druid components or make your own game-specific components to make -- amazing GUI in your games. -- --- To start using Druid, please refer to the Basic Usage section below. +-- To start using Druid, please refer to the Usage section below. -- -- # Notes # -- diff --git a/druid/event.lua b/druid/event.lua index bbd49df..6a61594 100644 --- a/druid/event.lua +++ b/druid/event.lua @@ -1,9 +1,10 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license ---- Druid Event module. +--- Druid Event Module -- --- Event is a simple class to handle callbacks. It's used in many Druid components. --- You can subscribe to event with `:subscribe` method and unsubscribe with `:unsubscribe`. +-- The Event module provides a simple class for handling callbacks. It is used in many Druid components. +-- +-- You can subscribe to an event using the `:subscribe` method and unsubscribe using the `:unsubscribe` method. -- @module DruidEvent -- @alias druid.event diff --git a/druid/helper.lua b/druid/helper.lua index 3759984..e79fd40 100644 --- a/druid/helper.lua +++ b/druid/helper.lua @@ -1,6 +1,9 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Helper module with various usefull GUI functions. +-- @usage +-- local helper = require("druid.helper") +-- helper.centrate_nodes(0, node_1, node_2) -- @module Helper -- @alias druid.helper diff --git a/druid/styles/default/style.lua b/druid/styles/default/style.lua index 6908005..3c8a543 100644 --- a/druid/styles/default/style.lua +++ b/druid/styles/default/style.lua @@ -150,7 +150,41 @@ M["text"] = { M["hotkey"] = { - MODIFICATORS = { "key_lshift", "key_rshift", "key_lctrl", "key_rctrl", "key_lalt", "key_ralt", "key_lsuper", "key_rsuper" }, -- Add key ids to mark it as modificator keys + -- Add key ids to mark it as modificator keys + MODIFICATORS = { + "key_lshift", + "key_rshift", + "key_lctrl", + "key_rctrl", + "key_lalt", + "key_ralt", + "key_lsuper", + "key_rsuper" + } +} + + +M["rich_text"] = { + COLORS = { + white = "#FFFFFF", + black = "#000000", + red = "#FF0000", + green = "#00FF00", + blue = "#0000FF", + yellow = "#FFFF00", + magenta = "#FF00FF", + cyan = "#00FFFF", + gray = "#808080", + dark_gray = "#404040", + light_gray = "#C0C0C0", + orange = "#FFA500", + pink = "#FFC0CB", + purple = "#800080", + brown = "#A52A2A", + olive = "#808000", + teal = "#008080", + navy = "#000080", + } } From 5ecd67d8efd602f8b351f75efe03d609f5efe7e7 Mon Sep 17 00:00:00 2001 From: Insality Date: Thu, 13 Jul 2023 21:32:04 +0300 Subject: [PATCH 8/8] Update docs --- README.md | 16 +++--- docs_md/components/manual_rich_text.md | 59 ------------------- druid/base/button.lua | 2 + druid/base/drag.lua | 2 + druid/base/scroll.lua | 2 + druid/base/static_grid.lua | 2 + druid/base/text.lua | 2 + druid/custom/rich_text/module/rt.lua | 6 +- druid/custom/rich_text/rich_text.lua | 79 +++++++++++++++++++++----- druid/extended/checkbox.lua | 2 + druid/extended/checkbox_group.lua | 2 + druid/extended/data_list.lua | 2 + druid/extended/dynamic_grid.lua | 2 + druid/extended/hotkey.lua | 2 + druid/extended/input.lua | 2 + druid/extended/lang_text.lua | 1 + druid/extended/layout.lua | 2 + druid/extended/progress.lua | 2 + druid/extended/radio_group.lua | 2 + druid/extended/slider.lua | 2 + druid/extended/swipe.lua | 2 + druid/helper.lua | 10 +++- druid/system/druid_instance.lua | 34 +++++------ example/example.gui_script | 2 +- 24 files changed, 137 insertions(+), 102 deletions(-) delete mode 100644 docs_md/components/manual_rich_text.md diff --git a/README.md b/README.md index 392496e..2c191ed 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ **Druid** - powerful **Defold** component UI framework that empowers developers to create stunning and customizable GUIs by leveraging a wide range of embedded components or effortlessly designing their own game-specific components. +Try the [**HTML5 version**](https://insality.github.io/druid/druid/) of the **Druid** example app. ## Setup @@ -88,9 +89,9 @@ Start reading the API documentation [here](https://insality.github.io/druid/modu [EmmyLua](https://emmylua.github.io/annotation.html) is a Lua annotation library. It is a useful tool for enabling Lua code autocompletion in editors such as [VSCode](https://github.com/EmmyLua/VSCode-EmmyLua) and [IntelliJ IDEA](https://github.com/EmmyLua/IntelliJ-EmmyLua). -Since dependencies cannot be processed by external editors, to use the generated EmmyLua annotations, you should copy the _druid/annotations.lua_ file to your project. +Since dependencies cannot be processed by external editors, to use the EmmyLua annotations, you should copy the _druid/annotations.lua_ file to your project. -For EmmyLua, this will be sufficient. Remember that you can restart the EmmyLua server to refresh the changes if something goes wrong. +Remember that you can restart the EmmyLua server to refresh the changes if something goes wrong. After the annotations are processed, you should specify the type of "Druid" in the "require" statement: @@ -146,9 +147,9 @@ Here is full **Druid** components list. | **[Input](https://insality.github.io/druid/modules/Input.html)** | Logic over GUI Node and GUI Text (or Text component). Provides basic user text input. | [Input Example](https://insality.github.io/druid/druid/?example=general_input) | | | **[Lang text](https://insality.github.io/druid/modules/LangText.html)** | Logic over Text component to handle localization. Can be translated in real-time with `druid.on_language_change` | ❌ | | | **[Progress](https://insality.github.io/druid/modules/Progress.html)** | Logic over GUI Node. Handle node size and scale to handle progress node size. | [Progress Example](https://insality.github.io/druid/druid/?example=general_progress_bar) | | -| **[Slider](https://insality.github.io/druid/modules/Slider.html)** | Logic over GUI Node. Handle draggable node with position restrictions. | [Slider Example]() | | +| **[Slider](https://insality.github.io/druid/modules/Slider.html)** | Logic over GUI Node. Handle draggable node with position restrictions. | [Slider Example](https://insality.github.io/druid/druid/?example=general_sliders) | | | **[Timer](https://insality.github.io/druid/modules/Timer.html)** | Logic over GUI Text. Handle basic timer functions. | ❌ | | -| **[Hotkey](https://insality.github.io/druid/modules/Hotkey.html)** | Allow to set callbacks for keyboard hotkeys with key modificators. | [Hotkey Example](https://insality.github.io/druid/druid/?example=general_hokey) | | +| **[Hotkey](https://insality.github.io/druid/modules/Hotkey.html)** | Allow to set callbacks for keyboard hotkeys with key modificators. | [Hotkey Example](https://insality.github.io/druid/druid/?example=general_hotkey) | | | **[Layout](https://insality.github.io/druid/modules/Layout.html)** | Logic over GUI Node. Handle node size depends on layout mode and screen aspect ratio. Contains helpers to build more complex UI layout. | [Layout Example](https://insality.github.io/druid/druid/?example=general_layout) | | For a complete overview, see: **_[components.md](docs_md/01-components.md)_**. @@ -192,16 +193,17 @@ Refer to the [**example folder**](https://github.com/Insality/druid/tree/develop ## Documentation To better understand **Druid**, read the following documentation: +- [How To GUI in Defold](https://forum.defold.com/t/how-to-gui-in-defold/73256) - [Druid components](docs_md/01-components.md) - [Create custom components](docs_md/02-creating_custom_components.md) - [See FAQ article](docs_md/FAQ.md) - [Druid styles](docs_md/03-styles.md) -You can fund the full **Druid** documentation here: -https://insality.github.io/druid/ +You can find the full **Druid** documentation here: +https://insality.github.io/druid/modules/Druid.html -## License +## Licenses - Developed and supported by [Insality](https://github.com/Insality) - Original idea by [AGulev](https://github.com/AGulev) diff --git a/docs_md/components/manual_rich_text.md b/docs_md/components/manual_rich_text.md deleted file mode 100644 index aa4ffef..0000000 --- a/docs_md/components/manual_rich_text.md +++ /dev/null @@ -1,59 +0,0 @@ -# Druid Rich Text - -## Links -[Rich Text API here](https://insality.github.io/druid/modules/RichText.html) - -## Overview - - -## Setup - -Rich Text requires the next GUI Node scheme: -```bash - root - ├── text_prefab - └── node_prefab -``` -or make the copy of `/druid/custom/rich_text/rich_text.gui` and adjust your default settings - -Create Rich Text: -```lua -local RichText = require("druid.custom.rich_text.rich_text") - -function init(self) - self.druid = druid.new(self) - self.rich_text = self.druid:new(RichText, "template_name") - self.rich_text:set_text("Insert your text here") -end -``` - -## Usage - -| Tag | Description | Example | -|---------|------------------------------------------------|---------------------------------------------| -| a | Create a "hyperlink" that generates a message | `Foobar` | -| | when clicked (see `richtext.on_click`) | | -| br | Insert a line break (see notes on linebreak) | `
` | -| color | Change text color | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| shadow | Change text shadow | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| outline | Change text shadow | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| | | `Foobar` | -| font | Change font | `Foobar` | -| img | Display image | `` | -| | Display image in fixed square | `` | -| | Display image in fixed rectangle | `` | -| nobr | Prevent the text from breaking | `Words inside tag won't break` | -| size | Change text size, relative to default size | `Twice as large` | - - -## Usecases - -## Notes diff --git a/druid/base/button.lua b/druid/base/button.lua index f21da7f..628b58e 100755 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -19,6 +19,8 @@ -- -- • To animate a small icon on a big button panel, you can use an animation node. -- The trigger node name should be set as "big panel," and the animation node should be set as "small icon." +-- +-- Example Link -- @usage -- local function on_button_click(self, args, button) -- print("Button has clicked with params: " .. args) diff --git a/druid/base/drag.lua b/druid/base/drag.lua index 2667ca4..5c420db 100644 --- a/druid/base/drag.lua +++ b/druid/base/drag.lua @@ -4,6 +4,8 @@ -- Drag have correct handling for multitouch and swap -- touched while dragging. Drag will be processed even -- the cursor is outside of node, if drag is already started +-- +-- Example Link -- @module Drag -- @within BaseComponent -- @alias druid.drag diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 294fd05..a7b510a 100755 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -31,6 +31,8 @@ -- -- • Multitouch is required for scrolling. The scroll component correctly handles -- touch ID swaps while dragging the scroll. +-- +-- Example Link -- @module Scroll -- @within BaseComponent -- @alias druid.scroll diff --git a/druid/base/static_grid.lua b/druid/base/static_grid.lua index 54554cc..1274a87 100644 --- a/druid/base/static_grid.lua +++ b/druid/base/static_grid.lua @@ -29,6 +29,8 @@ -- -- • You can specify a position_function for animations using the -- _static_grid:set_position_function(node, pos) callback. The default position function is gui.set_position(). +-- +-- Example Link -- @module StaticGrid -- @within BaseComponent -- @alias druid.static_grid diff --git a/druid/base/text.lua b/druid/base/text.lua index 6372a79..1735311 100755 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -29,6 +29,8 @@ -- For better effect, use with a stencil node. -- -- - const.TEXT_ADJUST.SCALE_THEN_SCROLL: Combines two modes: limited downscale first, then scroll. +-- +-- Example Link -- @module Text -- @within BaseComponent -- @alias druid.text diff --git a/druid/custom/rich_text/module/rt.lua b/druid/custom/rich_text/module/rt.lua index fa48fec..5b82a09 100755 --- a/druid/custom/rich_text/module/rt.lua +++ b/druid/custom/rich_text/module/rt.lua @@ -449,9 +449,9 @@ function M.set_text_scale(words, settings, scale) end ----@param words rich_text.word[] ----@param settings rich_text.settings ----@param lines_metrics rich_text.lines_metrics +---@param words druid.rich_text.word[] +---@param settings druid.rich_text.settings +---@param lines_metrics druid.rich_text.lines_metrics function M.adjust_to_area(words, settings, lines_metrics) local last_line_metrics = lines_metrics diff --git a/druid/custom/rich_text/rich_text.lua b/druid/custom/rich_text/rich_text.lua index d6a7078..30a6948 100644 --- a/druid/custom/rich_text/rich_text.lua +++ b/druid/custom/rich_text/rich_text.lua @@ -1,40 +1,89 @@ -- Copyright (c) 2022 Maksim Tuprikov . This code is licensed under MIT license ---- Druid Rich Text custom component. +--- Druid Rich Text Custom Component. -- # Overview # -- --- Heavily inspired by https://github.com/britzl/defold-richtext. +-- This custom component is inspired by defold-richtext by britzl. +-- It uses a similar syntax for tags but currently supports fewer tags. -- --- Uses the same syntax for tags, but currently have less tags support. +-- All parameters for the Rich Text component are adjusted in the GUI scene. -- --- All Rich Text params are adjusted in GUI scene +-- This component uses GUI component template. (/druid/custom/rich_text/rich_text.gui). -- --- The Rich Text template should have next scheme: +-- You able to customize it or make your own with the next node scructure: -- -- root -- --- - text_prefab +-- - text_prefab -- --- - icon_prefab +-- - icon_prefab -- -- # Rich Text Setup # --- • Root node size - maximum width and height of the text --- • Root anchor - Aligment of the Rich Text inside root node size area --- • Text prefab - all text params for the text node --- • Text prefab anchor - Anchor for each text node (you should adjust this only if animate text) --- • Icon prefab - all node params for the icon node --- • Icon prefab anchor - Anchor for each icon node (you should adjust this only if animate icon) +-- +-- • Root node size: Set the maximum width and height of the text. +-- +-- • Root anchor: Define the alignment of the Rich Text inside the root node size area. +-- +-- • Text prefab: Configure all default text parameters for the text node. +-- +-- • Text prefab anchor: Set the anchor for each text node (adjust this only if animating text). +-- +-- • Icon prefab: Configure all default node parameters for the icon node. +-- +-- • Icon prefab anchor: Set the anchor for each icon node (adjust this only if animating the icon). -- -- # Notes # -- -- • Nested tags are supported -- +-- Example Link -- @usage -- local RichText = require("druid.custom.rich_text.rich_text") -- ... -- self.rich_text = self.druid:new(RichText, "rich_text") -- self.rich_text:set_text("Hello, Druid Rich Text!") +-- @usage +-- type druid.rich_text.word = { +-- node: Node, +-- relative_scale: number, +-- color: vector4, +-- position: vector3, +-- offset: vector3, +-- scale: vector3, +-- size: vector3, +-- metrics: druid.rich_text.metrics, +-- pivot: Pivot, +-- text: string, +-- shadow: vector4, +-- outline: vector4, +-- font: string, +-- image: druid.rich_text.image, +-- default_animation: string, +-- anchor: number, +-- br: boolean, +-- nobr: boolean, +-- } -- +-- type druid.rich_text.word.image = { +-- texture: string, +-- anim: string, +-- width: number, +-- height: number, +-- } +-- +-- type druid.rich_text.lines_metrics = { +-- text_width: number, +-- text_height: number, +-- lines: table, +-- } +-- +-- type druid.rich_text.metrics = { +-- width: number, +-- height: number, +-- offset_x: number|nil, +-- offset_y: number|nil, +-- node_size: vector3|nil @For images only, +-- } -- @module RichText -- @within BaseComponent -- @alias druid.rich_text @@ -79,8 +128,8 @@ end --- Set text for Rich Text -- @tparam RichText self @{RichText} -- @tparam string text The text to set --- @treturn table words --- @treturn table line_metrics +-- @treturn druid.rich_text.word[] words +-- @treturn druid.rich_text.lines_metrics line_metrics -- @usage -- • color: Change text color -- diff --git a/druid/extended/checkbox.lua b/druid/extended/checkbox.lua index ef1b295..f3ee5fa 100755 --- a/druid/extended/checkbox.lua +++ b/druid/extended/checkbox.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid checkbox component +-- +-- Example Link -- @module Checkbox -- @within BaseComponent -- @alias druid.checkbox diff --git a/druid/extended/checkbox_group.lua b/druid/extended/checkbox_group.lua index 2ca9561..046bbfa 100644 --- a/druid/extended/checkbox_group.lua +++ b/druid/extended/checkbox_group.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Checkbox group module +-- +-- Example Link -- @module CheckboxGroup -- @within BaseComponent -- @alias druid.checkbox_group diff --git a/druid/extended/data_list.lua b/druid/extended/data_list.lua index 2c1b011..f7187b7 100644 --- a/druid/extended/data_list.lua +++ b/druid/extended/data_list.lua @@ -2,6 +2,8 @@ --- Component to manage data for huge dataset in scroll. -- It requires Druid Scroll and Druid Grid (Static or Dynamic) components +-- +-- Example Link -- @module DataList -- @within BaseComponent -- @alias druid.data_list diff --git a/druid/extended/dynamic_grid.lua b/druid/extended/dynamic_grid.lua index 5e8dbc6..1fec83f 100644 --- a/druid/extended/dynamic_grid.lua +++ b/druid/extended/dynamic_grid.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Component to handle placing components in row +-- +-- Example Link -- @module DynamicGrid -- @within BaseComponent -- @alias druid.dynamic_grid diff --git a/druid/extended/hotkey.lua b/druid/extended/hotkey.lua index 23ecd49..6985f15 100644 --- a/druid/extended/hotkey.lua +++ b/druid/extended/hotkey.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid hotkey component +-- +-- Example Link -- @module Hotkey -- @within BaseComponent -- @alias druid.hotkey diff --git a/druid/extended/input.lua b/druid/extended/input.lua index da1b220..3cb2bca 100755 --- a/druid/extended/input.lua +++ b/druid/extended/input.lua @@ -2,6 +2,8 @@ --- Druid input text component. -- Carry on user text input +-- +-- Example Link -- @author Part of code from Britzl gooey input component -- @module Input -- @within BaseComponent diff --git a/druid/extended/lang_text.lua b/druid/extended/lang_text.lua index af36877..6b066c5 100755 --- a/druid/extended/lang_text.lua +++ b/druid/extended/lang_text.lua @@ -12,6 +12,7 @@ -- -- # Notes # -- +-- Example Link -- @module LangText -- @within BaseComponent -- @alias druid.lang_text diff --git a/druid/extended/layout.lua b/druid/extended/layout.lua index 6e8db43..7bcd8f0 100644 --- a/druid/extended/layout.lua +++ b/druid/extended/layout.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Layout management on node +-- +-- Example Link -- @module Layout -- @within BaseComponent -- @alias druid.layout diff --git a/druid/extended/progress.lua b/druid/extended/progress.lua index ddd2081..ac24bba 100644 --- a/druid/extended/progress.lua +++ b/druid/extended/progress.lua @@ -13,6 +13,8 @@ -- -- • If you have glitchy or dark texture bug with progress bar, try to disable mipmaps in your texture profiles -- +-- +-- Example Link -- @module Progress -- @within BaseComponent -- @alias druid.progress diff --git a/druid/extended/radio_group.lua b/druid/extended/radio_group.lua index fef1d00..96aa334 100644 --- a/druid/extended/radio_group.lua +++ b/druid/extended/radio_group.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Radio group module +-- +-- Example Link -- @module RadioGroup -- @within BaseComponent -- @alias druid.radio_group diff --git a/druid/extended/slider.lua b/druid/extended/slider.lua index 4f48e8d..8907a8b 100644 --- a/druid/extended/slider.lua +++ b/druid/extended/slider.lua @@ -1,6 +1,8 @@ -- Copyright (c) 2021 Maksim Tuprikov . This code is licensed under MIT license --- Druid slider component +-- +-- Example Link -- @module Slider -- @within BaseComponent -- @alias druid.slider diff --git a/druid/extended/swipe.lua b/druid/extended/swipe.lua index d4ecc27..d263686 100644 --- a/druid/extended/swipe.lua +++ b/druid/extended/swipe.lua @@ -3,6 +3,8 @@ --- Component to handle swipe gestures on node. -- Swipe will be triggered, if swipe was started and -- ended on one node +-- +-- Example Link -- @module Swipe -- @within BaseComponent -- @alias druid.swipe diff --git a/druid/helper.lua b/druid/helper.lua index e79fd40..d59880a 100644 --- a/druid/helper.lua +++ b/druid/helper.lua @@ -10,6 +10,7 @@ local const = require("druid.const") local M = {} +M._some = { pepepe = true } local function get_text_width(text_node) @@ -393,7 +394,14 @@ end --- Get text metric from GUI node. -- @function helper.get_text_metrics_from_node -- @tparam Node text_node --- @treturn GUITextMetrics Fields: width, height, max_ascent, max_descent +-- @treturn pepepe +-- @usage +-- type GUITextMetrics = { +-- width: number, +-- height: number, +-- max_ascent: number, +-- max_descent: number +-- } function M.get_text_metrics_from_node(text_node) local font_resource = gui.get_font_resource(gui.get_font(text_node)) local options = { diff --git a/druid/system/druid_instance.lua b/druid/system/druid_instance.lua index 862586e..0bb1f8e 100755 --- a/druid/system/druid_instance.lua +++ b/druid/system/druid_instance.lua @@ -43,27 +43,29 @@ -- -- @module DruidInstance -- @alias druid_instance --- @see Button --- @see Blocker -- @see BackHandler --- @see Input --- @see Text --- @see LangText --- @see Timer --- @see Progress --- @see StaticGrid --- @see DynamicGrid --- @see Scroll --- @see Slider +-- @see Blocker +-- @see Button -- @see Checkbox -- @see CheckboxGroup --- @see RadioGroup --- @see Swipe --- @see Drag -- @see DataList --- @see Hover --- @see Layout +-- @see Drag +-- @see DynamicGrid -- @see Hotkey +-- @see Hover +-- @see Input +-- @see LangText +-- @see Layout +-- @see Progress +-- @see RadioGroup +-- @see RichInput +-- @see RichText +-- @see Scroll +-- @see Slider +-- @see StaticGrid +-- @see Swipe +-- @see Text +-- @see Timer local helper = require("druid.helper") local class = require("druid.system.middleclass") diff --git a/example/example.gui_script b/example/example.gui_script index 5e786c8..7ff6864 100644 --- a/example/example.gui_script +++ b/example/example.gui_script @@ -85,7 +85,7 @@ local function init_top_panel(self) gui.set_enabled(self.button_menu.node, false) self.button_api = self.druid:new_button("button_api/button", function() - sys.open_url("https://insality.github.io/druid/") + sys.open_url("https://insality.github.io/druid/modules/Druid.html") end) self.button_code = self.druid:new_button("button_code/button", function()