diff --git a/escher/include/escher/stack_view.h b/escher/include/escher/stack_view.h index 9059c3bf4..f13951a91 100644 --- a/escher/include/escher/stack_view.h +++ b/escher/include/escher/stack_view.h @@ -9,12 +9,17 @@ public: StackView(); void drawRect(KDContext * ctx, KDRect rect) const override; void setName(const char * name); + void setTextColor(KDColor textColor); + void setBackgroundColor(KDColor backgroundColor); + void setSeparatorColor(KDColor separatorColor); protected: #if ESCHER_VIEW_LOGGING const char * className() const override; void logAttributes(std::ostream &os) const override; #endif private: + KDColor m_backgroundColor; + KDColor m_separatorColor; int numberOfSubviews() const override; View * subviewAtIndex(int index) override; void layoutSubviews() override; diff --git a/escher/include/escher/stack_view_controller.h b/escher/include/escher/stack_view_controller.h index bfa53facf..5c8439075 100644 --- a/escher/include/escher/stack_view_controller.h +++ b/escher/include/escher/stack_view_controller.h @@ -3,12 +3,14 @@ #include #include +#include constexpr uint8_t kMaxNumberOfStacks = 4; class StackViewController : public ViewController { public: - StackViewController(Responder * parentResponder, ViewController * rootViewController, bool displayFirstStackHeader = false); + StackViewController(Responder * parentResponder, ViewController * rootViewController, bool displayFirstStackHeader = false, + KDColor textColor = Palette::DesactiveTextColor, KDColor backgroundColor = KDColorWhite, KDColor separatorColor = Palette::LineColor); /* Push creates a new StackView and adds it */ void push(ViewController * vc); @@ -22,7 +24,7 @@ public: private: class ControllerView : public View { public: - ControllerView(bool displayFirstStackHeader); + ControllerView(bool displayFirstStackHeader, KDColor textColor, KDColor backgroundColor, KDColor separatorColor); void setContentView(View * view); void pushStack(const char * name); void popStack(); @@ -39,6 +41,9 @@ private: View * m_contentView; int8_t m_numberOfStacks; bool m_displayFirstStackHeader; + KDColor m_textColor; + KDColor m_backgroundColor; + KDColor m_separatorColor; }; ControllerView m_view; diff --git a/escher/src/stack_view.cpp b/escher/src/stack_view.cpp index aaafdaf2f..94904e933 100644 --- a/escher/src/stack_view.cpp +++ b/escher/src/stack_view.cpp @@ -1,15 +1,27 @@ #include -#include extern "C" { #include } StackView::StackView() : View(), - m_textView(PointerTextView(nullptr, 0.5f, 0.5f, Palette::DesactiveTextColor)) + m_textView(PointerTextView(nullptr, 0.5f, 0.5f)) { } +void StackView::setTextColor(KDColor textColor) { + m_textView.setTextColor(textColor); +} + +void StackView::setBackgroundColor(KDColor backgroundColor) { + m_textView.setBackgroundColor(backgroundColor); + m_backgroundColor = backgroundColor; +} + +void StackView::setSeparatorColor(KDColor separatorColor) { + m_separatorColor = separatorColor; +} + int StackView::numberOfSubviews() const { return 1; } @@ -30,9 +42,9 @@ void StackView::setName(const char * name) { void StackView::drawRect(KDContext * ctx, KDRect rect) const { KDCoordinate height = bounds().height(); KDCoordinate width = bounds().width(); - ctx->fillRect(KDRect(0, 0, width, 1), Palette::LineColor); - ctx->fillRect(KDRect(0, 1, width, height-2), KDColorWhite); - ctx->fillRect(KDRect(0, height-1, width, 1), Palette::LineColor); + ctx->fillRect(KDRect(0, 0, width, 1), m_separatorColor); + ctx->fillRect(KDRect(0, 1, width, height-2), m_backgroundColor); + ctx->fillRect(KDRect(0, height-1, width, 1), m_separatorColor); } #if ESCHER_VIEW_LOGGING diff --git a/escher/src/stack_view_controller.cpp b/escher/src/stack_view_controller.cpp index 37adfabea..11481e2c7 100644 --- a/escher/src/stack_view_controller.cpp +++ b/escher/src/stack_view_controller.cpp @@ -4,11 +4,14 @@ extern "C" { #include #include -StackViewController::ControllerView::ControllerView(bool displayFirstStackHeader) : +StackViewController::ControllerView::ControllerView(bool displayFirstStackHeader, KDColor textColor, KDColor backgroundColor, KDColor separatorColor) : View(), m_contentView(nullptr), m_numberOfStacks(0), - m_displayFirstStackHeader(displayFirstStackHeader) + m_displayFirstStackHeader(displayFirstStackHeader), + m_textColor(textColor), + m_backgroundColor(backgroundColor), + m_separatorColor(separatorColor) { } @@ -20,6 +23,9 @@ void StackViewController::ControllerView::setContentView(View * view) { void StackViewController::ControllerView::pushStack(const char * name) { m_stackViews[m_numberOfStacks].setName(name); + m_stackViews[m_numberOfStacks].setTextColor(m_textColor); + m_stackViews[m_numberOfStacks].setBackgroundColor(m_backgroundColor); + m_stackViews[m_numberOfStacks].setSeparatorColor(m_separatorColor); m_numberOfStacks++; } @@ -63,9 +69,9 @@ const char * StackViewController::ControllerView::className() const { } #endif -StackViewController::StackViewController(Responder * parentResponder, ViewController * rootViewController, bool displayFirstStackHeader) : +StackViewController::StackViewController(Responder * parentResponder, ViewController * rootViewController, bool displayFirstStackHeader, KDColor textColor, KDColor backgroundColor, KDColor separatorColor) : ViewController(parentResponder), - m_view(ControllerView(displayFirstStackHeader)), + m_view(ControllerView(displayFirstStackHeader, textColor, backgroundColor, separatorColor)), m_numberOfChildren(0), m_rootViewController(rootViewController) {