mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[poincare] Factorize bracket pair rendering
Change-Id: I80f2d04c8833352f4097bcfdcf90b5ec147dc19f
This commit is contained in:
committed by
Émilie Feral
parent
3aa5e8bcd6
commit
2512425868
@@ -44,13 +44,18 @@ private:
|
||||
constexpr static KDCoordinate k_bracketWidth = 5;
|
||||
constexpr static KDCoordinate k_lineThickness = 1;
|
||||
constexpr static KDCoordinate k_verticalMargin = 1;
|
||||
KDCoordinate externWidthMargin() const { return k_externWidthMargin; }
|
||||
constexpr static bool k_renderTopBar = true;
|
||||
constexpr static bool k_renderBottomBar = true;
|
||||
constexpr static bool k_renderDoubleBar = false;
|
||||
virtual KDCoordinate externWidthMargin() const { return k_externWidthMargin; }
|
||||
virtual KDCoordinate widthMargin() const { return k_widthMargin; }
|
||||
virtual KDCoordinate verticalExternMargin() const { return k_verticalExternMargin; }
|
||||
virtual bool renderTopBar() const { return true; }
|
||||
virtual bool renderBottomBar() const { return true; }
|
||||
virtual bool renderDoubleBar() const { return false; }
|
||||
virtual KDCoordinate verticalMargin() const { return k_verticalMargin; }
|
||||
virtual bool renderTopBar() const { return k_renderTopBar; }
|
||||
virtual bool renderBottomBar() const { return k_renderBottomBar; }
|
||||
virtual bool renderDoubleBar() const { return k_renderDoubleBar; }
|
||||
void render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor, Layout * selectionStart = nullptr, Layout * selectionEnd = nullptr, KDColor selectionColor = KDColorRed) override;
|
||||
static void renderWithParameters(KDSize childSize, KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor, KDCoordinate verticalMargin, KDCoordinate externWidthMargin, KDCoordinate verticalExternMargin, KDCoordinate widthMargin, bool renderTopBar, bool renderBottomBar, bool renderDoubleBar);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
|
||||
private:
|
||||
KDCoordinate widthMargin() const override { return 2; }
|
||||
KDCoordinate verticalMargin() const override { return 0; }
|
||||
KDCoordinate verticalExternMargin() const override { return 1; }
|
||||
bool renderTopBar() const override { return false; }
|
||||
bool renderBottomBar() const override { return false; }
|
||||
|
||||
@@ -10,17 +10,7 @@ extern "C" {
|
||||
namespace Poincare {
|
||||
|
||||
void BracketPairLayoutNode::RenderWithChildSize(KDSize childSize, KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) {
|
||||
KDCoordinate verticalBarHeight = childSize.height() + 2*k_verticalMargin;
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin, p.y()+k_verticalExternMargin, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin+childSize.width()+2*k_widthMargin+k_lineThickness, p.y()+k_verticalExternMargin, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
|
||||
// Render top bar
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin, p.y()+k_verticalExternMargin, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin+2*k_lineThickness+childSize.width()+2*k_widthMargin-k_bracketWidth, p.y()+k_verticalExternMargin, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
|
||||
// Render bottom bar
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin, p.y()+k_verticalExternMargin+verticalBarHeight-k_lineThickness, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
ctx->fillRect(KDRect(p.x()+k_externWidthMargin+2*k_lineThickness+childSize.width()+2*k_widthMargin-k_bracketWidth, p.y()+k_verticalExternMargin+verticalBarHeight-k_lineThickness, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
renderWithParameters(childSize, ctx, p, expressionColor, backgroundColor, k_verticalMargin, k_externWidthMargin, k_verticalExternMargin, k_widthMargin, k_renderTopBar, k_renderBottomBar, k_renderDoubleBar);
|
||||
}
|
||||
|
||||
void BracketPairLayoutNode::moveCursorLeft(LayoutCursor * cursor, bool * shouldRecomputeLayout, bool forSelection) {
|
||||
@@ -112,32 +102,42 @@ int BracketPairLayoutNode::serialize(char * buffer, int bufferSize, Preferences:
|
||||
}
|
||||
|
||||
void BracketPairLayoutNode::render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor, Layout * selectionStart, Layout * selectionEnd, KDColor selectionColor) {
|
||||
KDSize childSize = childLayout()->layoutSize();
|
||||
KDCoordinate verticalBarHeight = childSize.height() + 2*k_verticalMargin;
|
||||
KDCoordinate horizontalPosition = p.x() + externWidthMargin();
|
||||
KDCoordinate verticalPosition = p.y() + verticalExternMargin();
|
||||
if (renderDoubleBar()) {
|
||||
renderWithParameters(childLayout()->layoutSize(), ctx, p, expressionColor, backgroundColor, verticalMargin(), externWidthMargin(), verticalExternMargin(), widthMargin(), renderTopBar(), renderBottomBar(), renderDoubleBar());
|
||||
}
|
||||
|
||||
void BracketPairLayoutNode::renderWithParameters(KDSize childSize, KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor, KDCoordinate verticalMargin, KDCoordinate externWidthMargin, KDCoordinate verticalExternMargin, KDCoordinate widthMargin, bool renderTopBar, bool renderBottomBar, bool renderDoubleBar) {
|
||||
// This function allow rendering with either static or virtual parameters
|
||||
KDCoordinate verticalBarHeight = childSize.height() + 2 * verticalMargin;
|
||||
KDCoordinate horizontalPosition = p.x() + externWidthMargin;
|
||||
KDCoordinate verticalPosition = p.y() + verticalExternMargin;
|
||||
|
||||
if (renderDoubleBar) {
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
horizontalPosition += k_lineThickness + widthMargin();
|
||||
horizontalPosition += k_lineThickness + widthMargin;
|
||||
}
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
if (renderTopBar()) {
|
||||
|
||||
if (renderTopBar) {
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
}
|
||||
if (renderBottomBar()) {
|
||||
if (renderBottomBar) {
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition + verticalBarHeight - k_lineThickness, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
}
|
||||
horizontalPosition += k_lineThickness + widthMargin() + childSize.width() + widthMargin();
|
||||
|
||||
horizontalPosition += k_lineThickness + widthMargin + childSize.width() + widthMargin;
|
||||
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
horizontalPosition += k_lineThickness;
|
||||
if (renderTopBar()) {
|
||||
|
||||
if (renderTopBar) {
|
||||
ctx->fillRect(KDRect(horizontalPosition - k_bracketWidth, verticalPosition, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
}
|
||||
if (renderBottomBar()) {
|
||||
if (renderBottomBar) {
|
||||
ctx->fillRect(KDRect(horizontalPosition - k_bracketWidth, verticalPosition + verticalBarHeight - k_lineThickness, k_bracketWidth, k_lineThickness), expressionColor);
|
||||
}
|
||||
if (renderDoubleBar()) {
|
||||
horizontalPosition += widthMargin();
|
||||
|
||||
if (renderDoubleBar) {
|
||||
horizontalPosition += widthMargin;
|
||||
ctx->fillRect(KDRect(horizontalPosition, verticalPosition, k_lineThickness, verticalBarHeight), expressionColor);
|
||||
}
|
||||
}
|
||||
@@ -148,11 +148,11 @@ KDSize BracketPairLayoutNode::computeSize() {
|
||||
if (renderDoubleBar()) {
|
||||
horizontalCoordinates += 2*k_lineThickness + 2*widthMargin();
|
||||
}
|
||||
return KDSize(horizontalCoordinates, childSize.height() + 2 * k_verticalMargin + 2*verticalExternMargin());
|
||||
return KDSize(horizontalCoordinates, childSize.height() + 2*verticalMargin() + 2*verticalExternMargin());
|
||||
}
|
||||
|
||||
KDCoordinate BracketPairLayoutNode::computeBaseline() {
|
||||
return childLayout()->baseline() + k_verticalMargin + verticalExternMargin();
|
||||
return childLayout()->baseline() + verticalMargin() + verticalExternMargin();
|
||||
}
|
||||
|
||||
KDPoint BracketPairLayoutNode::positionOfChild(LayoutNode * child) {
|
||||
@@ -161,7 +161,7 @@ KDPoint BracketPairLayoutNode::positionOfChild(LayoutNode * child) {
|
||||
if (renderDoubleBar()) {
|
||||
horizontalCoordinates += k_lineThickness + widthMargin();
|
||||
}
|
||||
return KDPoint(horizontalCoordinates, k_verticalMargin + verticalExternMargin());
|
||||
return KDPoint(horizontalCoordinates, verticalMargin() + verticalExternMargin());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user