Numworks Epsilon  1.4.1
Graphing Calculator Operating System
fraction_layout.cpp
Go to the documentation of this file.
1 #include <string.h>
2 #include <assert.h>
3 #include "fraction_layout.h"
4 
5 namespace Poincare {
6 
7 FractionLayout::FractionLayout(ExpressionLayout * numerator_layout, ExpressionLayout * denominator_layout) :
8 ExpressionLayout(), m_numerator_layout(numerator_layout), m_denominator_layout(denominator_layout) {
9  m_numerator_layout->setParent(this);
10  m_denominator_layout->setParent(this);
11  m_baseline = m_numerator_layout->size().height()
12  + k_fractionLineMargin + k_fractionLineHeight;
13 }
14 
16  delete m_denominator_layout;
17  delete m_numerator_layout;
18 }
19 
20 void FractionLayout::render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) {
21  KDCoordinate fractionLineY = p.y() + m_numerator_layout->size().height() + k_fractionLineMargin;
22  ctx->fillRect(KDRect(p.x()+k_fractionBorderMargin, fractionLineY, size().width()-2*k_fractionBorderMargin, 1), expressionColor);
23 }
24 
26  KDCoordinate width = max(m_numerator_layout->size().width(), m_denominator_layout->size().width())
27  + 2*k_fractionBorderLength+2*k_fractionBorderMargin;
28  KDCoordinate height = m_numerator_layout->size().height()
29  + k_fractionLineMargin + k_fractionLineHeight + k_fractionLineMargin
30  + m_denominator_layout->size().height();
31  return KDSize(width, height);
32 }
33 
35  switch (index) {
36  case 0:
37  return m_numerator_layout;
38  case 1:
39  return m_denominator_layout;
40  default:
41  return nullptr;
42  }
43 }
44 
46  KDCoordinate x = 0;
47  KDCoordinate y = 0;
48  if (child == m_numerator_layout) {
49  x = (KDCoordinate)((size().width() - m_numerator_layout->size().width())/2);
50  } else if (child == m_denominator_layout) {
51  x = (KDCoordinate)((size().width() - m_denominator_layout->size().width())/2);
52  y = (KDCoordinate)(m_numerator_layout->size().height() + 2*k_fractionLineMargin + k_fractionLineHeight);
53  } else {
54  assert(false); // Should not happen
55  }
56  return KDPoint(x, y);
57 }
58 
59 }
KDCoordinate y() const
Definition: point.h:11
#define assert(e)
Definition: assert.h:9
int16_t KDCoordinate
Definition: coordinate.h:6
constexpr KDCoordinate width() const
Definition: size.h:10
FractionLayout(ExpressionLayout *numerator, ExpressionLayout *denominator)
void render(KDContext *ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) override
unsigned short uint16_t
Definition: stdint.h:5
Definition: point.h:6
Definition: size.h:6
KDPoint positionOfChild(ExpressionLayout *child) override
KDSize computeSize() override
Definition: rect.h:26
void fillRect(KDRect rect, KDColor color)
Definition: context_rect.cpp:8
Definition: color.h:6
KDCoordinate x() const
Definition: point.h:10
ExpressionLayout * child(uint16_t index) override
void setParent(ExpressionLayout *parent)
constexpr KDCoordinate height() const
Definition: size.h:11