integrate quick brushes, simulate pressed keys on windows active

This commit is contained in:
2019-03-05 23:41:43 +01:00
parent 1cbe9a4a76
commit b0933c29fb
8 changed files with 79 additions and 44 deletions

View File

@@ -84,9 +84,9 @@
</layout>
<layout id="tpl-brush-preset">
<button-custom width="300" height="70" margin="1" pad="5" align="center" justify="center" dir="row">
<node width="30" align="center">
<!--<node width="30" align="center">
<checkbox icon="data/ui/check-lock-transparency.png" width="20" height="20" pad="0"/>
</node>
</node>-->
<border color="1" width="40" height="60" align="center" justify="center" dir="col">
<image id="thumb" width="40" height="40"/>
<text id="caption-size" text="000" color="0" margin="3 0 0 0"/>
@@ -1471,7 +1471,7 @@ Here's a list of what's available in this release.
<!-- PANEL QUICK -->
<layout id="tpl-panel-quick">
<border color="0 0 0 0.3" width="80" dir="col" pad="5" align="center" mouse-capture="true" shrink="1">
<border color="0 0 0 0.6" width="80" dir="col" pad="5" align="center" mouse-capture="true" shrink="1">
<node dir="row" pad="5">
<!--size-->
<node dir="col" margin="0 4 0 0" align="center">
@@ -1541,7 +1541,7 @@ Here's a list of what's available in this release.
</node>
</border>
<!-- toolbar -->
<border id="toolbar" height="60" width="100%" pad="5" dir="row" color=".2 .2 .2 .6" mouse-capture="true">
<border id="toolbar" height="60" width="100%" pad="5" dir="row" color="0 0 0 0.6" mouse-capture="true">
<!--
<button id="btn-open" width="50" height="100%" margin="0 5 0 0" text="Open"/>
<button id="btn-save" width="50" height="100%" margin="0 5 0 0" text="Save"/>
@@ -1566,7 +1566,7 @@ Here's a list of what's available in this release.
<text text="About"/>
</button-custom>
<!--<button id="btn-anim" width="70" height="100%" margin="1 0 0 10" text="Animate"/>-->
<node dir="row" margin="0 0 0 30">
<node dir="row" margin="0 0 0 50">
<!--panel togglers-->
<button-custom id="btn-stroke" width="50" height="50" margin="0 5 0 0" thickness="1" border-color=".1" pad="2">
<image path="data/ui/stroke.png" width="100%" height="100%" align="center" justify="flex-end"/>
@@ -1596,8 +1596,8 @@ Here's a list of what's available in this release.
</border>
<!-- central row -->
<node grow="1" dir="row" wrap="1" height="0" id="central-row">
<border color=".2 .2 .2 .6" pad="0 5 0 0" justify="center" dir="col" flood-events="1" mouse-capture="true">
<node margin="0 0 40 0" wrap="1" >
<border color="0 0 0 0.6" pad="0 5 0 0" justify="center" dir="col" flood-events="1" mouse-capture="true">
<node margin="0 0 50 0" wrap="1" >
<button-custom id="btn-pen" width="40" height="40" margin="2 0 2 5" thickness="1" border-color="0 0 0 1" pad="2">
<image path="data/ui/pen.png" width="100%" height="100%" align="center" justify="flex-end"/>
</button-custom>

View File

