fix documentlayout by requiring fixed width of target
This commit is contained in:
parent
fc59ad6e10
commit
abbedd9db1
1 changed files with 16 additions and 6 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include "DocumentLayout.hpp"
|
#include "DocumentLayout.hpp"
|
||||||
#include "Point.hpp"
|
#include "Point.hpp"
|
||||||
#include "Widget.hpp"
|
#include "Widget.hpp"
|
||||||
|
#include "src/Events.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace Raven {
|
namespace Raven {
|
||||||
|
@ -9,15 +10,20 @@ bool DocumentLayout::run() {
|
||||||
if (!m_target)
|
if (!m_target)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Point bound { m_margin + m_target->rect().max_geometry().width(), m_margin };
|
|
||||||
Point current_position { m_margin, m_margin };
|
Point current_position { m_margin, m_margin };
|
||||||
double largest_height_so_far = -1.0;
|
double largest_height_so_far = -1.0;
|
||||||
|
double desired_height = m_margin * 2;
|
||||||
|
|
||||||
auto& children = m_target->children();
|
auto& children = m_target->children();
|
||||||
for (auto child : children) {
|
for (auto child : children) {
|
||||||
if (child->absolute())
|
if (child->absolute())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (child->layout() && child->layout()->dynamically_sizes_target()) {
|
||||||
|
auto event = RelayoutSubtreeEvent();
|
||||||
|
child->dispatch_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
if (child->rect().height() > largest_height_so_far) {
|
if (child->rect().height() > largest_height_so_far) {
|
||||||
largest_height_so_far = child->rect().height();
|
largest_height_so_far = child->rect().height();
|
||||||
}
|
}
|
||||||
|
@ -27,7 +33,7 @@ bool DocumentLayout::run() {
|
||||||
bool should_do_new_row = new_row_because_of_control_widget || new_row_because_of_justification;
|
bool should_do_new_row = new_row_because_of_control_widget || new_row_because_of_justification;
|
||||||
if (should_do_new_row) {
|
if (should_do_new_row) {
|
||||||
current_position.add(0, largest_height_so_far + m_margin);
|
current_position.add(0, largest_height_so_far + m_margin);
|
||||||
bound.add(0, largest_height_so_far + m_margin);
|
desired_height += largest_height_so_far + m_margin;
|
||||||
current_position.set_x(m_margin);
|
current_position.set_x(m_margin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,13 +45,17 @@ bool DocumentLayout::run() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto &child : m_target->children()) {
|
||||||
|
auto event = RelayoutSubtreeEvent();
|
||||||
|
child->dispatch_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
/* account for the first row */
|
/* account for the first row */
|
||||||
bound.add(0, largest_height_so_far);
|
desired_height += largest_height_so_far;
|
||||||
|
|
||||||
m_target->rect().set_width(bound.x());
|
m_target->rect().set_height(desired_height);
|
||||||
m_target->rect().set_height(bound.y());
|
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue