toggle ui with Tab, add hsv jitter

This commit is contained in:
2018-07-28 00:53:20 +02:00
parent 9b5094f510
commit c0f9e13b92
12 changed files with 42 additions and 9 deletions

View File

@@ -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>

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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"))

View File

@@ -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()

View File

@@ -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;

View File

@@ -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();

View File

@@ -9,7 +9,8 @@ enum class kKey : uint8_t
AndroidBack,
KeySpacebar,
KeyE,
KeyAlt
KeyAlt,
KeyTab,
};
enum class kEventResult : uint8_t

View File

@@ -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);

View File

@@ -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();

View File

@@ -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); };

View File

@@ -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;