mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 04:48:40 +00:00
ui: extend box->signal path with double-drag, triple-drag info
This commit is contained in:
+58
-8
@@ -2448,13 +2448,24 @@ ui_signal_from_box(UI_Box *box)
|
||||
ui_state->active_box_key[evt_mouse_button_kind] = box->key;
|
||||
sig.f |= (UI_SignalFlag_LeftPressed<<evt_mouse_button_kind);
|
||||
ui_state->drag_start_mouse = evt->pos;
|
||||
if(ui_key_match(box->key, ui_state->last_press_key[evt_mouse_button_kind]) &&
|
||||
evt->timestamp_us-ui_state->last_press_timestamp_us[evt_mouse_button_kind] <= 1000000*os_double_click_time())
|
||||
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
||||
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*os_double_click_time())
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftDoubleClicked<<evt_mouse_button_kind);
|
||||
}
|
||||
ui_state->last_press_key[evt_mouse_button_kind] = box->key;
|
||||
ui_state->last_press_timestamp_us[evt_mouse_button_kind] = evt->timestamp_us;
|
||||
if(ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][0]) &&
|
||||
ui_key_match(box->key, ui_state->press_key_history[evt_mouse_button_kind][1]) &&
|
||||
evt->timestamp_us-ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] <= 1000000*os_double_click_time() &&
|
||||
ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] - ui_state->press_timestamp_history_us[evt_mouse_button_kind][1] <= 1000000*os_double_click_time())
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftTripleClicked<<evt_mouse_button_kind);
|
||||
}
|
||||
MemoryCopy(&ui_state->press_timestamp_history_us[evt_mouse_button_kind][1], &ui_state->press_timestamp_history_us[evt_mouse_button_kind][0],
|
||||
sizeof(ui_state->press_timestamp_history_us[evt_mouse_button_kind][0]) * ArrayCount(ui_state->press_timestamp_history_us[evt_mouse_button_kind])-1);
|
||||
MemoryCopy(&ui_state->press_key_history[evt_mouse_button_kind][1], &ui_state->press_key_history[evt_mouse_button_kind][0],
|
||||
sizeof(ui_state->press_key_history[evt_mouse_button_kind][0]) * ArrayCount(ui_state->press_key_history[evt_mouse_button_kind])-1);
|
||||
ui_state->press_timestamp_history_us[evt_mouse_button_kind][0] = evt->timestamp_us;
|
||||
ui_state->press_key_history[evt_mouse_button_kind][0] = box->key;
|
||||
taken = 1;
|
||||
}
|
||||
|
||||
@@ -2619,12 +2630,51 @@ ui_signal_from_box(UI_Box *box)
|
||||
//////////////////////////////
|
||||
//- rjf: active -> dragging
|
||||
//
|
||||
for(EachEnumVal(UI_MouseButtonKind, k))
|
||||
if(box->flags & UI_BoxFlag_MouseClickable)
|
||||
{
|
||||
if(ui_key_match(ui_state->active_box_key[k], box->key) ||
|
||||
sig.f & (UI_SignalFlag_LeftPressed<<k))
|
||||
for(EachEnumVal(UI_MouseButtonKind, k))
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftDragging<<k);
|
||||
if(ui_key_match(ui_state->active_box_key[k], box->key) ||
|
||||
sig.f & (UI_SignalFlag_LeftPressed<<k))
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftDragging<<k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: dragging started via double-click -> double-dragging
|
||||
//
|
||||
if(box->flags & UI_BoxFlag_MouseClickable)
|
||||
{
|
||||
for(EachEnumVal(UI_MouseButtonKind, k))
|
||||
{
|
||||
if(sig.f & (UI_SignalFlag_LeftDragging<<k) &&
|
||||
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
||||
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
||||
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*os_double_click_time())
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftDoubleDragging<<k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: dragging started via triple-click -> triple-dragging
|
||||
//
|
||||
if(box->flags & UI_BoxFlag_MouseClickable)
|
||||
{
|
||||
for(EachEnumVal(UI_MouseButtonKind, k))
|
||||
{
|
||||
if(sig.f & (UI_SignalFlag_LeftDragging<<k) &&
|
||||
ui_key_match(ui_state->press_key_history[k][0], box->key) &&
|
||||
ui_key_match(ui_state->press_key_history[k][1], box->key) &&
|
||||
ui_key_match(ui_state->press_key_history[k][2], box->key) &&
|
||||
ui_state->press_timestamp_history_us[k][0] - ui_state->press_timestamp_history_us[k][1] <= 1000000*os_double_click_time() &&
|
||||
ui_state->press_timestamp_history_us[k][1] - ui_state->press_timestamp_history_us[k][2] <= 1000000*os_double_click_time())
|
||||
{
|
||||
sig.f |= (UI_SignalFlag_LeftTripleDragging<<k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user