diff --git a/poincare/include/poincare/integral.h b/poincare/include/poincare/integral.h index 71b94ebf8..4200fb5cb 100644 --- a/poincare/include/poincare/integral.h +++ b/poincare/include/poincare/integral.h @@ -11,6 +11,7 @@ public: Type type() const override; Expression * cloneWithDifferentOperands(Expression ** newOperands, int numberOfOperands, bool cloneOperands = true) const override; + ExpressionLayout * createLayout() const override; private: float functionValueAtAbscissa(float x, XContext xcontext) const; }; diff --git a/poincare/src/integral.cpp b/poincare/src/integral.cpp index 404ca9902..b98fdb745 100644 --- a/poincare/src/integral.cpp +++ b/poincare/src/integral.cpp @@ -5,7 +5,11 @@ extern "C" { #include #include +#include } +#include "layout/horizontal_layout.h" +#include "layout/string_layout.h" +#include "layout/integral_layout.h" Integral::Integral() : Function("int") @@ -52,6 +56,13 @@ float Integral::approximate(Context& context) const { return result; } +ExpressionLayout * Integral::createLayout() const { + ExpressionLayout ** childrenLayouts = (ExpressionLayout **)malloc(2*sizeof(ExpressionLayout *)); + childrenLayouts[0] = m_args[0]->createLayout(); + childrenLayouts[1] = new StringLayout("dx", 2); + return new IntegralLayout(m_args[1]->createLayout(), m_args[2]->createLayout(), new HorizontalLayout(childrenLayouts, 2)); +} + float Integral::functionValueAtAbscissa(float x, XContext xContext) const { Float e = Float(x); Symbol xSymbol = Symbol('x');