diff --git a/engine/event.h b/engine/event.h index aaffe40..a8ccadd 100644 --- a/engine/event.h +++ b/engine/event.h @@ -9,7 +9,10 @@ enum class kKey : uint8_t AndroidBack, KeySpacebar, KeyE, + KeyZ, KeyAlt, + KeyCtrl, + KeyShift, KeyTab, }; diff --git a/engine/keymap.h b/engine/keymap.h index dc67958..4389934 100644 --- a/engine/keymap.h +++ b/engine/keymap.h @@ -129,7 +129,7 @@ kKey convert_key(int key) CASE(kVK_ANSI_F, kKey::Unknown); CASE(kVK_ANSI_H, kKey::Unknown); CASE(kVK_ANSI_G, kKey::Unknown); - CASE(kVK_ANSI_Z, kKey::Unknown); + CASE(kVK_ANSI_Z, kKey::KeyZ); CASE(kVK_ANSI_X, kKey::Unknown); CASE(kVK_ANSI_C, kKey::Unknown); CASE(kVK_ANSI_V, kKey::Unknown); @@ -193,8 +193,8 @@ kKey convert_key(int key) CASE(kVK_Space, kKey::Unknown); CASE(kVK_Delete, kKey::Unknown); CASE(kVK_Escape, kKey::Unknown); - CASE(kVK_Command, kKey::Unknown); - CASE(kVK_Shift, kKey::Unknown); + CASE(kVK_Command, kKey::KeyCtrl); + CASE(kVK_Shift, kKey::KeyShift); CASE(kVK_CapsLock, kKey::Unknown); CASE(kVK_Option, kKey::Unknown); CASE(kVK_Control, kKey::Unknown); @@ -246,8 +246,8 @@ kKey convert_key(int key) CASE(VK_TAB, kKey::KeyTab); CASE(VK_CLEAR, kKey::Unknown); CASE(VK_RETURN, kKey::Unknown); - CASE(VK_SHIFT, kKey::Unknown); - CASE(VK_CONTROL, kKey::Unknown); + CASE(VK_SHIFT, kKey::KeyShift); + CASE(VK_CONTROL, kKey::KeyCtrl); CASE(VK_MENU, kKey::KeyAlt); CASE(VK_PAUSE, kKey::Unknown); CASE(VK_CAPITAL, kKey::Unknown); @@ -314,7 +314,7 @@ kKey convert_key(int key) CASE('W', kKey::Unknown); CASE('X', kKey::Unknown); CASE('Y', kKey::Unknown); - CASE('Z', kKey::Unknown); + CASE('Z', kKey::KeyZ); CASE(VK_LWIN, kKey::Unknown); CASE(VK_RWIN, kKey::Unknown); CASE(VK_APPS, kKey::Unknown); diff --git a/engine/node.cpp b/engine/node.cpp index 48d83cc..9a425fa 100644 --- a/engine/node.cpp +++ b/engine/node.cpp @@ -83,6 +83,9 @@ kEventResult Node::on_event(Event* e) skip_children |= (e->m_cat == kEventCategory::MouseEvent || e->m_cat == kEventCategory::GestureEvent) && (m_mouse_captured) && (root()->current_mouse_capture == this) && m_capture_children; // <-- THIS IS WRONG "!m_capture_children" is correct, but it breaks everything if changed + if (!m_display) + return kEventResult::Available; + if (!skip_children) { for (auto it = m_children.rbegin(); it != m_children.rend(); ++it) diff --git a/engine/node_canvas.cpp b/engine/node_canvas.cpp index 7cc60e5..f965165 100644 --- a/engine/node_canvas.cpp +++ b/engine/node_canvas.cpp @@ -315,6 +315,8 @@ kEventResult NodeCanvas::handle_event(Event* e) // m_canvas->m_alpha_lock = false; if (ke->m_key == kKey::KeyTab) App::I.toggle_ui(); + if (ke->m_key == kKey::KeyZ && App::I.keys[(int)kKey::KeyCtrl]) + App::I.keys[(int)kKey::KeyShift] ? ActionManager::redo() : ActionManager::undo(); break; case kEventType::GestureStart: mouse_capture();