aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-03-19 19:11:04 +0800
committercrupest <crupest@outlook.com>2020-03-19 19:11:04 +0800
commitad29543fe081d2a0a5e6737f9073399e4e91383f (patch)
tree10f3a7519aa0f52fada56b10e226dc709972fd1d /include/cru/ui
parente3eb653a856fe6793d3ddab371c3e71290fc7a9b (diff)
downloadcru-ad29543fe081d2a0a5e6737f9073399e4e91383f.tar.gz
cru-ad29543fe081d2a0a5e6737f9073399e4e91383f.tar.bz2
cru-ad29543fe081d2a0a5e6737f9073399e4e91383f.zip
...
Diffstat (limited to 'include/cru/ui')
-rw-r--r--include/cru/ui/base.hpp48
-rw-r--r--include/cru/ui/controls/base.hpp24
-rw-r--r--include/cru/ui/controls/button.hpp20
-rw-r--r--include/cru/ui/controls/text_block.hpp2
-rw-r--r--include/cru/ui/controls/text_box.hpp15
-rw-r--r--include/cru/ui/ui_manager.hpp3
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 {