#include #include #include 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(); } }