diff options
author | crupest <crupest@outlook.com> | 2020-03-19 19:11:04 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-03-19 19:11:04 +0800 |
commit | ad29543fe081d2a0a5e6737f9073399e4e91383f (patch) | |
tree | 10f3a7519aa0f52fada56b10e226dc709972fd1d /include/cru/ui | |
parent | e3eb653a856fe6793d3ddab371c3e71290fc7a9b (diff) | |
download | cru-ad29543fe081d2a0a5e6737f9073399e4e91383f.tar.gz cru-ad29543fe081d2a0a5e6737f9073399e4e91383f.tar.bz2 cru-ad29543fe081d2a0a5e6737f9073399e4e91383f.zip |
...
Diffstat (limited to 'include/cru/ui')
-rw-r--r-- | include/cru/ui/base.hpp | 48 | ||||
-rw-r--r-- | include/cru/ui/controls/base.hpp | 24 | ||||
-rw-r--r-- | include/cru/ui/controls/button.hpp | 20 | ||||
-rw-r--r-- | include/cru/ui/controls/text_block.hpp | 2 | ||||
-rw-r--r-- | include/cru/ui/controls/text_box.hpp | 15 | ||||
-rw-r--r-- | include/cru/ui/ui_manager.hpp | 3 |
6 files changed, 72 insertions, 40 deletions
diff --git a/include/cru/ui/base.hpp b/include/cru/ui/base.hpp index c9d4d0ef..fbb87c8c 100644 --- a/include/cru/ui/base.hpp +++ b/include/cru/ui/base.hpp @@ -28,31 +28,16 @@ using cru::platform::native::mouse_buttons::right; } // namespace mouse_buttons namespace colors { -using cru::platform::colors::transparent; -using cru::platform::colors::black; -using cru::platform::colors::silver; -using cru::platform::colors::gray; -using cru::platform::colors::white; -using cru::platform::colors::maroon; -using cru::platform::colors::red; -using cru::platform::colors::purple; -using cru::platform::colors::fuchsia; -using cru::platform::colors::green; -using cru::platform::colors::lime; -using cru::platform::colors::olive; -using cru::platform::colors::yellow; -using cru::platform::colors::navy; -using cru::platform::colors::blue; -using cru::platform::colors::teal; -using cru::platform::colors::aqua; -using cru::platform::colors::orange; using cru::platform::colors::aliceblue; using cru::platform::colors::antiquewhite; +using cru::platform::colors::aqua; using cru::platform::colors::aquamarine; using cru::platform::colors::azure; using cru::platform::colors::beige; using cru::platform::colors::bisque; +using cru::platform::colors::black; using cru::platform::colors::blanchedalmond; +using cru::platform::colors::blue; using cru::platform::colors::blueviolet; using cru::platform::colors::brown; using cru::platform::colors::burlywood; @@ -91,10 +76,13 @@ using cru::platform::colors::dodgerblue; using cru::platform::colors::firebrick; using cru::platform::colors::floralwhite; using cru::platform::colors::forestgreen; +using cru::platform::colors::fuchsia; using cru::platform::colors::gainsboro; using cru::platform::colors::ghostwhite; using cru::platform::colors::gold; using cru::platform::colors::goldenrod; +using cru::platform::colors::gray; +using cru::platform::colors::green; using cru::platform::colors::greenyellow; using cru::platform::colors::grey; using cru::platform::colors::honeydew; @@ -122,9 +110,11 @@ using cru::platform::colors::lightslategray; using cru::platform::colors::lightslategrey; using cru::platform::colors::lightsteelblue; using cru::platform::colors::lightyellow; +using cru::platform::colors::lime; using cru::platform::colors::limegreen; using cru::platform::colors::linen; using cru::platform::colors::magenta; +using cru::platform::colors::maroon; using cru::platform::colors::mediumaquamarine; using cru::platform::colors::mediumblue; using cru::platform::colors::mediumorchid; @@ -139,8 +129,11 @@ using cru::platform::colors::mintcream; using cru::platform::colors::mistyrose; using cru::platform::colors::moccasin; using cru::platform::colors::navajowhite; +using cru::platform::colors::navy; using cru::platform::colors::oldlace; +using cru::platform::colors::olive; using cru::platform::colors::olivedrab; +using cru::platform::colors::orange; using cru::platform::colors::orangered; using cru::platform::colors::orchid; using cru::platform::colors::palegoldenrod; @@ -153,6 +146,9 @@ using cru::platform::colors::peru; using cru::platform::colors::pink; using cru::platform::colors::plum; using cru::platform::colors::powderblue; +using cru::platform::colors::purple; +using cru::platform::colors::rebeccapurple; +using cru::platform::colors::red; using cru::platform::colors::rosybrown; using cru::platform::colors::royalblue; using cru::platform::colors::saddlebrown; @@ -161,6 +157,7 @@ using cru::platform::colors::sandybrown; using cru::platform::colors::seagreen; using cru::platform::colors::seashell; using cru::platform::colors::sienna; +using cru::platform::colors::silver; using cru::platform::colors::skyblue; using cru::platform::colors::slateblue; using cru::platform::colors::slategray; @@ -169,14 +166,17 @@ using cru::platform::colors::snow; using cru::platform::colors::springgreen; using cru::platform::colors::steelblue; using cru::platform::colors::tan; +using cru::platform::colors::teal; using cru::platform::colors::thistle; using cru::platform::colors::tomato; +using cru::platform::colors::transparent; using cru::platform::colors::turquoise; using cru::platform::colors::violet; using cru::platform::colors::wheat; +using cru::platform::colors::white; using cru::platform::colors::whitesmoke; +using cru::platform::colors::yellow; using cru::platform::colors::yellowgreen; -using cru::platform::colors::rebeccapurple; } // namespace colors //-------------------- region: forward declaration -------------------- @@ -202,6 +202,8 @@ enum class Alignment { struct CornerRadius { constexpr CornerRadius() : left_top(), right_top(), left_bottom(), right_bottom() {} + constexpr CornerRadius(const float& value) + : CornerRadius(Point{value, value}) {} constexpr CornerRadius(const Point& value) : left_top(value), right_top(value), @@ -231,6 +233,14 @@ inline bool operator!=(const CornerRadius& left, const CornerRadius& right) { return !(left == right); } +struct BorderStyle { + std::shared_ptr<platform::graph::IBrush> border_brush; + Thickness border_thickness; + CornerRadius border_radius; + std::shared_ptr<platform::graph::IBrush> foreground_brush; + std::shared_ptr<platform::graph::IBrush> background_brush; +}; + class CanvasPaintEventArgs { public: CanvasPaintEventArgs(platform::graph::IPainter* painter, diff --git a/include/cru/ui/controls/base.hpp b/include/cru/ui/controls/base.hpp new file mode 100644 index 00000000..ebe9cdda --- /dev/null +++ b/include/cru/ui/controls/base.hpp @@ -0,0 +1,24 @@ +#pragma once +#include "../base.hpp" + +namespace cru::ui::controls { +using ButtonStateStyle = BorderStyle; + +struct ButtonStyle { + // corresponds to ClickState::None + ButtonStateStyle normal; + // corresponds to ClickState::Hover + ButtonStateStyle hover; + // corresponds to ClickState::Press + ButtonStateStyle press; + // corresponds to ClickState::PressInactive + ButtonStateStyle press_cancel; +}; + +struct TextBoxBorderStyle { + BorderStyle normal; + BorderStyle hover; + BorderStyle focus; + BorderStyle focus_hover; +}; +} // namespace cru::ui::controls diff --git a/include/cru/ui/controls/button.hpp b/include/cru/ui/controls/button.hpp index a95b75ce..fb636a33 100644 --- a/include/cru/ui/controls/button.hpp +++ b/include/cru/ui/controls/button.hpp @@ -1,28 +1,10 @@ #pragma once #include "../content_control.hpp" +#include "base.hpp" #include "../click_detector.hpp" namespace cru::ui::controls { -struct ButtonStateStyle { - std::shared_ptr<platform::graph::IBrush> border_brush; - Thickness border_thickness; - CornerRadius border_radius; - std::shared_ptr<platform::graph::IBrush> foreground_brush; - std::shared_ptr<platform::graph::IBrush> background_brush; -}; - -struct ButtonStyle { - // corresponds to ClickState::None - ButtonStateStyle normal; - // corresponds to ClickState::Hover - ButtonStateStyle hover; - // corresponds to ClickState::Press - ButtonStateStyle press; - // corresponds to ClickState::PressInactive - ButtonStateStyle press_cancel; -}; - class Button : public ContentControl { public: static constexpr std::string_view control_type = "Button"; diff --git a/include/cru/ui/controls/text_block.hpp b/include/cru/ui/controls/text_block.hpp index 701f946f..ec61a08c 100644 --- a/include/cru/ui/controls/text_block.hpp +++ b/include/cru/ui/controls/text_block.hpp @@ -30,7 +30,7 @@ class TextBlock : public NoChildControl { render::TextRenderObject* GetTextRenderObject(); render::CanvasRenderObject* GetCaretRenderObject(); - platform::graph::IBrush* GetCaretBrush(); + std::shared_ptr<platform::graph::IBrush> GetCaretBrush(); private: std::unique_ptr<render::StackLayoutRenderObject> root_render_object_; diff --git a/include/cru/ui/controls/text_box.hpp b/include/cru/ui/controls/text_box.hpp index 58179a57..4a4ed6e7 100644 --- a/include/cru/ui/controls/text_box.hpp +++ b/include/cru/ui/controls/text_box.hpp @@ -1,7 +1,11 @@ #pragma once #include "../no_child_control.hpp" +#include "base.hpp" namespace cru::ui::controls { +template <typename TControl> +class TextControlService; + class TextBox : public NoChildControl { public: static constexpr std::string_view control_type = "TextBox"; @@ -17,11 +21,22 @@ class TextBox : public NoChildControl { std::string_view GetControlType() const final { return control_type; } + render::TextRenderObject* GetTextRenderObject(); + render::CanvasRenderObject* GetCaretRenderObject(); + std::shared_ptr<platform::graph::IBrush> GetCaretBrush(); + + const TextBoxBorderStyle& GetBorderStyle(); + void SetBorderStyle(TextBoxBorderStyle border_style); + private: std::unique_ptr<render::BorderRenderObject> border_render_object_; std::unique_ptr<render::StackLayoutRenderObject> stack_layout_render_object_; std::unique_ptr<render::TextRenderObject> text_render_object_; std::unique_ptr<render::CanvasRenderObject> caret_render_object_; + std::shared_ptr<platform::graph::IBrush> caret_brush_; + TextBoxBorderStyle border_style_; + + std::unique_ptr<TextControlService<TextBox>> service_; }; } // namespace cru::ui::controls diff --git a/include/cru/ui/ui_manager.hpp b/include/cru/ui/ui_manager.hpp index b2137c67..9ad184c4 100644 --- a/include/cru/ui/ui_manager.hpp +++ b/include/cru/ui/ui_manager.hpp @@ -1,7 +1,7 @@ #pragma once #include "base.hpp" -#include "controls/button.hpp" +#include "controls/base.hpp" namespace cru::ui { struct ThemeResources { @@ -10,6 +10,7 @@ struct ThemeResources { std::shared_ptr<platform::graph::IBrush> text_selection_brush; std::shared_ptr<platform::graph::IBrush> caret_brush; controls::ButtonStyle button_style; + controls::TextBoxBorderStyle text_box_border_style; }; class UiManager : public Object { |