From d6e96fe143cea21d7d5237bf86834c554be893f7 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Fri, 18 Nov 2016 16:02:13 +0100 Subject: [PATCH] [kandinsky] Explicit color constructors Change-Id: Ifd4a0c281a7c6aded225d06295f4d79039e4e848 --- apps/graph/function_store.h | 6 ++--- apps/graph/graph/graph_view.cpp | 6 ++--- apps/graph/list/function_expression_view.h | 2 +- .../parameters/parameters_controller.cpp | 2 +- escher/include/escher/even_odd_cell.h | 4 ++-- .../include/escher/header_view_controller.h | 4 ++-- escher/include/escher/palette.h | 14 +++++------ escher/include/escher/tab_view_cell.h | 6 ++--- kandinsky/include/kandinsky/color.h | 24 ++++++++++++------- kandinsky/src/color.cpp | 2 +- kandinsky/test/color.cpp | 10 ++++---- quiz/src/runner.cpp | 2 +- 12 files changed, 44 insertions(+), 38 deletions(-) diff --git a/apps/graph/function_store.h b/apps/graph/function_store.h index 2f6933bfc..a30cd1e1e 100644 --- a/apps/graph/function_store.h +++ b/apps/graph/function_store.h @@ -23,9 +23,9 @@ private: const KDColor firstAvailableColor(); static constexpr int k_numberOfDefaultColors = 10; static constexpr KDColor k_defaultColors[k_numberOfDefaultColors] = { - KDColor(0xE5473E), KDColor(0x57B1D9), KDColor(0xE49832), KDColor(0x6DBE51), - KDColor(0x199B99), KDColor(0xF2A37C), KDColor(0x37C995), KDColor(0x6759D0), - KDColor(0xEF7138), KDColor(0x1774C5) + KDColor::RGB24(0xE5473E), KDColor::RGB24(0x57B1D9), KDColor::RGB24(0xE49832), KDColor::RGB24(0x6DBE51), + KDColor::RGB24(0x199B99), KDColor::RGB24(0xF2A37C), KDColor::RGB24(0x37C995), KDColor::RGB24(0x6759D0), + KDColor::RGB24(0xEF7138), KDColor::RGB24(0x1774C5) }; static constexpr const char * k_functionNames[k_maxNumberOfFunctions] = { "f", "g", "h", "p", "q", "r", "s", "t" diff --git a/apps/graph/graph/graph_view.cpp b/apps/graph/graph/graph_view.cpp index 9a5d817b1..36b9dde32 100644 --- a/apps/graph/graph/graph_view.cpp +++ b/apps/graph/graph/graph_view.cpp @@ -3,9 +3,9 @@ namespace Graph { -constexpr KDColor kAxisColor = KDColor(0x000000); -constexpr KDColor kMainGridColor = KDColor(0xCCCCCC); -constexpr KDColor kSecondaryGridColor = KDColor(0xEEEEEE); +constexpr KDColor kAxisColor = KDColor::RGB24(0x000000); +constexpr KDColor kMainGridColor = KDColor::RGB24(0xCCCCCC); +constexpr KDColor kSecondaryGridColor = KDColor::RGB24(0xEEEEEE); constexpr int kNumberOfMainGridLines = 5; constexpr int kNumberOfSecondaryGridLines = 4; diff --git a/apps/graph/list/function_expression_view.h b/apps/graph/list/function_expression_view.h index de5e4205f..19a442623 100644 --- a/apps/graph/list/function_expression_view.h +++ b/apps/graph/list/function_expression_view.h @@ -21,7 +21,7 @@ public: private: static constexpr KDCoordinate k_verticalFunctionMargin = 50-12; static constexpr KDCoordinate k_emptyRowHeight = 50; - constexpr static KDColor k_separatorColor = KDColor(0xEFF2F4); + constexpr static KDColor k_separatorColor = KDColor::RGB24(0xEFF2F4); constexpr static KDCoordinate k_separatorThickness = 1; Function * m_function; ExpressionView m_expressionView; diff --git a/apps/probability/parameters/parameters_controller.cpp b/apps/probability/parameters/parameters_controller.cpp index e607de017..03af7058c 100644 --- a/apps/probability/parameters/parameters_controller.cpp +++ b/apps/probability/parameters/parameters_controller.cpp @@ -2,7 +2,7 @@ Probability::ParametersController::ParametersController(Responder * parentResponder) : ViewController(parentResponder), - m_view(SolidColorView(KDColor(0xF3619B))) + m_view(SolidColorView(KDColor::RGB24(0xF3619B))) { } diff --git a/escher/include/escher/even_odd_cell.h b/escher/include/escher/even_odd_cell.h index 52d4e025f..1b495dfa5 100644 --- a/escher/include/escher/even_odd_cell.h +++ b/escher/include/escher/even_odd_cell.h @@ -10,9 +10,9 @@ public: virtual KDColor backgroundColor() const; void drawRect(KDContext * ctx, KDRect rect) const override; - static constexpr KDColor k_evenLineBackgroundColor = KDColor(0xF7F9FA); + static constexpr KDColor k_evenLineBackgroundColor = KDColor::RGB24(0xF7F9FA); static constexpr KDColor k_oddLineBackgroundColor = KDColorWhite; - static constexpr KDColor k_selectedLineBackgroundColor = KDColor(0xC0D3EA); + static constexpr KDColor k_selectedLineBackgroundColor = KDColor::RGB24(0xC0D3EA); protected: bool m_even; diff --git a/escher/include/escher/header_view_controller.h b/escher/include/escher/header_view_controller.h index e037a7f2a..99f5671a0 100644 --- a/escher/include/escher/header_view_controller.h +++ b/escher/include/escher/header_view_controller.h @@ -33,8 +33,8 @@ private: int selectedButton(); private: constexpr static KDCoordinate k_headerHeight = 20; - constexpr static KDColor k_separatorHeaderColor = KDColor(0xDEE0E2); - constexpr static KDColor k_selectedBackgroundColor = KDColor(0x426DA7); + constexpr static KDColor k_separatorHeaderColor = KDColor::RGB24(0xDEE0E2); + constexpr static KDColor k_selectedBackgroundColor = KDColor::RGB24(0x426DA7); View * m_mainView; bool m_visibleHeader; int m_selectedButton; diff --git a/escher/include/escher/palette.h b/escher/include/escher/palette.h index 7158205f9..742f50c63 100644 --- a/escher/include/escher/palette.h +++ b/escher/include/escher/palette.h @@ -5,12 +5,12 @@ class Palette { public: - constexpr static KDColor LineColor = KDColor(0xB4B7B9); - constexpr static KDColor BackgroundColor = KDColor(0xF0F3F5); - constexpr static KDColor CellBackgroundColor = KDColor(0xFCFCFC); - constexpr static KDColor FocusCellBackgroundColor = KDColor(0xBFD3EB); - constexpr static KDColor DesactiveTextColor = KDColor(0x646464); - constexpr static KDColor BoxTitleBackgroundColor = KDColor(0x656976); + constexpr static KDColor LineColor = KDColor::RGB24(0xB4B7B9); + constexpr static KDColor BackgroundColor = KDColor::RGB24(0xF0F3F5); + constexpr static KDColor CellBackgroundColor = KDColor::RGB24(0xFCFCFC); + constexpr static KDColor FocusCellBackgroundColor = KDColor::RGB24(0xBFD3EB); + constexpr static KDColor DesactiveTextColor = KDColor::RGB24(0x646464); + constexpr static KDColor BoxTitleBackgroundColor = KDColor::RGB24(0x656976); }; -#endif \ No newline at end of file +#endif diff --git a/escher/include/escher/tab_view_cell.h b/escher/include/escher/tab_view_cell.h index edf31d93b..09fefa3e2 100644 --- a/escher/include/escher/tab_view_cell.h +++ b/escher/include/escher/tab_view_cell.h @@ -17,9 +17,9 @@ protected: void logAttributes(std::ostream &os) const override; #endif private: - constexpr static KDColor k_defaultTabColor = KDColor(0x426DA7); - constexpr static KDColor k_selectedTabColor = KDColor(0xC0D3EB); - constexpr static KDColor k_separatorTabColor = KDColor(0x567AA7); + constexpr static KDColor k_defaultTabColor = KDColor::RGB24(0x426DA7); + constexpr static KDColor k_selectedTabColor = KDColor::RGB24(0xC0D3EB); + constexpr static KDColor k_separatorTabColor = KDColor::RGB24(0x567AA7); bool m_active; bool m_selected; const char * m_name; diff --git a/kandinsky/include/kandinsky/color.h b/kandinsky/include/kandinsky/color.h index 2edef40d6..ef5edacf2 100644 --- a/kandinsky/include/kandinsky/color.h +++ b/kandinsky/include/kandinsky/color.h @@ -7,24 +7,30 @@ class KDColor { public: constexpr KDColor() : m_value(0) {} // FIXME: This should not be needed, and is probably wasting CPU cycles + static constexpr KDColor RGB16(uint16_t rgb) { + return KDColor(rgb); + } + static constexpr KDColor RGB24(uint32_t rgb) { + return KDColor(((rgb&0xF80000)>>8)|((rgb&0x00FC00)>>5)|((rgb&0x0000F8)>>3)); + } + static constexpr KDColor RGB888(uint8_t r, uint8_t g, uint8_t b) { + return KDColor((r>>3)<<11 | (g>>2) << 5 | (b>>3)); + } - constexpr KDColor(uint32_t rgb) - : m_value(((rgb&0xF80000)>>8)|((rgb&0x00FC00)>>5)|((rgb&0x0000F8)>>3)) {} - constexpr KDColor(uint8_t r, uint8_t g, uint8_t b) - : m_value((r>>3)<<11 | (g>>2) << 5 | (b>>3)) {} uint8_t red(); uint8_t green(); uint8_t blue(); static KDColor blend(KDColor first, KDColor second, uint8_t alpha); operator uint16_t() const { return m_value; } private: + constexpr KDColor(uint16_t value) : m_value(value) {} uint16_t m_value; }; -constexpr KDColor KDColorBlack = KDColor(0x000000); -constexpr KDColor KDColorWhite = KDColor(0xFFFFFF); -constexpr KDColor KDColorRed = KDColor(0xFF0000); -constexpr KDColor KDColorGreen = KDColor(0x00FF00); -constexpr KDColor KDColorBlue = KDColor(0x0000FF); +constexpr KDColor KDColorBlack = KDColor::RGB24(0x000000); +constexpr KDColor KDColorWhite = KDColor::RGB24(0xFFFFFF); +constexpr KDColor KDColorRed = KDColor::RGB24(0xFF0000); +constexpr KDColor KDColorGreen = KDColor::RGB24(0x00FF00); +constexpr KDColor KDColorBlue = KDColor::RGB24(0x0000FF); #endif diff --git a/kandinsky/src/color.cpp b/kandinsky/src/color.cpp index 4b76f7314..1a44bbeec 100644 --- a/kandinsky/src/color.cpp +++ b/kandinsky/src/color.cpp @@ -19,7 +19,7 @@ KDColor KDColor::blend(KDColor first, KDColor second, uint8_t alpha) { uint16_t red = first.red()*alpha + second.red()*oneMinusAlpha; uint16_t green = first.green()*alpha + second.green()*oneMinusAlpha; uint16_t blue = first.blue()*alpha + second.blue()*oneMinusAlpha; - return KDColor(red>>8, green>>8, blue>>8); + return RGB888(red>>8, green>>8, blue>>8); // Blend White + black, ask for white diff --git a/kandinsky/test/color.cpp b/kandinsky/test/color.cpp index cf2eef8f7..b7a80c608 100644 --- a/kandinsky/test/color.cpp +++ b/kandinsky/test/color.cpp @@ -5,20 +5,20 @@ QUIZ_CASE(kandinsky_color_rgb) { assert(sizeof(KDColor) == 2); // We really want KDColor to be packed - assert(KDColor(0xFF0000) == 0xF800); - assert(KDColor(0x00FF00) == 0x07E0); - assert(KDColor(0x0000FF) == 0x1F); + assert(KDColor::RGB24(0xFF0000) == 0xF800); + assert(KDColor::RGB24(0x00FF00) == 0x07E0); + assert(KDColor::RGB24(0x0000FF) == 0x1F); /* R = 0x12 = 0b 0001 0010. 5 most important bits are 00010. * G = 0x34 = 0b 0011 0100. 6 most important bits are 001101. * B = 0x56 = 0b 0101 0110. 5 most important bits are 01010. * KDColor = 0b 00010 001101 01010 * = 0b 0001 0001 1010 1010 * = 0x 1 1 A A */ - assert(KDColor(0x123456) == 0x11AA); + assert(KDColor::RGB24(0x123456) == 0x11AA); } QUIZ_CASE(kandinsky_color_blend) { - KDColor midGray = KDColor(0x7F7F7F); + KDColor midGray = KDColor::RGB24(0x7F7F7F); KDColor res = KDColor::blend(KDColorWhite, KDColorBlack, 0xFF); assert(res == KDColorWhite); assert(KDColor::blend(KDColorWhite, KDColorBlack, 0) == KDColorBlack); diff --git a/quiz/src/runner.cpp b/quiz/src/runner.cpp index d1e207e4f..7f249d510 100644 --- a/quiz/src/runner.cpp +++ b/quiz/src/runner.cpp @@ -7,7 +7,7 @@ void print(const char * message) { static int line_y = 0; KDContext * ctx = KDIonContext::sharedContext(); int line_height = KDText::stringSize("M").height(); - ctx->drawString(message, KDPoint(0, line_y), 0); + ctx->drawString(message, KDPoint(0, line_y), KDColorBlack); line_y += line_height; if (line_y > Ion::Display::Height) { line_y = 0;