@@ -619,23 +619,23 @@ void App::update(float dt)
#else
glBindFramebuffer(GL_FRAMEBUFFER, 0);
#endif
//canvas->watch(observer);
glEnable(GL_SCISSOR_TEST);
for (int i = 0; i < layout[main_id]->m_children.size(); i++)
layout[main_id]->m_children[i]->watch(observer);
//msgbox->watch(observer);
glDisable(GL_SCISSOR_TEST);
// glEnable(GL_BLEND);
// sampler.bind(0);
// ShaderManager::use(kShader::Texture);
// ShaderManager::u_int(kShaderUniform::Tex, 0);
// ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1.f, 1.f, -1.f, 1.f));
// glActiveTexture(GL_TEXTURE0);
// uirtt.bindTexture();
// m_face_plane.draw_fill();
// uirtt.unbindTexture();
// glDisable(GL_BLEND);
//canvas->watch(observer);
//glEnable(GL_BLEND);
//sampler.bind(0);
//ShaderManager::use(kShader::Texture);
//ShaderManager::u_int(kShaderUniform::Tex, 0);
//ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1.f, 1.f, -1.f, 1.f));
//glActiveTexture(GL_TEXTURE0);
//uirtt.bindTexture();
//m_face_plane.draw_fill();
//uirtt.unbindTexture();
//glDisable(GL_BLEND);
if (rec_running)
{

View File

@@ -116,6 +116,7 @@ void App::init_sidebar()
//presets = find_or_create_panel<NodePanelBrushPreset>(panels);
canvas->m_canvas->on_mode_changed = [this](kCanvasMode prev, kCanvasMode mode) {
brush_update();
};
color->on_color_changed = [this](Node* target, glm::vec4 color) {
Canvas::I->m_current_brush->m_tip_color = color;
@@ -124,19 +125,18 @@ void App::init_sidebar()
stroke->on_brush_changed = [this](Node* target, const std::string& path, const std::string& thumb) {
Canvas::I->m_current_brush->load_tip(path, thumb);
stroke->m_preview->draw_stroke();
brush_update();
};
stroke->on_pattern_changed = [this](Node*target, const std::string& path, const std::string& thumb) {
Canvas::I->m_current_brush->load_pattern(path, thumb);
stroke->m_preview->draw_stroke();
brush_update();
};
stroke->on_dual_changed = [this](Node*target, const std::string& path, const std::string& thumb) {
Canvas::I->m_current_brush->load_dual(path, thumb);
stroke->m_preview->draw_stroke();
brush_update();
};
stroke->on_stroke_change = [this](Node*) {
quick->m_slider_flow->set_value(stroke->m_tip_flow->get_value());
quick->m_slider_size->set_value(stroke->m_tip_size->get_value());
brush_update();
};
quick->on_color_change = [this](Node*, glm::vec3 c) {
@@ -150,9 +150,8 @@ void App::init_sidebar()
stroke->set_size(value, true, true);
};
quick->on_brush_change = [this](Node*, std::shared_ptr<Brush> b) {
Canvas::I->m_current_brush = b;
stroke->m_preview->m_brush = b;
stroke->m_preview->draw_stroke();
*Canvas::I->m_current_brush = *b;
brush_update();
};
layers->on_layer_add = [this](Node*) {
@@ -807,6 +806,8 @@ void App::brush_update()
stroke->update_controls();
quick->m_slider_flow->set_value(stroke->m_tip_flow->get_value());
quick->m_slider_size->set_value(stroke->m_tip_size->get_value());
*quick->m_button_brush_current_preview->m_brush = *Canvas::I->m_current_brush;
quick->m_button_brush_current_preview->draw_stroke();
}
void App::init_menu_layer()
@@ -968,7 +969,7 @@ void App::initLayout()
butt->set_color({ 0, 0, 0, 0 });
//n->SetPosition(100, 100);
YGNodeStyleSetPosition(butt->y_node, YGEdgeBottom, 8);
YGNodeStyleSetPosition(butt->y_node, YGEdgeLeft, 15);
YGNodeStyleSetPosition(butt->y_node, YGEdgeLeft, 10);
//butt->SetSize(30, 45);
layout[main_id]->add_child(butt);

View File

@@ -265,16 +265,14 @@ void CanvasModePen::leave()
void CanvasModePen::enter(kCanvasMode prev)
{
m_cur_pos = Canvas::I->m_cur_pos;
if (m_brush)
{
*Canvas::I->m_current_brush = *m_brush;
Canvas::I->m_current_brush->load();
App::I.brush_update();
}
else
if (!m_brush)
{
m_brush = std::make_shared<Brush>(*Canvas::I->m_current_brush);
m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
}
*Canvas::I->m_current_brush = *m_brush;
Canvas::I->m_current_brush->load();
App::I.brush_update();
}
////////////////////////////////////////////////////////////////////
@@ -337,6 +335,23 @@ void CanvasModeLine::init()
m_line.create();
}
void CanvasModeLine::enter(kCanvasMode prev)
{
if (!m_brush)
{
m_brush = std::make_shared<Brush>();
m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
}
*Canvas::I->m_current_brush = *m_brush;
Canvas::I->m_current_brush->load();
App::I.brush_update();
}
void CanvasModeLine::leave()
{
*m_brush = *Canvas::I->m_current_brush;
}
////////////////////////////////////////////////////////////////////
void CanvasModeCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc)

View File

