Skip to content

Commit 4e5194d

Browse files
authored
[fix][update] no-behavior out of margin for frame fixed; added frame callbacks and layers (#47)
-- Behaviors: drag, resize, scroll etc; are able now to do anywhere. -- Actions and layers implemented for frame widget.
1 parent b26a0de commit 4e5194d

File tree

4 files changed

+48
-37
lines changed

4 files changed

+48
-37
lines changed

cmake/properties.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
set(EKG_VERSION 2.3.0)
1+
set(EKG_VERSION 2.3.1)
22
set(EKG_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include")
33

44
if(CMAKE_TOOLCHAIN_FILE)

include/ekg/io/event.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@ namespace ekg {
4343
active_bg,
4444
active_outline,
4545
text_fg,
46-
text_outline
46+
text_outline,
47+
warning_bg,
48+
warning_fg,
49+
warning_outline,
4750
};
48-
constexpr size_t enum_layer_size {static_cast<size_t>(ekg::layer::text_outline)+1};
51+
constexpr size_t enum_layer_size {static_cast<size_t>(ekg::layer::warning_outline)+1};
4952

5053
enum class action {
5154
hover,

include/ekg/ui/frame/frame.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@
2626

2727
#include "ekg/io/descriptor.hpp"
2828
#include "ekg/math/geometry.hpp"
29+
#include "ekg/io/event.hpp"
2930

3031
namespace ekg {
3132
struct frame_color_scheme_t {
3233
public:
3334
ekg::pixel_thickness_t actions_margin_pixel_thickness {5};
35+
ekg::pixel_t margin {2.0f};
3436
ekg::rgba_t<uint8_t> background {};
3537
ekg::rgba_t<uint8_t> highlight {};
3638
ekg::rgba_t<uint8_t> outline {};
@@ -66,6 +68,8 @@ namespace ekg {
6668
bool set_top_level {};
6769
ekg::frame_color_scheme_t color_scheme {};
6870
ekg::frame_t::widget_t widget {};
71+
ekg::at_array_t<ekg::action, ekg::enum_action_size> actions {};
72+
ekg::at_array_t<ekg::layer, ekg::enum_layer_size> layers {};
6973
public:
7074
ekg_descriptor(ekg::frame_t);
7175
};

src/ui/frame/widget.cpp

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -66,18 +66,17 @@ void ekg::ui::event(
6666
ekg::input_info_t &input {ekg::p_core->handler_input.input};
6767
ekg::flags_t resize_over_dock {};
6868

69-
/*ekg::io::trigger(
69+
ekg_action(
70+
frame.actions,
71+
ekg::action::hover,
7072
(
7173
input.has_motion
7274
&&
7375
property.states.is_hovering
7476
&&
75-
(ekg::timing_t::second > ekg::tweaks.task_latency)
76-
),
77-
ekg::action::motion,
78-
frame.actions,
79-
this->properties
80-
);*/
77+
(ekg::timing_t::second && ekg::gui.ui.frequency)
78+
)
79+
);
8180

8281
if (
8382
input.was_pressed
@@ -135,38 +134,35 @@ void ekg::ui::event(
135134

136135
property.states.is_absolute = property.states.is_active;
137136

138-
/*ekg::io::trigger(
139-
true,
140-
ekg::action::press,
137+
ekg_action(
141138
frame.actions,
142-
this->properties
143-
);*/
139+
ekg::action::press,
140+
true
141+
);
144142
} else if (input.has_motion && property.states.is_active) {
145143
ekg::rect_t<float> new_rect {rect};
146144
ekg::vec2_t<float> interact {static_cast<ekg::vec2_t<float>>(input.interact)};
147145

148146
resize_over_dock = frame.widget.target_dock_resize;
149147

150148
if (frame.widget.target_dock_drag != ekg::dock::none && frame.widget.target_dock_resize == ekg::dock::none) {
151-
/*ekg::io::trigger(
152-
ekg::timing_t::second > ekg::tweaks.task_latency,
153-
ekg::action::drag,
149+
ekg_action(
154150
frame.actions,
155-
this->properties
156-
);*/
151+
ekg::action::drag,
152+
ekg::timing_t::second > ekg::gui.ui.frequency
153+
);
157154

158155
new_rect.x = interact.x - frame.widget.rect_delta.x;
159156
new_rect.y = interact.y - frame.widget.rect_delta.y;
160157
ekg::p_core->p_platform_base->system_cursor = ekg::system_cursor::size_all;
161158
}
162159

163160
if (frame.widget.target_dock_resize != ekg::dock::none) {
164-
/*ekg::io::trigger(
165-
ekg::timing_t::second > ekg::tweaks.task_latency,
166-
ekg::action::resize,
161+
ekg_action(
167162
frame.actions,
168-
this->properties
169-
);*/
163+
ekg::action::resize,
164+
ekg::timing_t::second > ekg::gui.ui.frequency
165+
);
170166

171167
if (ekg::has(frame.widget.target_dock_resize, ekg::dock::left)) {
172168
interact.x = ekg::clamp_min<float>(interact.x, frame.widget.rect_delta.x);
@@ -262,14 +258,11 @@ void ekg::ui::event(
262258

263259
if (input.was_released) {
264260
if (property.states.is_active) {
265-
property.states.is_absolute = false;
266-
267-
/*ekg::io::trigger(
268-
property.states.is_hovering,
269-
ekg::action::release,
261+
ekg_action(
270262
frame.actions,
271-
this->properties
272-
);*/
263+
ekg::action::release,
264+
property.states.is_hovering
265+
);
273266
}
274267

275268
frame.widget.target_dock_resize = ekg::dock::none;
@@ -315,19 +308,30 @@ void ekg::ui::buffering(
315308
property.parent_at != ekg::at_t::not_found
316309
);
317310

311+
/**
312+
* This allows scrolling and dragging behavior possible,
313+
* every child from this frame will be spaced always
314+
* ahead of margin.
315+
**/
316+
float margin_bound {frame.color_scheme.margin * 2.0f};
317+
property.widget.rect_scissor.x += frame.color_scheme.margin;
318+
property.widget.rect_scissor.y += frame.color_scheme.margin;
319+
property.widget.rect_scissor.w -= margin_bound;
320+
property.widget.rect_scissor.h -= margin_bound;
321+
318322
ekg::draw::rect(
319323
rect,
320324
property.states.is_focused ? frame.color_scheme.focused_background : frame.color_scheme.background,
321325
ekg::draw::mode::fill,
322-
ekg::at_t::not_found
326+
frame.layers[ekg::layer::bg]
323327
);
324328

325329
if (property.states.is_active) {
326330
ekg::draw::rect(
327331
rect,
328332
frame.color_scheme.highlight,
329333
ekg::draw::mode::fill,
330-
ekg::at_t::not_found
334+
frame.layers[ekg::layer::active_bg]
331335
);
332336
}
333337

@@ -336,23 +340,23 @@ void ekg::ui::buffering(
336340
rect,
337341
frame.color_scheme.highlight,
338342
ekg::draw::mode::fill,
339-
ekg::at_t::not_found
343+
frame.layers[ekg::layer::highlight_bg]
340344
);
341345
}
342346

343347
ekg::draw::rect(
344348
rect,
345349
property.states.is_focused ? frame.color_scheme.focused_outline : frame.color_scheme.outline,
346350
ekg::draw::mode::outline,
347-
ekg::at_t::not_found
351+
frame.layers[ekg::layer::outline]
348352
);
349353

350354
if (property.states.is_warning) {
351355
ekg::draw::rect(
352356
rect,
353357
frame.color_scheme.warning_outline,
354358
ekg::draw::mode::outline,
355-
ekg::at_t::not_found
359+
frame.layers[ekg::layer::warning_outline]
356360
);
357361
}
358362

0 commit comments

Comments
 (0)