toggle ui with Tab, add hsv jitter
This commit is contained in:
@@ -200,12 +200,18 @@
|
||||
<node height="20" justify="center"><text text="Angle" font-face="arial" font-size="11"/></node>
|
||||
<node height="20" justify="center"><text text="Spread" font-face="arial" font-size="11"/></node>
|
||||
<node height="20" justify="center"><text text="Flow" font-face="arial" font-size="11"/></node>
|
||||
<node height="20" justify="center"><text text="Hue" font-face="arial" font-size="11"/></node>
|
||||
<node height="20" justify="center"><text text="Saturation" font-face="arial" font-size="11"/></node>
|
||||
<node height="20" justify="center"><text text="Value" font-face="arial" font-size="11"/></node>
|
||||
</node>
|
||||
<border dir="col" align="center" grow="1" width="1">
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-scale"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-angle"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-spread"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-flow"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-hue"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-sat"/></node>
|
||||
<node height="20" pad="1" width="100%"><slider-h id="jitter-val"/></node>
|
||||
</border>
|
||||
</node>
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<NodeSliderH>("frames-slider"))
|
||||
|
||||
@@ -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::StrokeSample> ui::Stroke::compute_samples()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -9,7 +9,8 @@ enum class kKey : uint8_t
|
||||
AndroidBack,
|
||||
KeySpacebar,
|
||||
KeyE,
|
||||
KeyAlt
|
||||
KeyAlt,
|
||||
KeyTab,
|
||||
};
|
||||
|
||||
enum class kEventResult : uint8_t
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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); };
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user