[poincare] Helper function to create log layouts.

Change-Id: I4f43d11a48e1b8bdddb6660da11e3127778a0bae
This commit is contained in:
Léa Saviot
2018-01-09 11:01:35 +01:00
parent d6fbcbaa00
commit aaca93e914
2 changed files with 21 additions and 6 deletions

View File

@@ -11,8 +11,12 @@ public:
/* Expression to ExpressionLayout */
static ExpressionLayout * createInfixLayout(const Expression * expression, Expression::FloatDisplayMode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName);
static ExpressionLayout * createPrefixLayout(const Expression * expression, Expression::FloatDisplayMode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName);
/* Create special layouts */
static ExpressionLayout * createParenthesedLayout(ExpressionLayout * layout, bool cloneLayout);
static ExpressionLayout * createStringLayout(const char * buffer, int bufferSize, KDText::FontSize fontSize = KDText::FontSize::Large);
static ExpressionLayout * createLogLayout(ExpressionLayout * argument, ExpressionLayout * index);
/* Expression to Text */
typedef bool (*OperandNeedsParenthesis)(const Expression * e);

View File

@@ -3,6 +3,7 @@
#include "layout/horizontal_layout.h"
#include "layout/parenthesis_left_layout.h"
#include "layout/parenthesis_right_layout.h"
#include "layout/vertical_offset_layout.h"
extern "C" {
#include<assert.h>
}
@@ -49,6 +50,16 @@ ExpressionLayout * LayoutEngine::createPrefixLayout(const Expression * expressio
return result;
}
ExpressionLayout * LayoutEngine::createParenthesedLayout(ExpressionLayout * layout, bool cloneLayout) {
HorizontalLayout * result = new HorizontalLayout();
result->addChildAtIndex(new ParenthesisLeftLayout(), 0);
if (layout != nullptr) {
result->addOrMergeChildAtIndex(cloneLayout ? layout->clone() : layout, 1);
}
result->addChildAtIndex(new ParenthesisRightLayout(), result->numberOfChildren());
return result;
}
ExpressionLayout * LayoutEngine::createStringLayout(const char * buffer, int bufferSize, KDText::FontSize fontSize) {
assert(bufferSize > 0);
HorizontalLayout * resultLayout = new HorizontalLayout();
@@ -58,12 +69,12 @@ ExpressionLayout * LayoutEngine::createStringLayout(const char * buffer, int buf
return resultLayout;
}
ExpressionLayout * LayoutEngine::createParenthesedLayout(ExpressionLayout * layout, bool cloneLayout) {
HorizontalLayout * result = new HorizontalLayout();
result->addChildAtIndex(new ParenthesisLeftLayout(), 0);
result->addOrMergeChildAtIndex(cloneLayout ? layout->clone() : layout, 1);
result->addChildAtIndex(new ParenthesisRightLayout(), result->numberOfChildren());
return result;
ExpressionLayout * LayoutEngine::createLogLayout(ExpressionLayout * argument, ExpressionLayout * index) {
HorizontalLayout * resultLayout = static_cast<HorizontalLayout *>(createStringLayout("log", 3));
VerticalOffsetLayout * offsetLayout = new VerticalOffsetLayout(index, VerticalOffsetLayout::Type::Subscript, false);
resultLayout->addChildAtIndex(offsetLayout, resultLayout->numberOfChildren());
resultLayout->addOrMergeChildAtIndex(createParenthesedLayout(argument, false), resultLayout->numberOfChildren());
return resultLayout;
}
int LayoutEngine::writeInfixExpressionTextInBuffer(const Expression * expression, char * buffer, int bufferSize, const char * operatorName, OperandNeedsParenthesis operandNeedsParenthesis) {