integrate quick brushes, simulate pressed keys on windows active
This commit is contained in:
@@ -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>
|
||||
|
||||
22
src/app.cpp
22
src/app.cpp
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
14
src/main.cpp
14
src/main.cpp
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user