From 0d575be1983e2ff619ffa93ecde767f600914571 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 20 Oct 2019 16:13:24 +0200 Subject: [PATCH] fix scroll --- data/dialogs/panel-animation.xml | 18 ++++++++++-------- src/app.cpp | 6 +++--- src/node.cpp | 16 ++++++++++++---- src/node_panel_animation.cpp | 19 ------------------- src/node_panel_animation.h | 1 - src/node_panel_brush.cpp | 3 +++ src/node_scroll.cpp | 2 +- 7 files changed, 29 insertions(+), 36 deletions(-) diff --git a/data/dialogs/panel-animation.xml b/data/dialogs/panel-animation.xml index 969dbab..f6cc878 100644 --- a/data/dialogs/panel-animation.xml +++ b/data/dialogs/panel-animation.xml @@ -28,14 +28,16 @@ - - - - - - - - + + + + + + + + + + diff --git a/src/app.cpp b/src/app.cpp index 6bc384d..949502e 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -538,15 +538,15 @@ bool App::update_ui_observer(Node *n) float pl = YGNodeLayoutGetPadding(p->y_node, YGEdgeLeft); glm::vec2 off_p(pl, pt); glm::vec2 off_s(pr, pb); - glm::vec2 parent_offset = p->m_parent ? -p->m_parent->m_pos_offset_childred : glm::vec2(0.f); - glm::vec4 pclip = { xy(p->m_clip_uncut) + off_p, zw(p->m_clip_uncut) - off_s - off_p + parent_offset }; + //glm::vec2 parent_offset = p->m_parent ? -p->m_parent->m_pos_offset_childred : glm::vec2(0.f); + glm::vec4 pclip = { xy(p->m_clip_uncut) + off_p, zw(p->m_clip_uncut) - off_s - off_p/* + parent_offset*/ }; box = rect_intersection(box, pclip); p = p->m_parent; } //auto box = n->m_clip; //glm::ivec4 c = glm::vec4((int)box.x - 1, (int)(height / zoom - box.y - box.w) - 1, (int)box.z + 2, (int)box.w + 2) * zoom; glm::vec2 parent_offset = n->m_parent ? n->m_parent->m_pos_offset_childred : glm::vec2(0.f); - if (box.z <= parent_offset.x || box.w <= parent_offset.y) + if (box.z <= 0 || box.w <= 0) { if (n->m_on_screen) { diff --git a/src/node.cpp b/src/node.cpp index d173fff..5571656 100644 --- a/src/node.cpp +++ b/src/node.cpp @@ -1077,8 +1077,13 @@ void Node::update_internal(const glm::vec2& origin, const glm::mat4& proj, float float w = YGNodeLayoutGetWidth(y_node); float h = YGNodeLayoutGetHeight(y_node); auto old_size = m_size; - glm::vec2 parent_offset = m_parent ? m_parent->m_pos_offset_childred : glm::vec2(0.f); - m_pos = /*glm::floor*/(origin + glm::vec2(x, y) + m_pos_offset + parent_offset); + + if (YGNodeStyleGetWidth(y_node).unit == YGUnit::YGUnitAuto) + w -= m_pos_offset.x; + //if (YGNodeStyleGetHeight(y_node).unit == YGUnit::YGUnitAuto) + // h -= m_pos_offset.y; + + m_pos = /*glm::floor*/(origin + glm::vec2(x, y) + m_pos_offset); m_pos_origin = /*glm::floor*/(origin + glm::vec2(x, y)); m_size = /*glm::floor*/(glm::vec2(w, h)); @@ -1095,7 +1100,7 @@ void Node::update_internal(const glm::vec2& origin, const glm::mat4& proj, float glm::vec2 off_s(pr, pb); glm::vec4 pclip = { xy(m_parent->m_clip) + off_p, zw(m_parent->m_clip) - (off_s + off_p) }; m_clip_uncut = glm::vec4(m_pos - glm::vec2(1), m_size + glm::vec2(2)); - m_clip = rect_intersection(m_clip_uncut, m_parent->m_clip) + glm::vec4(0, 0, -parent_offset); + m_clip = rect_intersection(m_clip_uncut, m_parent->m_clip); } else { @@ -1118,7 +1123,10 @@ void Node::update_internal(const glm::vec2& origin, const glm::mat4& proj, float } for (auto& c : m_children) - c->update_internal(m_pos, proj, zoom); + { + c->m_pos_offset = m_pos_offset + m_pos_offset_childred; + c->update_internal(m_pos_origin, proj, zoom); + } m_children.erase(std::remove_if(m_children.begin(), m_children.end(), [](const auto& n) { return n->m_destroyed; }), m_children.end()); diff --git a/src/node_panel_animation.cpp b/src/node_panel_animation.cpp index 08becf0..e818b40 100644 --- a/src/node_panel_animation.cpp +++ b/src/node_panel_animation.cpp @@ -109,10 +109,6 @@ void NodePanelAnimation::load_layers() auto& layers = Canvas::I->m_layers; m_selected_frame = nullptr; - float max_width = find("hscroll")->GetWidth() - 2; - for (int i = 0; i < layers.size(); i++) - max_width = glm::max(max_width, layers[i]->total_duration() * 35.f); - for (int i = 0; i < layers.size(); i++) { auto l = m_layers_container->add_child(); @@ -120,8 +116,6 @@ void NodePanelAnimation::load_layers() l->set_selected(Canvas::I->m_current_layer_idx == i); l->set_chekcbox(layers[i]->m_visible); auto film = m_frames_container->add_child_ref(); - //film->m_color = glm::vec4(glm::vec3(i % 2 ? .8 : .7), 1); - film->SetWidth(max_width - 5); for (int fi = 0; fi < layers[i]->m_frames.size(); fi++) { auto b = film->add_frame(layers[i]->m_frames[fi].m_duration); @@ -146,7 +140,6 @@ void NodePanelAnimation::load_layers() }; } } - m_timeline->SetWidth(max_width - 4); m_timeline->m_frame = Canvas::I->m_anim_frame; m_timeline->m_onion_size = m_onion->get_int(); update_frames(); @@ -159,18 +152,6 @@ void NodePanelAnimation::update_frames() m_frame_label->set_text_format("%0*d/%d", digits, m_timeline->m_frame + 1, total_frames); } -void NodePanelAnimation::handle_resize(glm::vec2 old_size, glm::vec2 new_size, float zoom) -{ - parent::handle_resize(old_size, new_size, zoom); - auto& layers = Canvas::I->m_layers; - float max_width = find("hscroll")->GetWidth() - 2; - for (int i = 0; i < layers.size(); i++) - max_width = glm::max(max_width, layers[i]->total_duration() * 35.f); - for (auto& film : m_frames_container->m_children) - film->SetWidth(max_width - 5); - m_timeline->SetWidth(max_width - 4); -} - void NodePanelAnimation::on_tick(float dt) { parent::on_tick(dt); diff --git a/src/node_panel_animation.h b/src/node_panel_animation.h index a54e18d..55fdf7b 100644 --- a/src/node_panel_animation.h +++ b/src/node_panel_animation.h @@ -72,7 +72,6 @@ public: virtual void init() override; virtual void added(Node* parent) override; virtual void on_tick(float dt) override; - virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size, float zoom) override; void init_controls(); void load_layers(); diff --git a/src/node_panel_brush.cpp b/src/node_panel_brush.cpp index d729903..6e442a1 100644 --- a/src/node_panel_brush.cpp +++ b/src/node_panel_brush.cpp @@ -286,6 +286,9 @@ bool NodePanelBrush::restore() { f.read_all(); + if (f.m_len == 0) + return false; + BinaryStreamReader sr; sr.init(f.m_data, f.m_len); diff --git a/src/node_scroll.cpp b/src/node_scroll.cpp index 61529f8..cd72777 100644 --- a/src/node_scroll.cpp +++ b/src/node_scroll.cpp @@ -12,7 +12,7 @@ Node* NodeScroll::clone_instantiate() const void NodeScroll::fix_scroll() { auto pad = GetPadding(); - glm::vec2 padoff = { pad.y + pad.w, pad.x + pad.z }; + glm::vec2 padoff = { pad[1] + pad[3], pad[0] + pad[2] }; auto rect = get_children_rect(); if (rect.w > 0 && rect.z > 0) {