Numworks Epsilon  1.4.1
Graphing Calculator Operating System
expression_layout.cpp
Go to the documentation of this file.
1 #include <assert.h>
2 #include <stdlib.h>
3 #include "string_layout.h"
4 
5 namespace Poincare {
6 
8  m_baseline(0),
9  m_parent(nullptr),
10  m_sized(false),
11  m_positioned(false),
12  m_frame(KDRectZero) {
13 }
14 
16  return m_baseline;
17 }
18 
20  if (m_parent == nullptr) {
21  return absoluteOrigin();
22  } else {
23  return KDPoint(absoluteOrigin().x() - m_parent->absoluteOrigin().x(),
24  absoluteOrigin().y() - m_parent->absoluteOrigin().y());
25  }
26 }
27 
28 void ExpressionLayout::draw(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) {
29  int i = 0;
30  while (ExpressionLayout * c = child(i++)) {
31  c->draw(ctx, p, expressionColor, backgroundColor);
32  }
33  render(ctx, absoluteOrigin().translatedBy(p), expressionColor, backgroundColor);
34 }
35 
36 KDPoint ExpressionLayout::absoluteOrigin() {
37  if (!m_positioned) {
38  if (m_parent != nullptr) {
39  m_frame.setOrigin(m_parent->absoluteOrigin().translatedBy(m_parent->positionOfChild(this)));
40  } else {
41  m_frame.setOrigin(KDPointZero);
42  }
43  m_positioned = true;
44  }
45  return m_frame.origin();
46 }
47 
49  if (!m_sized) {
50  m_frame.setSize(computeSize());
51  m_sized = true;
52  }
53  return m_frame.size();
54 }
55 
57  m_parent = parent;
58 }
59 
60 }
KDCoordinate y() const
Definition: point.h:11
virtual KDPoint positionOfChild(ExpressionLayout *child)=0
void draw(KDContext *ctx, KDPoint p, KDColor expressionColor=KDColorBlack, KDColor backgroundColor=KDColorWhite)
int16_t KDCoordinate
Definition: coordinate.h:6
constexpr KDPoint KDPointZero
Definition: point.h:25
virtual void render(KDContext *ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor)=0
Definition: point.h:6
Definition: size.h:6
c(generic_all_nodes)
void setOrigin(KDPoint origin)
Definition: rect.cpp:21
#define false
Definition: stdbool.h:9
virtual ExpressionLayout * child(uint16_t index)=0
constexpr KDRect KDRectZero
Definition: rect.h:70
Definition: color.h:6
KDSize size() const
Definition: rect.h:41
KDPoint origin() const
Definition: rect.h:38
void setSize(KDSize size)
Definition: rect.cpp:22
KDCoordinate x() const
Definition: point.h:10
KDPoint translatedBy(KDPoint other) const
Definition: point.cpp:3
void setParent(ExpressionLayout *parent)
virtual KDSize computeSize()=0