mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-25 00:30:46 +01:00
[poincare] Helper function to create log layouts.
Change-Id: I4f43d11a48e1b8bdddb6660da11e3127778a0bae
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user