mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
69 lines
1.5 KiB
C++
69 lines
1.5 KiB
C++
#include <poincare/layout_node.h>
|
|
#include <poincare/allocation_failed_layout_node.h>
|
|
#include <poincare/layout_reference.h>
|
|
|
|
namespace Poincare {
|
|
|
|
// Rendering
|
|
|
|
void LayoutNode::draw(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) {
|
|
for (LayoutNode * l : children()) {
|
|
l->draw(ctx, p, expressionColor, backgroundColor);
|
|
}
|
|
render(ctx, absoluteOrigin().translatedBy(p), expressionColor, backgroundColor);
|
|
}
|
|
|
|
KDPoint LayoutNode::origin() {
|
|
LayoutNode * p = parent();
|
|
if (p != nullptr) {
|
|
return absoluteOrigin();
|
|
} else {
|
|
return KDPoint(absoluteOrigin().x() - p->absoluteOrigin().x(),
|
|
absoluteOrigin().y() - p->absoluteOrigin().y());
|
|
}
|
|
}
|
|
|
|
KDPoint LayoutNode::absoluteOrigin() {
|
|
LayoutNode * p = parent();
|
|
if (!m_positioned) {
|
|
if (p != nullptr) {
|
|
m_frame.setOrigin(p->absoluteOrigin().translatedBy(p->positionOfChild(this)));
|
|
} else {
|
|
m_frame.setOrigin(KDPointZero);
|
|
}
|
|
m_positioned = true;
|
|
}
|
|
return m_frame.origin();
|
|
}
|
|
|
|
KDSize LayoutNode::layoutSize() {
|
|
if (!m_sized) {
|
|
computeSize();
|
|
}
|
|
return m_frame.size();
|
|
}
|
|
|
|
KDCoordinate LayoutNode::baseline() {
|
|
if (!m_baselined) {
|
|
computeBaseline();
|
|
}
|
|
return m_baseline;
|
|
}
|
|
|
|
void LayoutNode::invalidAllSizesPositionsAndBaselines() {
|
|
m_sized = false;
|
|
m_positioned = false;
|
|
m_baselined = false;
|
|
for (LayoutNode * l : children()) {
|
|
l->invalidAllSizesPositionsAndBaselines();
|
|
}
|
|
}
|
|
|
|
// TreeNode
|
|
|
|
TreeNode * LayoutNode::FailedAllocationStaticNode() {
|
|
return LayoutRef::FailedAllocationStaticNode();
|
|
}
|
|
|
|
}
|