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)
{