#ifndef POINCARE_CONJUGATE_LAYOUT_H #define POINCARE_CONJUGATE_LAYOUT_H #include #include namespace Poincare { class ConjugateLayout : public StaticLayoutHierarchy<1> { public: using StaticLayoutHierarchy::StaticLayoutHierarchy; ExpressionLayout * clone() const override; // Collapse void collapseSiblingsAndMoveCursor(ExpressionLayoutCursor * cursor) override; // Replace void replaceChildAndMoveCursor(const ExpressionLayout * oldChild, ExpressionLayout * newChild, bool deleteOldChild, ExpressionLayoutCursor * cursor) override; // Remove void removePointedChildAtIndexAndMoveCursor(int index, bool deleteAfterRemoval, ExpressionLayoutCursor * cursor) override; // Tree navigation ExpressionLayoutCursor cursorLeftOf(ExpressionLayoutCursor cursor, bool * shouldRecomputeLayout) override; ExpressionLayoutCursor cursorRightOf(ExpressionLayoutCursor cursor, bool * shouldRecomputeLayout) override; // Serialization int writeTextInBuffer(char * buffer, int bufferSize) const override { return LayoutEngine::writePrefixExpressionLayoutTextInBuffer(this, buffer, bufferSize, "conj"); } protected: void render(KDContext * ctx, KDPoint p, KDColor expressionColor, KDColor backgroundColor) override; KDSize computeSize() override; void computeBaseline() override; KDPoint positionOfChild(ExpressionLayout * child) override; private: constexpr static KDCoordinate k_overlineWidth = 1; constexpr static KDCoordinate k_overlineVerticalMargin = 1; ExpressionLayout * operandLayout() { return editableChild(0); } }; } #endif