implement alpha locking per layer
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user