diff --git a/escher/Makefile b/escher/Makefile index 121da991b..0a1555388 100644 --- a/escher/Makefile +++ b/escher/Makefile @@ -17,6 +17,7 @@ objs += $(addprefix escher/src/,\ even_odd_editable_text_cell.o\ even_odd_expression_cell.o\ even_odd_pointer_text_cell.o\ + expression_menu_list_cell.o\ expression_view.o\ header_view_controller.o\ header_view_delegate.o\ diff --git a/escher/include/escher.h b/escher/include/escher.h index fb15c9082..efae858c8 100644 --- a/escher/include/escher.h +++ b/escher/include/escher.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/escher/include/escher/expression_menu_list_cell.h b/escher/include/escher/expression_menu_list_cell.h new file mode 100644 index 000000000..390af3b25 --- /dev/null +++ b/escher/include/escher/expression_menu_list_cell.h @@ -0,0 +1,25 @@ +#ifndef ESCHER_EXPRESSION_MENU_LIST_CELL_H +#define ESCHER_EXPRESSION_MENU_LIST_CELL_H + +#include +#include +#include +#include +#include + +class ExpressionMenuListCell : public TableViewCell { +public: + ExpressionMenuListCell(); + void setHighlighted(bool highlight) override; + void setExpression(Poincare::ExpressionLayout * expressionLayout); + void drawRect(KDContext * ctx, KDRect rect) const override; +protected: + constexpr static KDCoordinate k_separatorThickness = 1; + ExpressionView m_labelExpressionView; +private: + int numberOfSubviews() const override; + View * subviewAtIndex(int index) override; + void layoutSubviews() override; +}; + +#endif diff --git a/escher/include/escher/text_expression_menu_list_cell.h b/escher/include/escher/text_expression_menu_list_cell.h index aa6542330..d50463583 100644 --- a/escher/include/escher/text_expression_menu_list_cell.h +++ b/escher/include/escher/text_expression_menu_list_cell.h @@ -1,26 +1,18 @@ -#ifndef ESCHER_EXPRESSION_BUFFER_MENU_LIST_CELL_H -#define ESCHER_EXPRESSION_BUFFER_MENU_LIST_CELL_H +#ifndef ESCHER_TEXT_EXPRESSION_MENU_LIST_CELL_H +#define ESCHER_TEXT_EXPRESSION_MENU_LIST_CELL_H -#include -#include +#include #include -#include -#include -#include -class TextExpressionMenuListCell : public TableViewCell { +class TextExpressionMenuListCell : public ExpressionMenuListCell { public: TextExpressionMenuListCell(char * accessoryText = nullptr); void setHighlighted(bool highlight) override; - void setExpression(Poincare::ExpressionLayout * expressionLayout); void setAccessoryText(const char * textBody); - void drawRect(KDContext * ctx, KDRect rect) const override; private: int numberOfSubviews() const override; View * subviewAtIndex(int index) override; void layoutSubviews() override; - constexpr static KDCoordinate k_separatorThickness = 1; - ExpressionView m_labelExpressionView; PointerTextView m_accessoryView; }; diff --git a/escher/src/expression_menu_list_cell.cpp b/escher/src/expression_menu_list_cell.cpp new file mode 100644 index 000000000..a0c89453e --- /dev/null +++ b/escher/src/expression_menu_list_cell.cpp @@ -0,0 +1,42 @@ +#include +#include + +ExpressionMenuListCell::ExpressionMenuListCell() : + TableViewCell(), + m_labelExpressionView(ExpressionView(0.0f, 0.5f, KDColorBlack, KDColorWhite)) +{ +} + +void ExpressionMenuListCell::setHighlighted(bool highlight) { + TableViewCell::setHighlighted(highlight); + KDColor backgroundColor = highlight? Palette::Select : KDColorWhite; + m_labelExpressionView.setBackgroundColor(backgroundColor); +} + +void ExpressionMenuListCell::setExpression(Poincare::ExpressionLayout * expressionLayout) { + m_labelExpressionView.setExpression(expressionLayout); +} + +void ExpressionMenuListCell::drawRect(KDContext * ctx, KDRect rect) const { + KDCoordinate width = bounds().width(); + KDCoordinate height = bounds().height(); + KDColor backgroundColor = isHighlighted() ? Palette::Select : KDColorWhite; + + ctx->fillRect(KDRect(k_separatorThickness, k_separatorThickness, width-2*k_separatorThickness, height-k_separatorThickness), backgroundColor); + ctx->fillRect(KDRect(0, 0, width, k_separatorThickness), Palette::GreyBright); + ctx->fillRect(KDRect(0, k_separatorThickness, k_separatorThickness, height-k_separatorThickness), Palette::GreyBright); + ctx->fillRect(KDRect(width-k_separatorThickness, k_separatorThickness, k_separatorThickness, height-k_separatorThickness), Palette::GreyBright); + } + +int ExpressionMenuListCell::numberOfSubviews() const { + return 1; +} + +View * ExpressionMenuListCell::subviewAtIndex(int index) { + assert(index == 0); + return &m_labelExpressionView; +} + +void ExpressionMenuListCell::layoutSubviews() { + m_labelExpressionView.setFrame(bounds()); +} diff --git a/escher/src/text_expression_menu_list_cell.cpp b/escher/src/text_expression_menu_list_cell.cpp index 85fcec131..6b02e5d12 100644 --- a/escher/src/text_expression_menu_list_cell.cpp +++ b/escher/src/text_expression_menu_list_cell.cpp @@ -2,39 +2,21 @@ #include TextExpressionMenuListCell::TextExpressionMenuListCell(char * accessoryText) : - TableViewCell(), - m_labelExpressionView(ExpressionView(0.0f, 0.5f, KDColorBlack, KDColorWhite)), + ExpressionMenuListCell(), m_accessoryView(PointerTextView(KDText::FontSize::Small, accessoryText, 0.0f, 0.5f, Palette::GreyDark, KDColorWhite)) { } void TextExpressionMenuListCell::setHighlighted(bool highlight) { - TableViewCell::setHighlighted(highlight); + ExpressionMenuListCell::setHighlighted(highlight); KDColor backgroundColor = highlight? Palette::Select : KDColorWhite; - m_labelExpressionView.setBackgroundColor(backgroundColor); m_accessoryView.setBackgroundColor(backgroundColor); } -void TextExpressionMenuListCell::setExpression(Poincare::ExpressionLayout * expressionLayout) { - m_labelExpressionView.setExpression(expressionLayout); - markRectAsDirty(bounds()); -} - void TextExpressionMenuListCell::setAccessoryText(const char * text) { m_accessoryView.setText(text); } -void TextExpressionMenuListCell::drawRect(KDContext * ctx, KDRect rect) const { - KDCoordinate width = bounds().width(); - KDCoordinate height = bounds().height(); - KDColor backgroundColor = isHighlighted() ? Palette::Select : KDColorWhite; - - ctx->fillRect(KDRect(k_separatorThickness, k_separatorThickness, width-2*k_separatorThickness, height-k_separatorThickness), backgroundColor); - ctx->fillRect(KDRect(0, 0, width, k_separatorThickness), Palette::GreyBright); - ctx->fillRect(KDRect(0, k_separatorThickness, k_separatorThickness, height-k_separatorThickness), Palette::GreyBright); - ctx->fillRect(KDRect(width-k_separatorThickness, k_separatorThickness, k_separatorThickness, height-k_separatorThickness), Palette::GreyBright); - } - int TextExpressionMenuListCell::numberOfSubviews() const { return 2; }