diff --git a/data/layout.xml b/data/layout.xml index 31a3e6c..ec600f5 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -1749,7 +1749,7 @@ Here's a list of what's available in this release. - + diff --git a/src/app_layout.cpp b/src/app_layout.cpp index d4f256f..646db13 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -1268,43 +1268,47 @@ void App::initLayout() toggle_ui(); }; - if (auto* slider = layout[main_id]->find("frames-slider")) + if (auto* timeline = layout[main_id]->find("timeline")) { - auto frame_text = layout[main_id]->find("timeline-frame"); - slider->on_value_changed = [this, frame_text](Node*, float value) + if (auto * slider = layout[main_id]->find("frames-slider")) { - auto& c = *Canvas::I; - - for (int i = 0; i < c.m_layers.size(); i++) + auto frame_text = layout[main_id]->find("timeline-frame"); + slider->on_value_changed = [this, frame_text](Node*, float value) { - auto l = layers->get_layer_at(i); - layers->handle_layer_opacity(l, .0f); - } + auto& c = *Canvas::I; - int current_layer = (int)glm::clamp( - floor(value * c.m_layers.size()), 1, (int)c.m_layers.size() - 1); - auto l = layers->get_layer_at(current_layer); - layers->handle_layer_selected(l); - layers->handle_layer_opacity(l, 1.f); - if (current_layer > 0) - { - auto l = layers->get_layer_at(current_layer - 1); - layers->handle_layer_opacity(l, .25f); - } + for (int i = 0; i < c.m_layers.size(); i++) + { + auto l = layers->get_layer_at(i); + layers->handle_layer_opacity(l, .0f); + } - // First layer always visible - { - auto l = layers->get_layer_at(0); - layers->handle_layer_opacity(l, 1.0f); - } + int current_layer = (int)glm::clamp( + floor(value * c.m_layers.size()), 1, (int)c.m_layers.size() - 1); + auto l = layers->get_layer_at(current_layer); + layers->handle_layer_selected(l); + layers->handle_layer_opacity(l, 1.f); + if (current_layer > 0) + { + auto l = layers->get_layer_at(current_layer - 1); + layers->handle_layer_opacity(l, .25f); + } - if (frame_text) - { - char str[16]; - snprintf(str, sizeof(str), "%02d", current_layer); - frame_text->set_text(str); - } - }; + // First layer always visible + { + auto l = layers->get_layer_at(0); + layers->handle_layer_opacity(l, 1.0f); + } + + if (frame_text) + { + char str[16]; + snprintf(str, sizeof(str), "%02d", current_layer); + frame_text->set_text(str); + } + }; + } + timeline->destroy(); } /* diff --git a/src/app_vr.cpp b/src/app_vr.cpp index 2bb60d9..ac75bd6 100644 --- a/src/app_vr.cpp +++ b/src/app_vr.cpp @@ -139,7 +139,8 @@ void App::vr_analog(const VRController& c, VRController::kButton b, VRController void App::vr_digital(const VRController& c, VRController::kButton b, VRController::kAction a, glm::vec2 axis) { - if (b == VRController::kButton::A && a == VRController::kAction::Press) + if ((b == VRController::kButton::A || b == VRController::kButton::Menu || b == VRController::kButton::Pad) + && a == VRController::kAction::Press) { if (glm::length(axis) < 0.5f) { diff --git a/src/brush.h b/src/brush.h index c816e9b..092eaf4 100644 --- a/src/brush.h +++ b/src/brush.h @@ -30,7 +30,7 @@ public: glm::vec2 m_tip_scale = { 1.f, 1.f }; glm::vec2 m_dual_scale = { 1.f, 1.f }; float m_tip_size = 50; - float m_tip_spacing = .25; + float m_tip_spacing = .05; float m_tip_flow = 1.f; float m_tip_opacity = 1.f; float m_tip_angle = 0; @@ -45,7 +45,7 @@ public: bool m_tip_angle_follow = false; bool m_tip_flow_pressure = false; bool m_tip_opacity_pressure = false; - bool m_tip_size_pressure = false; + bool m_tip_size_pressure = true; float m_jitter_scale = 0; float m_jitter_angle = 0; float m_jitter_scatter = 0; diff --git a/src/layout.h b/src/layout.h index 09f7336..de3d118 100644 --- a/src/layout.h +++ b/src/layout.h @@ -13,7 +13,7 @@ class LayoutManager { - std::map> m_layouts; + std::map> m_layouts; std::string m_path; struct stat m_file_info { 0 }; public: @@ -34,6 +34,11 @@ public: auto i = m_layouts.find(id); return i == m_layouts.end() ? nullptr : i->second.get(); } + class std::shared_ptr get_ref(const char* name) + { + auto i = m_layouts.find(const_hash(name)); + return i == m_layouts.end() ? nullptr : i->second; + } void restore_context(); void clear_context(); //Node& operator[](const char* ids) { return m_layouts[const_hash(ids)]; }