diff --git a/Color_t.hpp b/Color_t.hpp new file mode 100644 index 0000000..d1f7267 --- /dev/null +++ b/Color_t.hpp @@ -0,0 +1,11 @@ +#ifndef COLOR_T_H +#define COLOR_T_H + +#include + +typedef size_t Color; + + +//}} + +#endif \ No newline at end of file diff --git a/PositionalProperties_t.hpp b/PositionalProperties_t.hpp new file mode 100644 index 0000000..1613704 --- /dev/null +++ b/PositionalProperties_t.hpp @@ -0,0 +1,21 @@ +#ifndef POSITIONAL_PROPERTIES_T_H +#define POSITIONAL_PROPERTIES_T_H + +#include + +//namespace myink { namespace ui { + + + typedef struct PositionalProperties_t + { + size_t left; + size_t top; + size_t width; + size_t height; + } PositionalProperties, *PositionalPropertiesPtr; + + + +//}} + +#endif \ No newline at end of file diff --git a/StackPanel.cpp b/StackPanel.cpp index 4884b70..d3b2dd7 100644 --- a/StackPanel.cpp +++ b/StackPanel.cpp @@ -6,10 +6,8 @@ void draw_background(const PositionalProperties & positionals, const Color & background_color); void draw_border(const PositionalProperties positionals, const Color & color, const LineWidth & border_line_width); -PositionalProperties move_down(const PositionalProperties & i, const PositionalProperties & p); -PositionalProperties move_right(const PositionalProperties & i, const PositionalProperties & p); -StackPanel::StackPanel(const PositionalProperties & p, const StackPanelStyleProperties & s, const DrawItemCallBackList & i, const MoveToNextItem & m) : positionals(p), style(s), itmes(i), move(m) +StackPanel::StackPanel(const StackPanelStyleProperties & s, const DrawItemCallBackList & i, const MoveToNextItem & m): style(s), itmes(i), move(m) { } @@ -17,7 +15,7 @@ StackPanel::~StackPanel() { } -void StackPanel::draw() const +PositionalProperties StackPanel::draw(const PositionalProperties & positionals) const { auto border_line_width = style.border_line_width; auto margin = style.margin; @@ -32,7 +30,7 @@ void StackPanel::draw() const positionals.height + 2 * (gap) }; draw_background(outer, style.background_color); - return; + return outer; } PositionalProperties inner = { @@ -47,10 +45,18 @@ void StackPanel::draw() const auto last = callback(inner); inner = move(inner, last); } + + auto out_distance = 2 * (gap + padding); + PositionalProperties outer = { + positionals.left, + positionals.top, + inner.width + out_distance, + inner.height + out_distance + }; if (border_line_width < 1) { - return; + return outer; } PositionalProperties border_positionals = { @@ -61,6 +67,7 @@ void StackPanel::draw() const }; draw_border(border_positionals, style.border_line_color, border_line_width); + return outer; } PositionalProperties StackPanel::move_down(const PositionalProperties & i, const PositionalProperties & p) diff --git a/StackPanel.hpp b/StackPanel.hpp index f802d59..6ea70f5 100644 --- a/StackPanel.hpp +++ b/StackPanel.hpp @@ -9,16 +9,15 @@ class StackPanel { private: - const PositionalProperties & positionals; const StackPanelStyleProperties & style; const DrawItemCallBackList & itmes; const MoveToNextItem & move; public: - StackPanel(const PositionalProperties & positionals, const StackPanelStyleProperties & style, const DrawItemCallBackList & itmes, const MoveToNextItem & move); + StackPanel(const StackPanelStyleProperties & style, const DrawItemCallBackList & itmes, const MoveToNextItem & move); ~StackPanel(); - void draw() const; + PositionalProperties draw(const PositionalProperties & positionals) const; static PositionalProperties move_down(const PositionalProperties & i, const PositionalProperties & p); static PositionalProperties move_right(const PositionalProperties & i, const PositionalProperties & p); }; diff --git a/StackPanel_t.hpp b/StackPanel_t.hpp index 4d28f75..8c67ab5 100644 --- a/StackPanel_t.hpp +++ b/StackPanel_t.hpp @@ -3,18 +3,13 @@ #include +#include "Color_t.hpp" +#include "PositionalProperties_t.hpp" + //namespace myink { namespace ui { class StackPanel; typedef StackPanel * StackPanelPtr; - typedef struct PositionalProperties_t - { - size_t left; - size_t top; - size_t width; - size_t height; - } PositionalProperties, *PositionalPropertiesPtr; - - typedef size_t Color; + typedef size_t LineWidth; typedef size_t Margin; typedef size_t Padding; diff --git a/TextBlock.cpp b/TextBlock.cpp new file mode 100644 index 0000000..8113c9b --- /dev/null +++ b/TextBlock.cpp @@ -0,0 +1,24 @@ +#include "TextBlock.hpp" + +#include +#include + + +//namespace myink { namespace ui { + +TextBlock::TextBlock(const char * t, const TextBlockStyleProperties & s): text(t), style(s) +{ +} + +TextBlock::~TextBlock() +{ +} + +PositionalProperties TextBlock::draw(const PositionalProperties & p) +{ + auto font = style.font; + Paint_DrawString_EN(p.left, p.top, text, &font, style.background_color, style.font_color); + return { p.left, p.top, strlen(text) * font.Width, font.Height}; +} + +//}} diff --git a/TextBlock.hpp b/TextBlock.hpp new file mode 100644 index 0000000..e253179 --- /dev/null +++ b/TextBlock.hpp @@ -0,0 +1,26 @@ +#ifndef TEXT_BLOCK_H +#define TEXT_BLOCK_H + +#include "TextBlock_t.hpp" + +#include "PositionalProperties_t.hpp" + +//namespace myink { namespace ui { +class TextBlock +{ + +private: + const TextBlockStyleProperties & style; + const char * text; + +public: + TextBlock(const char * text, const TextBlockStyleProperties & style); + ~TextBlock(); + + PositionalProperties draw(const PositionalProperties & pos); +}; + +//}} + + +#endif \ No newline at end of file diff --git a/TextBlock_t.hpp b/TextBlock_t.hpp new file mode 100644 index 0000000..a0695fe --- /dev/null +++ b/TextBlock_t.hpp @@ -0,0 +1,20 @@ +#ifndef TEXT_BLOCK_T_H +#define TEXT_BLOCK_T_H + +#include +#include "Color_t.hpp" + +//namespace myink { namespace ui { + class TextBlock; + typedef TextBlock * TextBlockPtr; + + typedef struct TextBlockStyleProperties_t + { + Color background_color; + Color font_color; + sFONT & font; + } TextBlockStyleProperties, *TextBlockStylePropertiesPtr; +//}} + + +#endif \ No newline at end of file diff --git a/myink.ino b/myink.ino index 2f63b26..0761e77 100644 --- a/myink.ino +++ b/myink.ino @@ -5,6 +5,7 @@ #include #include "StackPanel.hpp" +#include "TextBlock.hpp" PAINT_TIME show_time = {2020, 04, 27, 22, 42, 5}; UBYTE *BlackImage; @@ -32,33 +33,35 @@ void loop() { DEV_Delay_ms(2000); show_time.Sec = show_time.Sec + 1; - Paint_DrawTime(100, 10, &show_time, &Font24, WHITE, BLACK); + Paint_DrawTime(100, 10, &show_time, &Font24, WHITE, BLACK); + DrawItemCallBack itmes[] = { [](const PositionalProperties & p) -> PositionalProperties { - Paint_DrawString_EN(p.left, p.top, "Hallo Miri :)", font, WHITE, BLACK); - return { p.left, p.top, 13 * font->Width, font->Height}; + return TextBlock("Hallo Miri :)", {WHITE, BLACK, *font}).draw(p); }, [](const PositionalProperties & p) -> PositionalProperties { - Paint_DrawString_EN(p.left, p.top, "Hallo Felix", font, WHITE, BLACK); - return { p.left, p.top, 13 * font->Width, font->Height}; + return TextBlock("Hallo Welt", {WHITE, BLACK, *font}).draw(p); } }; - StackPanel( - {50, 200 ,200, 50}, - {WHITE, 1, BLACK, 2, 4}, - {2, itmes}, - StackPanel::move_right - ).draw(); + + DrawItemCallBackList list = {2, itmes}; + StackPanelStyleProperties style = {WHITE, 1, BLACK, 2, 4}; + PositionalProperties p = {50, 200 ,200, 50}; + auto panel = StackPanel(style, list, StackPanel::move_right); + + panel.draw(p); + p.top += 150; + panel.draw(p); EPD_7IN5_V2_SendHalfImage(0, BlackImage); font = &Font24; - StackPanel( - {0, 400 ,200, 50}, - {WHITE, 2, BLACK, 4, 8}, - {2, itmes}, - StackPanel::move_down - ).draw(); + style.border_line_width = 2; + style.margin = 4; + style.padding = 8; + p.left = 0; + p.top = 400; + StackPanel(style, list, StackPanel::move_down).draw(p); EPD_7IN5_V2_SendHalfImage(1, BlackImage); EPD_7IN5_V2_TurnOnDisplay();