@@ -70,7 +70,6 @@ class CanvasModePen : public CanvasMode
bool m_draw_tip = false;
bool m_dragging = false;
glm::vec2 m_pan_start;
glm::vec2 m_cur_pos;
glm::vec2 m_size_pos_start;
float m_size_value_start;
float m_camera_fov;
@@ -88,6 +87,7 @@ public:
virtual void enter(kCanvasMode prev) override;
virtual void leave() override;
bool m_picking = false;
glm::vec2 m_cur_pos;
};
class CanvasModeLine : public CanvasMode
@@ -96,10 +96,13 @@ class CanvasModeLine : public CanvasMode
bool m_dragging = false;
glm::vec2 m_drag_start;
glm::vec2 m_drag_pos;
std::shared_ptr<Brush> m_brush;
public:
virtual void on_MouseEvent(MouseEvent* me, glm::vec2& loc) override;
virtual void on_Draw(const glm::mat4& ortho, const glm::mat4& proj, const glm::mat4& camera) override;
virtual void init() override;
virtual void enter(kCanvasMode prev) override;
virtual void leave() override;
};
class CanvasModeGrid : public CanvasMode

View File

@@ -877,6 +877,18 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
}
}
}
else
{
for (int i = 0; i < 256; i++)
{
if ((int)convert_key(i) == k)
{
bool down = GetKeyState(i) & 0x8000;
if (down)
App::I.key_down((kKey)k);
}
}
}
}
});
break;
@@ -901,7 +913,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
}
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
if ((lp >> 30 & 1) == 0) // ignore repeated
{
std::lock_guard<std::mutex> lock(task_mutex);
tasklist.emplace_back([wp] {
App::I.key_down(convert_key((int)wp));

View File

@@ -30,12 +30,6 @@ void NodePanelQuick::set_color(glm::vec3 color)
void NodePanelQuick::init_controls()
{
//auto s = find<NodeStrokePreview>("quick-brush1");
//s->m_brush = std::make_shared<Brush>();
//s->m_max_size = 10;
//s->m_brush->load_tip("data/brushes/Round-Hard.png", "data/brushes/thumbs/Round-Hard.png");
//s->draw_stroke();
m_picker = std::make_shared<NodeColorPicker>();
m_picker->m_manager = m_manager;
m_picker->init();
@@ -47,13 +41,17 @@ void NodePanelQuick::init_controls()
m_slider_size = find<NodeSliderV>("quick-size");
m_slider_size->on_value_changed = [this](Node* target, float value) {
static_cast<NodeStrokePreview*>(m_button_brush_current->m_children[0].get())->draw_stroke();
auto m = static_cast<CanvasModePen*>(Canvas::I->modes[(int)kCanvasMode::Draw][0]);
m->m_cur_pos = m_pos + glm::vec2(m_size.x / 2.f, -50.f);
m_button_brush_current_preview->draw_stroke();
if (on_size_change)
on_size_change(target, value);
};
m_slider_flow = find<NodeSliderV>("quick-flow");
m_slider_flow->on_value_changed = [this](Node* target, float value) {
static_cast<NodeStrokePreview*>(m_button_brush_current->m_children[0].get())->draw_stroke();
auto m = static_cast<CanvasModePen*>(Canvas::I->modes[(int)kCanvasMode::Draw][0]);
m->m_cur_pos = m_pos + glm::vec2(m_size.x / 2.f, -50.f);
m_button_brush_current_preview->draw_stroke();
if (on_flow_change)
on_flow_change(target, value);
};
@@ -78,6 +76,7 @@ void NodePanelQuick::init_controls()
m_button_brush3 = init_button_brush("quick-brush3");
m_button_brush_current = m_button_brush1;
m_button_brush_current->set_active(true);
m_button_brush_current_preview = static_cast<NodeStrokePreview*>(m_button_brush_current->m_children[0].get());
}
NodeButtonCustom* NodePanelQuick::init_button_brush(const std::string& name)
@@ -103,8 +102,9 @@ void NodePanelQuick::handle_button_brush_click(Node* button)
b->set_active(true);
m_button_brush_current->set_active(false);
m_button_brush_current = b;
m_button_brush_current_preview = static_cast<NodeStrokePreview*>(button->m_children[0].get());
if (on_brush_change)
on_brush_change(this, static_cast<NodeStrokePreview*>(button->m_children[0].get())->m_brush);
on_brush_change(this, m_button_brush_current_preview->m_brush);
return;
}

View File

@@ -4,6 +4,7 @@
#include "node_border.h"
#include "node_dialog_picker.h"
#include "brush.h"
#include "node_stroke_preview.h"
class NodePanelQuick : public NodeBorder
{
@@ -25,6 +26,7 @@ public:
NodeButtonCustom* m_button_brush2;
NodeButtonCustom* m_button_brush3;
NodeButtonCustom* m_button_brush_current;
NodeStrokePreview* m_button_brush_current_preview;
std::shared_ptr<NodeColorPicker> m_picker;
virtual Node* clone_instantiate() const override;
virtual void clone_finalize(Node* dest) const override;