From aac280f48a883ff6f97cb3d004f2459fc2b70d3f Mon Sep 17 00:00:00 2001 From: omigamedev Date: Mon, 2 Dec 2019 17:10:08 +0100 Subject: [PATCH] add shortcuts, node text font attributes --- data/dialogs/shortcuts.xml | 8 +++--- data/layout.xml | 7 +++--- src/app_dialogs.cpp | 8 +++--- src/keymap.h | 51 +++++++++++++++++++++++++++++++++----- src/node_shorcuts.cpp | 8 +++++- src/node_text.cpp | 7 ++++++ src/serializer.h | 5 ++++ src/settings.h | 4 +++ 8 files changed, 80 insertions(+), 18 deletions(-) diff --git a/data/dialogs/shortcuts.xml b/data/dialogs/shortcuts.xml index 6cfa71c..a37294c 100644 --- a/data/dialogs/shortcuts.xml +++ b/data/dialogs/shortcuts.xml @@ -4,12 +4,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > - + - New File + New File - - Ctrl + N + + Ctrl + N diff --git a/data/layout.xml b/data/layout.xml index 995b09d..f43d180 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -226,6 +226,9 @@ + + + @@ -234,10 +237,6 @@ - - - - diff --git a/src/app_dialogs.cpp b/src/app_dialogs.cpp index 1d91557..c8ae263 100644 --- a/src/app_dialogs.cpp +++ b/src/app_dialogs.cpp @@ -862,15 +862,17 @@ void App::dialog_whatsnew(bool force_show) }); whatsnew->add_button("Reload", 120, [this, whatsnew](Node*) { whatsnew->reload(); - }); + }); whatsnew->add_button("Read Later", 120, [this, whatsnew](Node*) { + Settings::unset("whatsnew-id"); + Settings::save(); whatsnew->destroy(); - }); + }); whatsnew->add_button("Close", 100, [this, whatsnew](Node*) { Settings::set("whatsnew-id", whatsnew->m_page_id); Settings::save(); whatsnew->destroy(); - }); + }); if (force_show) layout[main_id]->add_child(whatsnew); } diff --git a/src/keymap.h b/src/keymap.h index e77a59f..425053a 100644 --- a/src/keymap.h +++ b/src/keymap.h @@ -1,3 +1,5 @@ +#define CASE(K,V) case K: return V; +#if __APPLE__ enum { kVK_ANSI_A = 0x00, kVK_ANSI_S = 0x01, @@ -119,10 +121,8 @@ enum { kKey convert_key(int key) { -#define CASE(K,V) case K: return V; switch(key) { -#ifdef __APPLE__ CASE(kVK_ANSI_A, kKey::KeyA); CASE(kVK_ANSI_S, kKey::KeyS); CASE(kVK_ANSI_D, kKey::KeyD); @@ -235,7 +235,20 @@ kKey convert_key(int key) CASE(kVK_RightArrow, kKey::Unknown); CASE(kVK_DownArrow, kKey::Unknown); CASE(kVK_UpArrow, kKey::Unknown); -#elif defined(_WIN32) + default: + return kKey::Unknown; + } +} +#elif __WIN__ +kKey convert_key(int key) +{ + static auto KL = GetKeyboardLayout(0); + if (key == (VkKeyScanA('[') & 0xFF)) + return kKey::KeyBracketLeft; + if (key == (VkKeyScanA(']') & 0xFF)) + return kKey::KeyBracketRight; + switch(key) + { CASE(VK_LBUTTON, kKey::Unknown); CASE(VK_RBUTTON, kKey::Unknown); CASE(VK_CANCEL, kKey::Unknown); @@ -432,7 +445,15 @@ kKey convert_key(int key) CASE(VK_NONAME, kKey::Unknown); CASE(VK_PA1, kKey::Unknown); CASE(VK_OEM_CLEAR, kKey::Unknown); -#elif defined(__ANDROID__) + default: + return kKey::Unknown; + } +} +#elif __ANDROID__ +kKey convert_key(int key) +{ + switch (key) + { CASE(AKEYCODE_UNKNOWN, kKey::Unknown); CASE(AKEYCODE_SOFT_LEFT, kKey::Unknown); CASE(AKEYCODE_SOFT_RIGHT, kKey::Unknown); @@ -656,7 +677,15 @@ kKey convert_key(int key) CASE(AKEYCODE_BRIGHTNESS_DOWN, kKey::Unknown); CASE(AKEYCODE_BRIGHTNESS_UP, kKey::Unknown); CASE(AKEYCODE_MEDIA_AUDIO_TRACK, kKey::Unknown); + default: + return kKey::Unknown; + } +} #elif __WEB__ +kKey convert_key(int key) +{ + switch (key) + { CASE(GLFW_KEY_UNKNOWN, kKey::Unknown); CASE(GLFW_KEY_SPACE, kKey::KeySpacebar); CASE(GLFW_KEY_APOSTROPHE, kKey::Unknown); @@ -778,8 +807,18 @@ kKey convert_key(int key) CASE(GLFW_KEY_RIGHT_ALT, kKey::Unknown); CASE(GLFW_KEY_RIGHT_SUPER, kKey::Unknown); CASE(GLFW_KEY_MENU, kKey::Unknown); -#endif - default: + default: return kKey::Unknown; } } +//#elif __XXX__ +//kKey convert_key(int key) +//{ +// switch (key) +// { +// default: +// return kKey::Unknown; +// } +//} +#endif +#undef CASE diff --git a/src/node_shorcuts.cpp b/src/node_shorcuts.cpp index e38b22c..8b7eb73 100644 --- a/src/node_shorcuts.cpp +++ b/src/node_shorcuts.cpp @@ -22,7 +22,12 @@ void NodeShortcuts::init_controls() m_btn_close->on_click = [this](Node*) { destroy(); }; - add_shortcut("New File", "Ctrl+N"); + add_shortcut("Quick switch to Erase", "Hold E"); + add_shortcut("Brush Size Keyboard", "[ and ]"); + add_shortcut("Brush Size", "Alt + Right Mouse Button"); + add_shortcut("Color picker", "Alt + Left Mouse Button"); + add_shortcut("Zoom", "Ctrl + Right Mouse Button"); + //add_shortcut("", ""); } void NodeShortcuts::add_shortcut(const std::string& descr, const std::string& shortcut) noexcept @@ -30,6 +35,7 @@ void NodeShortcuts::add_shortcut(const std::string& descr, const std::string& sh auto item = m_content->add_child(); item->set_descr(descr); item->set_shortcut(shortcut); + item->m_color = glm::vec4(glm::vec3(m_content->get_child_index(item) % 2 == 0 ? .1f : .0f), 1); } ////////////////////////////////////////////////////////////////////////// diff --git a/src/node_text.cpp b/src/node_text.cpp index 664a72e..8d007c9 100644 --- a/src/node_text.cpp +++ b/src/node_text.cpp @@ -60,6 +60,7 @@ void NodeText::set_font_size(int size) void NodeText::parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* attr) { Node::parse_attributes(ka, attr); + std::string id = attr->Name(); switch (ka) { case kAttribute::Multiline: @@ -106,6 +107,12 @@ void NodeText::parse_attributes(kAttribute ka, const tinyxml2::XMLAttribute* att default: break; } + if (id == "size") + m_font_size = attr->IntValue(); + else if (id == "weight") + m_font_weight = attr->Value(); + else if (id == "italic") + m_font_italic = attr->BoolValue(); } void NodeText::set_text(const std::string& s) diff --git a/src/serializer.h b/src/serializer.h index dd9336e..e1e5385 100644 --- a/src/serializer.h +++ b/src/serializer.h @@ -456,6 +456,11 @@ public: { return has(key) ? std::dynamic_pointer_cast(props.at(key)) : nullptr; } + void unset(const std::string& key) + { + if (has(key)) + props.erase(key); + } template std::shared_ptr set(const std::string& key, const T value) { if (auto ptr = get(key)) diff --git a/src/settings.h b/src/settings.h index b2a5599..2623d92 100644 --- a/src/settings.h +++ b/src/settings.h @@ -17,6 +17,10 @@ public: { I.Descriptor::set(key, value); } + static void unset(const std::string& key) + { + I.Descriptor::unset(key); + } template static std::shared_ptr get(const std::string& key) {