add frame duplicate

This commit is contained in:
2019-10-20 17:09:44 +02:00
parent 0d575be198
commit ad03c601ad
7 changed files with 63 additions and 0 deletions

View File

@@ -244,6 +244,11 @@ void Layer::remove_frame(int frame)
m_frame_index = glm::clamp(m_frame_index, 0, (int)m_frames.size() - 1); m_frame_index = glm::clamp(m_frame_index, 0, (int)m_frames.size() - 1);
} }
void Layer::duplicate_frame(int frame)
{
m_frames.insert(m_frames.begin() + frame + 1, m_frames[frame].clone());
}
int Layer::total_duration() const noexcept int Layer::total_duration() const noexcept
{ {
int duration = 0; int duration = 0;
@@ -436,3 +441,18 @@ void LayerFrame::clear(const glm::vec4& c)
glClearColor(cc[0], cc[1], cc[2], cc[3]); glClearColor(cc[0], cc[1], cc[2], cc[3]);
}); });
} }
LayerFrame LayerFrame::clone() const noexcept
{
LayerFrame dup;
dup.m_duration = m_duration;
dup.w = w;
dup.h = h;
for (int i = 0; i < 6; i++)
{
dup.m_rtt[i] = m_rtt[i].clone();
dup.m_dirty_box[i] = m_dirty_box[i];
dup.m_dirty_face[i] = m_dirty_face[i];
}
return dup;
}

View File

@@ -23,6 +23,7 @@ struct LayerFrame
bool create(int width, int height, int duration = 1); bool create(int width, int height, int duration = 1);
bool resize(int width, int height); bool resize(int width, int height);
void clear(const glm::vec4& c); void clear(const glm::vec4& c);
LayerFrame clone() const noexcept;
}; };
class Layer class Layer
@@ -62,6 +63,7 @@ public:
bool create(int width, int height, std::string name); bool create(int width, int height, std::string name);
bool add_frame(); bool add_frame();
void remove_frame(int frame); void remove_frame(int frame);
void duplicate_frame(int frame);
int total_duration() const noexcept; int total_duration() const noexcept;
void goto_frame(int frame) noexcept; void goto_frame(int frame) noexcept;
void clear(const glm::vec4& c, int frame = -1); void clear(const glm::vec4& c, int frame = -1);

View File

@@ -813,6 +813,30 @@ void Node::SetSize(glm::vec2 value)
app_redraw(); app_redraw();
} }
void Node::SetMinSize(float w, float h)
{
SetMinWidth(w);
SetMinHeight(h);
}
void Node::SetMinSize(glm::vec2 value)
{
SetMinWidth(value.x);
SetMinHeight(value.y);
}
void Node::SetMaxSize(float w, float h)
{
SetMaxWidth(w);
SetMaxHeight(h);
}
void Node::SetMaxSize(glm::vec2 value)
{
SetMaxWidth(value.x);
SetMaxHeight(value.y);
}
void Node::SetMaxWidth(float value) void Node::SetMaxWidth(float value)
{ {
YGNodeStyleSetMaxWidth(y_node, value); YGNodeStyleSetMaxWidth(y_node, value);

View File

@@ -156,6 +156,10 @@ public:
void SetHeightP(float value); void SetHeightP(float value);
void SetSize(glm::vec2 value); void SetSize(glm::vec2 value);
void SetSize(float w, float h); void SetSize(float w, float h);
void SetMinSize(float w, float h);
void SetMaxSize(float w, float h);
void SetMinSize(glm::vec2 value);
void SetMaxSize(glm::vec2 value);
void SetMaxWidth(float value); void SetMaxWidth(float value);
void SetMaxWidthP(float value); void SetMaxWidthP(float value);
void SetMaxHeight(float value); void SetMaxHeight(float value);

View File

@@ -45,6 +45,10 @@ void NodePanelAnimation::init_controls()
Canvas::I->layer().add_frame(); Canvas::I->layer().add_frame();
load_layers(); load_layers();
}; };
btn_duplicate->on_click = [this](Node*) {
Canvas::I->layer().duplicate_frame(m_selected_frame_index);
load_layers();
};
btn_remove->on_click = [this](Node*) { btn_remove->on_click = [this](Node*) {
Canvas::I->layer_with_id(m_selected_frame_layer_id)->remove_frame(m_selected_frame_index); Canvas::I->layer_with_id(m_selected_frame_layer_id)->remove_frame(m_selected_frame_index);
load_layers(); load_layers();

View File

@@ -174,6 +174,14 @@ void RTT::copy(const RTT& source, const glm::vec4& rect)
}); });
} }
RTT RTT::clone() const noexcept
{
RTT dup;
dup.create(w, h);
dup.copy(*this);
return dup;
}
bool RTT::create(int width, int height, int tex/* = -1*/, GLint internal_format, bool depth_buffer /*= false*/) bool RTT::create(int width, int height, int tex/* = -1*/, GLint internal_format, bool depth_buffer /*= false*/)
{ {
GLenum status = 0; GLenum status = 0;

View File

@@ -29,6 +29,7 @@ public:
void copy(const RTT& source); void copy(const RTT& source);
// copy a region // copy a region
void copy(const RTT& source, const glm::vec4& rect); void copy(const RTT& source, const glm::vec4& rect);
RTT clone() const noexcept;
bool resize(int width, int height); bool resize(int width, int height);
bool create(int width, int height, int tex = -1, GLint internal_format = GL_RGBA8, bool depth_buffer = false); bool create(int width, int height, int tex = -1, GLint internal_format = GL_RGBA8, bool depth_buffer = false);
bool recreate() { return create(w, h); } bool recreate() { return create(w, h); }