diff --git a/data/layout.xml b/data/layout.xml index 43574f6..46746e0 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -156,6 +156,9 @@ + + + @@ -190,6 +193,24 @@ + + + + + + + + + + + + + + + + + + @@ -201,8 +222,8 @@ - - + + diff --git a/engine/brush.cpp b/engine/brush.cpp index 6cb8307..7fe3580 100644 --- a/engine/brush.cpp +++ b/engine/brush.cpp @@ -144,9 +144,9 @@ ui::StrokeSample ui::Stroke::randomize_sample(const glm::vec2& pos, float pressu 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; + hsv.x = hsv.x + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue + (pressure * 2.0f - 0.5f) * m_brush.m_tip_hue * m_brush.m_tip_hue_pressure; + hsv.y = hsv.y + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat + (pressure * 2.0f - 0.5f) * m_brush.m_tip_sat * m_brush.m_tip_sat_pressure; + hsv.z = hsv.z + (rnd_nor() - 0.5f) * m_brush.m_jitter_val + (pressure * 2.0f - 0.5f) * m_brush.m_tip_val * m_brush.m_tip_val_pressure; s.col = convert_hsv2rgb(hsv); return s; } diff --git a/engine/brush.h b/engine/brush.h index 5b31e8d..369d0c6 100644 --- a/engine/brush.h +++ b/engine/brush.h @@ -19,9 +19,15 @@ public: float m_tip_stencil = 0; float m_tip_wet = 0; float m_tip_noise = 0; + float m_tip_hue = 0; + float m_tip_sat = 0; + float m_tip_val = 0; bool m_tip_angle_follow = false; bool m_tip_flow_pressure = false; bool m_tip_size_pressure = false; + bool m_tip_hue_pressure = false; + bool m_tip_sat_pressure = false; + bool m_tip_val_pressure = false; float m_jitter_scale = 0; float m_jitter_angle = 0; float m_jitter_spread = 0; diff --git a/engine/node_panel_stroke.cpp b/engine/node_panel_stroke.cpp index 293b173..9ce4148 100644 --- a/engine/node_panel_stroke.cpp +++ b/engine/node_panel_stroke.cpp @@ -61,6 +61,9 @@ void NodePanelStroke::init_controls() init_slider(m_tip_stencil, "tip-stencil", &ui::Brush::m_tip_stencil); init_slider(m_tip_wet, "tip-wet", &ui::Brush::m_tip_wet); init_slider(m_tip_noise, "tip-noise", &ui::Brush::m_tip_noise); + init_slider(m_tip_hue, "tip-hue", &ui::Brush::m_tip_hue); + init_slider(m_tip_sat, "tip-sat", &ui::Brush::m_tip_sat); + init_slider(m_tip_val, "tip-val", &ui::Brush::m_tip_val); init_slider(m_jitter_scale, "jitter-scale", &ui::Brush::m_jitter_scale); init_slider(m_jitter_angle, "jitter-angle", &ui::Brush::m_jitter_angle); init_slider(m_jitter_spread, "jitter-spread", &ui::Brush::m_jitter_spread); @@ -75,6 +78,9 @@ void NodePanelStroke::init_controls() init_checkbox(m_tip_angle_follow, "tip-angle-follow", &ui::Brush::m_tip_angle_follow); init_checkbox(m_tip_flow_pressure, "tip-flow-pressure", &ui::Brush::m_tip_flow_pressure); init_checkbox(m_tip_size_pressure, "tip-size-pressure", &ui::Brush::m_tip_size_pressure); + init_checkbox(m_tip_hue_pressure, "tip-hue-pressure", &ui::Brush::m_tip_hue_pressure); + init_checkbox(m_tip_sat_pressure, "tip-sat-pressure", &ui::Brush::m_tip_sat_pressure); + init_checkbox(m_tip_val_pressure, "tip-val-pressure", &ui::Brush::m_tip_val_pressure); m_preview->m_brush = ui::Canvas::I->m_current_brush; m_preview->draw_stroke(); diff --git a/engine/node_panel_stroke.h b/engine/node_panel_stroke.h index 316ce67..9dac511 100644 --- a/engine/node_panel_stroke.h +++ b/engine/node_panel_stroke.h @@ -19,6 +19,9 @@ public: NodeSliderH* m_tip_stencil; NodeSliderH* m_tip_wet; NodeSliderH* m_tip_noise; + NodeSliderH* m_tip_hue; + NodeSliderH* m_tip_sat; + NodeSliderH* m_tip_val; NodeSliderH* m_jitter_scale; NodeSliderH* m_jitter_angle; NodeSliderH* m_jitter_spread; @@ -29,6 +32,9 @@ public: NodeCheckBox* m_tip_angle_follow; NodeCheckBox* m_tip_flow_pressure; NodeCheckBox* m_tip_size_pressure; + NodeCheckBox* m_tip_hue_pressure; + NodeCheckBox* m_tip_sat_pressure; + NodeCheckBox* m_tip_val_pressure; std::function on_stroke_change; std::map> m_curves;