From c0f9e13b92cb8886ac12f78962a965e927890292 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 28 Jul 2018 00:53:20 +0200 Subject: [PATCH] toggle ui with Tab, add hsv jitter --- data/layout.xml | 6 ++++++ engine/app.h | 1 + engine/app_events.cpp | 9 +++++++++ engine/app_layout.cpp | 5 ----- engine/brush.cpp | 5 +++++ engine/brush.h | 4 ++++ engine/canvas.cpp | 2 +- engine/event.h | 3 ++- engine/keymap.h | 4 ++-- engine/node_canvas.cpp | 3 +++ engine/node_panel_stroke.cpp | 6 ++++++ engine/node_panel_stroke.h | 3 +++ 12 files changed, 42 insertions(+), 9 deletions(-) diff --git a/data/layout.xml b/data/layout.xml index 99e13d4..43574f6 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -200,12 +200,18 @@ + + + + + + diff --git a/engine/app.h b/engine/app.h index efb53df..9802493 100644 --- a/engine/app.h +++ b/engine/app.h @@ -120,6 +120,7 @@ public: bool key_down(kKey key); bool key_up(kKey key); bool key_char(char key); + void toggle_ui(); void rec_clear(); void rec_loop(); diff --git a/engine/app_events.cpp b/engine/app_events.cpp index c1f20d5..effc834 100644 --- a/engine/app_events.cpp +++ b/engine/app_events.cpp @@ -185,3 +185,12 @@ bool App::key_char(char key) layout[main_id]->update(); return ret == kEventResult::Consumed; } + +void App::toggle_ui() +{ + static bool fullscreen = false; + auto m = layout[main_id]->m_children[0]; + for (int i = 2; i < m->m_children.size(); i++) + m->m_children[i]->m_display = fullscreen; + fullscreen = !fullscreen; +} diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp index cc08ef5..ae14c6f 100644 --- a/engine/app_layout.cpp +++ b/engine/app_layout.cpp @@ -661,11 +661,6 @@ void App::initLayout() layout[main_id]->add_child(butt); butt->on_click = [this](Node*){ - static bool fullscreen = false; - auto m = layout[main_id]->m_children[0]; - for (int i = 2; i < m->m_children.size(); i++) - m->m_children[i]->m_display = fullscreen; - fullscreen = !fullscreen; }; if (auto* slider = layout[main_id]->find("frames-slider")) diff --git a/engine/brush.cpp b/engine/brush.cpp index 12b405b..6cb8307 100644 --- a/engine/brush.cpp +++ b/engine/brush.cpp @@ -143,6 +143,11 @@ ui::StrokeSample ui::Stroke::randomize_sample(const glm::vec2& pos, float pressu s.pos = pos + (rnd_vec() * m_brush.m_jitter_spread * 100.f); s.size = 800.f * m_brush.m_tip_size * (1.f - rnd_nor() * m_brush.m_jitter_scale) * size_dyn; s.flow = m_brush.m_tip_flow * (1.f - rnd_nor() * m_brush.m_jitter_flow) * flow_dyn; + auto hsv = convert_rgb2hsv(m_brush.m_tip_color); + hsv.x = hsv.x + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue; + hsv.y = hsv.y + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat; + hsv.z = hsv.z + (rnd_nor() - 0.5f) * m_brush.m_jitter_val; + s.col = convert_hsv2rgb(hsv); return s; } std::vector ui::Stroke::compute_samples() diff --git a/engine/brush.h b/engine/brush.h index c7a9e92..5b31e8d 100644 --- a/engine/brush.h +++ b/engine/brush.h @@ -26,11 +26,15 @@ public: float m_jitter_angle = 0; float m_jitter_spread = 0; float m_jitter_flow = 0; + float m_jitter_hue = 0; + float m_jitter_sat = 0; + float m_jitter_val = 0; int m_blend_mode = 0; }; struct StrokeSample { + glm::vec3 col = { 0, 0, 0 }; glm::vec2 pos = { 0, 0 }; glm::vec2 origin = { 0,0 }; float size = 0; diff --git a/engine/canvas.cpp b/engine/canvas.cpp index 183bd1e..2782e94 100644 --- a/engine/canvas.cpp +++ b/engine/canvas.cpp @@ -278,7 +278,6 @@ void ui::Canvas::stroke_draw() ShaderManager::u_int(kShaderUniform::TexBG, 1); // bg #endif ShaderManager::u_int(kShaderUniform::TexStencil, 3); // stencil - ShaderManager::u_vec4(kShaderUniform::Col, m_brush.m_tip_color); ShaderManager::u_vec2(kShaderUniform::Resolution, { m_width, m_height }); ShaderManager::u_vec2(kShaderUniform::StencilOffset, stencil_offset); ShaderManager::u_float(kShaderUniform::StencilAlpha, m_brush.m_tip_stencil); @@ -351,6 +350,7 @@ void ui::Canvas::stroke_draw() ); ShaderManager::u_mat4(kShaderUniform::MVP, ortho_proj); + ShaderManager::u_vec4(kShaderUniform::Col, glm::vec4(s.col, m_brush.m_tip_color.a)); ShaderManager::u_float(kShaderUniform::Alpha, s.flow); m_plane_brush.update_vertices(P); m_plane_brush.draw_fill(); diff --git a/engine/event.h b/engine/event.h index c081a5f..aaffe40 100644 --- a/engine/event.h +++ b/engine/event.h @@ -9,7 +9,8 @@ enum class kKey : uint8_t AndroidBack, KeySpacebar, KeyE, - KeyAlt + KeyAlt, + KeyTab, }; enum class kEventResult : uint8_t diff --git a/engine/keymap.h b/engine/keymap.h index 029a467..dc67958 100644 --- a/engine/keymap.h +++ b/engine/keymap.h @@ -189,7 +189,7 @@ kKey convert_key(int key) CASE(kVK_ANSI_Keypad8, kKey::Unknown); CASE(kVK_ANSI_Keypad9, kKey::Unknown); CASE(kVK_Return, kKey::Unknown); - CASE(kVK_Tab, kKey::Unknown); + CASE(kVK_Tab, kKey::KeyTab); CASE(kVK_Space, kKey::Unknown); CASE(kVK_Delete, kKey::Unknown); CASE(kVK_Escape, kKey::Unknown); @@ -243,7 +243,7 @@ kKey convert_key(int key) CASE(VK_XBUTTON1, kKey::Unknown); CASE(VK_XBUTTON2, kKey::Unknown); CASE(VK_BACK, kKey::Unknown); - CASE(VK_TAB, kKey::Unknown); + CASE(VK_TAB, kKey::KeyTab); CASE(VK_CLEAR, kKey::Unknown); CASE(VK_RETURN, kKey::Unknown); CASE(VK_SHIFT, kKey::Unknown); diff --git a/engine/node_canvas.cpp b/engine/node_canvas.cpp index 9ac1d80..7cc60e5 100644 --- a/engine/node_canvas.cpp +++ b/engine/node_canvas.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include "app.h" #include "log.h" #include "node_canvas.h" @@ -312,6 +313,8 @@ kEventResult NodeCanvas::handle_event(Event* e) ui::Canvas::set_mode(ui::Canvas::kCanvasMode::Draw); // if (ke->m_key == kKey::KeySpacebar) // m_canvas->m_alpha_lock = false; + if (ke->m_key == kKey::KeyTab) + App::I.toggle_ui(); break; case kEventType::GestureStart: mouse_capture(); diff --git a/engine/node_panel_stroke.cpp b/engine/node_panel_stroke.cpp index 6bf244e..293b173 100644 --- a/engine/node_panel_stroke.cpp +++ b/engine/node_panel_stroke.cpp @@ -35,6 +35,9 @@ void NodePanelStroke::update_controls() m_jitter_angle->m_value.x = b.m_jitter_angle; m_jitter_spread->m_value.x = b.m_jitter_spread; m_jitter_flow->m_value.x = b.m_jitter_flow; + m_jitter_hue->m_value.x = b.m_jitter_hue; + m_jitter_sat->m_value.x = b.m_jitter_sat; + m_jitter_val->m_value.x = b.m_jitter_val; m_tip_angle_follow->checked = b.m_tip_angle_follow; m_tip_flow_pressure->checked = b.m_tip_flow_pressure; m_tip_size_pressure->checked = b.m_tip_size_pressure; @@ -62,6 +65,9 @@ void NodePanelStroke::init_controls() init_slider(m_jitter_angle, "jitter-angle", &ui::Brush::m_jitter_angle); init_slider(m_jitter_spread, "jitter-spread", &ui::Brush::m_jitter_spread); init_slider(m_jitter_flow, "jitter-flow", &ui::Brush::m_jitter_flow); + init_slider(m_jitter_hue, "jitter-hue", &ui::Brush::m_jitter_hue); + init_slider(m_jitter_sat, "jitter-sat", &ui::Brush::m_jitter_sat); + init_slider(m_jitter_val, "jitter-val", &ui::Brush::m_jitter_val); m_curves[m_tip_size] = [](float v){ return glm::pow(v, 3.f); }; m_curves[m_tip_spacing] = [](float v){ return glm::pow(v * 4.f, 2.f); }; m_curves[m_tip_flow] = [](float v){ return glm::pow(v, 2.f); }; diff --git a/engine/node_panel_stroke.h b/engine/node_panel_stroke.h index 4faf743..316ce67 100644 --- a/engine/node_panel_stroke.h +++ b/engine/node_panel_stroke.h @@ -23,6 +23,9 @@ public: NodeSliderH* m_jitter_angle; NodeSliderH* m_jitter_spread; NodeSliderH* m_jitter_flow; + NodeSliderH* m_jitter_hue; + NodeSliderH* m_jitter_sat; + NodeSliderH* m_jitter_val; NodeCheckBox* m_tip_angle_follow; NodeCheckBox* m_tip_flow_pressure; NodeCheckBox* m_tip_size_pressure;