Skip to content

Commit d6a3eb7

Browse files
committed
[update] added sensitive state for widgets-inside popup
1 parent 0acef8a commit d6a3eb7

File tree

6 files changed

+24
-15
lines changed

6 files changed

+24
-15
lines changed

include/ekg/core/pools.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ namespace ekg::core {
8787
ekg_core_widget_call_impl(descriptor_t, widget_descriptor_at, todo); \
8888
}
8989

90-
#define ekg_registry_widget(widget_descriptor_t, register_widget_pool, register_property_pool, is_container, register_settings) \
90+
#define ekg_registry_widget_impl(widget_descriptor_t, register_widget_pool, register_property_pool, is_container, register_settings) \
9191
widget_descriptor_t &widget { \
9292
register_widget_pool.push_back( \
9393
ekg::io::any_static_cast<widget_descriptor_t>(&descriptor) \
@@ -115,13 +115,13 @@ namespace ekg::core {
115115
ekg::property_t &parent {ekg::query<ekg::property_t>(ekg::gui.bind.parent_at)}; \
116116
if (is_container) { \
117117
if (parent != ekg::property_t::not_found && widget.dock != ekg::dock::none) { \
118+
property.parent_at = parent.at; \
118119
parent.children.push_back(widget.at); \
119-
property.parent_at = ekg::gui.bind.parent_at; \
120120
property.abs_parent_at = parent.abs_parent_at; \
121-
} else { \
122-
ekg::gui.bind.parent_at = property.at; \
121+
} else if (parent == ekg::property_t::not_found) { \
123122
property.abs_parent_at = property.at; \
124123
} \
124+
ekg::gui.bind.parent_at = property.at; \
125125
} else if (parent != ekg::property_t::not_found) { \
126126
property.parent_at = ekg::gui.bind.parent_at; \
127127
property.abs_parent_at = parent.abs_parent_at; \
@@ -236,7 +236,7 @@ namespace ekg {
236236
) {
237237
switch (t::type) {
238238
case ekg::type::frame: {
239-
ekg_registry_widget(
239+
ekg_registry_widget_impl(
240240
ekg::frame_t,
241241
ekg::pools.frame,
242242
ekg::pools.frame_property,
@@ -250,7 +250,7 @@ namespace ekg {
250250
}
251251

252252
case ekg::type::button: {
253-
ekg_registry_widget(
253+
ekg_registry_widget_impl(
254254
ekg::button_t,
255255
ekg::pools.button,
256256
ekg::pools.button_property,
@@ -264,7 +264,7 @@ namespace ekg {
264264
}
265265

266266
case ekg::type::label: {
267-
ekg_registry_widget(
267+
ekg_registry_widget_impl(
268268
ekg::label_t,
269269
ekg::pools.label,
270270
ekg::pools.label_property,
@@ -278,7 +278,7 @@ namespace ekg {
278278
}
279279

280280
case ekg::type::scrollbar: {
281-
ekg_registry_widget(
281+
ekg_registry_widget_impl(
282282
ekg::scrollbar_t,
283283
ekg::pools.scrollbar,
284284
ekg::pools.scrollbar_property,
@@ -292,7 +292,7 @@ namespace ekg {
292292
}
293293

294294
case ekg::type::slider: {
295-
ekg_registry_widget(
295+
ekg_registry_widget_impl(
296296
ekg::slider_t,
297297
ekg::pools.slider,
298298
ekg::pools.slider_property,
@@ -306,7 +306,7 @@ namespace ekg {
306306
}
307307

308308
case ekg::type::popup: {
309-
ekg_registry_widget(
309+
ekg_registry_widget_impl(
310310
ekg::popup_t,
311311
ekg::pools.popup,
312312
ekg::pools.popup_property,
@@ -359,13 +359,13 @@ namespace ekg {
359359
ekg::gui.bind.stack_at = ekg::at_t::not_found;
360360
break;
361361
case ekg::type::property:
362-
ekg::gui.bind.parent_at = ekg::at_t::not_found;
362+
ekg::gui.bind.parent_at = ekg::query<ekg::property_t>(ekg::gui.bind.parent_at).parent_at;
363363
break;
364364
case ekg::type::frame:
365-
ekg::gui.bind.parent_at = ekg::at_t::not_found;
365+
ekg::gui.bind.parent_at = ekg::query<ekg::property_t>(ekg::gui.bind.parent_at).parent_at;
366366
break;
367367
case ekg::type::popup:
368-
ekg::gui.bind.parent_at = ekg::at_t::not_found;
368+
ekg::gui.bind.parent_at = ekg::query<ekg::property_t>(ekg::gui.bind.parent_at).parent_at;
369369
break;
370370
}
371371
}

include/ekg/ui/frame/frame.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ namespace ekg {
6464
ekg::at_t property_at {};
6565
public:
6666
std::string tag {};
67-
ekg::dock dock {ekg::dock::none};
67+
ekg::flags_t dock {ekg::dock::none};
6868
ekg::rect_t<float> rect {20.0f, 20.0f, 150.0f, 200.0f};
6969
ekg::flags_t drag {ekg::dock::top};
7070
ekg::flags_t resize {};

include/ekg/ui/property.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ namespace ekg {
4141
bool is_highlight {};
4242
bool is_focused {};
4343
bool is_warning {};
44+
bool is_sensitive {};
4445
};
4546

4647
struct operation_t {

src/ui/button/widget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ void ekg::ui::event(
201201
);
202202

203203
if (!is_checkbox) {
204+
property.states.is_sensitive = true;
204205
check.value.set(true);
205206
}
206207
}
@@ -227,6 +228,7 @@ void ekg::ui::event(
227228
);
228229

229230
if (!is_checkbox) {
231+
property.states.is_sensitive = false;
230232
check.value.set(false);
231233
}
232234

src/ui/frame/widget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ void ekg::ui::event(
282282
frame.widget.target_dock_resize = ekg::dock::none;
283283
frame.widget.target_dock_drag = ekg::dock::none;
284284
property.states.is_active = false;
285+
property.states.is_absolute = false;
285286
}
286287

287288
break;

src/ui/popup/widget.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ void ekg::ui::recursive_sync_ats_by_finding_tag(
187187

188188
if (property.is_childnizate && property.is_children_docknizable) {
189189
ekg::ui::recursive_sync_ats_by_finding_tag(
190-
ekg::query<ekg::property_t>(property.parent_at),
190+
ekg::query<ekg::property_t>(at),
191191
ats_to_sync,
192192
tag
193193
);
@@ -250,6 +250,7 @@ void ekg::ui::event(
250250
bool is_linked_hovering {};
251251
bool is_this_popup_being_hovered {};
252252
bool is_hovering_any_linked_widget {};
253+
bool is_hovering_a_popup_sensitive_widget {};
253254
bool should_force_update_popup_position {};
254255

255256
ekg::rect_t<float> rect_position {};
@@ -267,6 +268,8 @@ void ekg::ui::event(
267268
* Check if the hovered property is a popup.
268269
**/
269270
ekg::property_t &wproperty {ekg::query<ekg::property_t>(descriptor.property_at)};
271+
is_hovering_a_popup_sensitive_widget = wproperty.states.is_sensitive;
272+
270273
if (
271274
wproperty != ekg::property_t::not_found
272275
&&
@@ -409,6 +412,8 @@ void ekg::ui::event(
409412
&&
410413
ekg::gui.ui.hovered_type != ekg::type::popup
411414
&&
415+
is_hovering_a_popup_sensitive_widget
416+
&&
412417
is_this_popup_being_hovered
413418
&&
414419
!is_hovering_any_linked_widget

0 commit comments

Comments
 (0)