add horizontal box layout
This commit is contained in:
parent
93b33c433b
commit
96a7739341
2 changed files with 68 additions and 0 deletions
41
src/HorizontalBoxLayout.cpp
Normal file
41
src/HorizontalBoxLayout.cpp
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#include "HorizontalBoxLayout.hpp"
|
||||||
|
#include "Point.hpp"
|
||||||
|
#include "Widget.hpp"
|
||||||
|
|
||||||
|
namespace Raven {
|
||||||
|
|
||||||
|
void HorizontalBoxLayout::run() {
|
||||||
|
if (!m_target) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point current_point { m_margin, m_margin };
|
||||||
|
double max_height_so_far = 0;
|
||||||
|
double requested_width = 0;
|
||||||
|
|
||||||
|
auto& children = m_target->children();
|
||||||
|
for (auto child : children) {
|
||||||
|
if (child->absolute()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child->rect().height() > max_height_so_far) {
|
||||||
|
max_height_so_far = child->rect().height();
|
||||||
|
}
|
||||||
|
|
||||||
|
requested_width += child->rect().width() + m_margin;
|
||||||
|
|
||||||
|
child->rect().set_x(current_point.x());
|
||||||
|
child->rect().set_y(current_point.y());
|
||||||
|
|
||||||
|
//std::cout << child->rect().x() << ", " << child->rect().y() << ", " << child->rect().width() << ", " << child->rect().height() << std::endl;
|
||||||
|
|
||||||
|
current_point.add(child->rect().width() + m_margin, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_target->rect().set_width(requested_width + m_margin);
|
||||||
|
m_target->rect().set_height(max_height_so_far + m_margin * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
27
src/HorizontalBoxLayout.hpp
Normal file
27
src/HorizontalBoxLayout.hpp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Layout.hpp"
|
||||||
|
|
||||||
|
namespace Raven {
|
||||||
|
|
||||||
|
class HorizontalBoxLayout : public Layout {
|
||||||
|
private:
|
||||||
|
double m_margin { 0.0 };
|
||||||
|
public:
|
||||||
|
HorizontalBoxLayout()
|
||||||
|
: Layout() {}
|
||||||
|
|
||||||
|
HorizontalBoxLayout(double margin)
|
||||||
|
: Layout()
|
||||||
|
, m_margin(margin) {}
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
double margin() { return m_margin; }
|
||||||
|
void set_margin(double margin) { m_margin = margin; run(); }
|
||||||
|
|
||||||
|
virtual ~HorizontalBoxLayout() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue