implement alpha locking per layer

This commit is contained in:
2017-05-02 03:43:16 +01:00
parent 182c0b1baf
commit 9f23021fb8
7 changed files with 77 additions and 11 deletions

View File

@@ -1192,6 +1192,7 @@ public:
class NodeCheckBox : public Node
{
public:
std::function<void(Node* target, bool checked)> on_value_changed;
NodeBorder* m_outer;
NodeBorder* m_inner;
bool checked = false;
@@ -1244,6 +1245,8 @@ public:
break;
case kEventType::MouseUpL:
checked = !checked;
if (on_value_changed)
on_value_changed(this, checked);
break;
default:
return kEventResult::Available;
@@ -1263,6 +1266,7 @@ class NodeLayer : public NodeBorder
public:
std::function<void(NodeLayer* target)> on_selected;
std::function<void(NodeLayer* target, float opacity)> on_opacity_changed;
std::function<void(NodeLayer* target, bool visible)> on_visibility_changed;
bool m_selected = false;
glm::vec4 m_color_normal = glm::vec4(.4, .4, .4, 1);
glm::vec4 m_color_selected = glm::vec4(.3, .3, .3, 1);
@@ -1319,6 +1323,10 @@ public:
if (on_opacity_changed)
on_opacity_changed(this, value);
};
m_visibility->on_value_changed = [this](Node*, bool checked) {
if (on_visibility_changed)
on_visibility_changed(this, checked);
};
}
virtual kEventResult handle_event(Event* e) override
{
@@ -1366,6 +1374,7 @@ class NodePanelLayer : public Node
public:
std::function<void(Node* target, int old_idx, int new_idx)> on_layer_change;
std::function<void(Node* target, int idx, float value)> on_layer_opacity_changed;
std::function<void(Node* target, int idx, bool visible)> on_layer_visibility_changed;
std::function<void(Node* target, int index)> on_layer_delete;
std::function<void(Node* target)> on_layer_add;
std::function<void(Node* target, int old_idx, int new_idx)> on_layer_order;
@@ -1439,6 +1448,7 @@ public:
l->set_name(name);
l->on_selected = std::bind(&NodePanelLayer::handle_layer_selected, this, std::placeholders::_1);
l->on_opacity_changed = std::bind(&NodePanelLayer::handle_layer_opacity, this, std::placeholders::_1, std::placeholders::_2);
l->on_visibility_changed = std::bind(&NodePanelLayer::handle_layer_visibility, this, std::placeholders::_1, std::placeholders::_2);
m_layers.push_back(l);
}
void remove_layer(NodeLayer* layer)
@@ -1460,6 +1470,11 @@ public:
if (on_layer_opacity_changed)
on_layer_opacity_changed(this, m_layers_container->get_child_index(target), value);
}
void handle_layer_visibility(NodeLayer* target, bool visible)
{
if (on_layer_visibility_changed)
on_layer_visibility_changed(this, m_layers_container->get_child_index(target), visible);
}
void handle_layer_selected(NodeLayer* target)
{
if (m_current_layer)
@@ -1945,7 +1960,6 @@ class NodeCanvas : public Node
float m_camera_fov;
float m_zoom_canvas = 1.f;
float m_zoom_start;
bool method = true;
public:
std::string data_path;
std::unique_ptr<ui::Canvas> m_canvas;
@@ -2033,7 +2047,6 @@ public:
}
if (m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index)
{
glEnable(GL_BLEND);
ui::ShaderManager::u_float(kShaderUniform::Alpha,
m_canvas->m_current_stroke->m_brush.m_tip_opacity * m_canvas->m_layers[layer_index].m_opacity);
m_canvas->m_tmp[plane_index].bindTexture();
@@ -2112,10 +2125,9 @@ public:
break;
case kEventType::KeyDown:
if (ke->m_key == kKey::KeyE)
{
m_canvas->m_erase = true;
method = !method;
}
if (ke->m_key == kKey::KeySpacebar)
m_canvas->m_alpha_lock = true;
if (ke->m_key == kKey::AndroidVolumeUp)
m_zoom_canvas *= 0.9f;
if (ke->m_key == kKey::AndroidVolumeDown)
@@ -2124,6 +2136,8 @@ public:
case kEventType::KeyUp:
if (ke->m_key == kKey::KeyE)
m_canvas->m_erase = false;
if (ke->m_key == kKey::KeySpacebar)
m_canvas->m_alpha_lock = false;
break;
case kEventType::GestureStart:
m_pan_start = m_pan;