aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-09-11 10:13:53 +0800
committercrupest <crupest@outlook.com>2020-09-11 10:13:53 +0800
commit65ca046989cd641da65b754bfa1c99f5e54b219a (patch)
treee87a0272bf62d9f1293d6ed2715ceaf8c5412e56
parent220e397e1e7276853212ffa97403c1440ed55492 (diff)
downloadcru-65ca046989cd641da65b754bfa1c99f5e54b219a.tar.gz
cru-65ca046989cd641da65b754bfa1c99f5e54b219a.tar.bz2
cru-65ca046989cd641da65b754bfa1c99f5e54b219a.zip
...
-rw-r--r--.vscode/settings.json1
-rw-r--r--include/cru/ui/Base.hpp158
-rw-r--r--src/ui/controls/TextControlService.hpp23
3 files changed, 26 insertions, 156 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a2ff60cb..0149950d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -92,4 +92,5 @@
"CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/vcpkg/scripts/buildsystems/vcpkg.cmake",
},
"cmake.generator": "Ninja",
+ "cmake.configureOnOpen": true,
}
diff --git a/include/cru/ui/Base.hpp b/include/cru/ui/Base.hpp
index 9036a47b..6be359ab 100644
--- a/include/cru/ui/Base.hpp
+++ b/include/cru/ui/Base.hpp
@@ -21,163 +21,9 @@ using cru::platform::TextRange;
using cru::platform::Thickness;
using cru::platform::native::MouseButton;
-namespace mouse_buttons {
-using cru::platform::native::mouse_buttons::left;
-using cru::platform::native::mouse_buttons::middle;
-using cru::platform::native::mouse_buttons::right;
-} // namespace mouse_buttons
+namespace mouse_buttons = cru::platform::native::mouse_buttons;
-namespace colors {
-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;
-using cru::platform::colors::cadetblue;
-using cru::platform::colors::chartreuse;
-using cru::platform::colors::chocolate;
-using cru::platform::colors::coral;
-using cru::platform::colors::cornflowerblue;
-using cru::platform::colors::cornsilk;
-using cru::platform::colors::crimson;
-using cru::platform::colors::cyan;
-using cru::platform::colors::darkblue;
-using cru::platform::colors::darkcyan;
-using cru::platform::colors::darkgoldenrod;
-using cru::platform::colors::darkgray;
-using cru::platform::colors::darkgreen;
-using cru::platform::colors::darkgrey;
-using cru::platform::colors::darkkhaki;
-using cru::platform::colors::darkmagenta;
-using cru::platform::colors::darkolivegreen;
-using cru::platform::colors::darkorange;
-using cru::platform::colors::darkorchid;
-using cru::platform::colors::darkred;
-using cru::platform::colors::darksalmon;
-using cru::platform::colors::darkseagreen;
-using cru::platform::colors::darkslateblue;
-using cru::platform::colors::darkslategray;
-using cru::platform::colors::darkslategrey;
-using cru::platform::colors::darkturquoise;
-using cru::platform::colors::darkviolet;
-using cru::platform::colors::deeppink;
-using cru::platform::colors::deepskyblue;
-using cru::platform::colors::dimgray;
-using cru::platform::colors::dimgrey;
-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;
-using cru::platform::colors::hotpink;
-using cru::platform::colors::indianred;
-using cru::platform::colors::indigo;
-using cru::platform::colors::ivory;
-using cru::platform::colors::khaki;
-using cru::platform::colors::lavender;
-using cru::platform::colors::lavenderblush;
-using cru::platform::colors::lawngreen;
-using cru::platform::colors::lemonchiffon;
-using cru::platform::colors::lightblue;
-using cru::platform::colors::lightcoral;
-using cru::platform::colors::lightcyan;
-using cru::platform::colors::lightgoldenrodyellow;
-using cru::platform::colors::lightgray;
-using cru::platform::colors::lightgreen;
-using cru::platform::colors::lightgrey;
-using cru::platform::colors::lightpink;
-using cru::platform::colors::lightsalmon;
-using cru::platform::colors::lightseagreen;
-using cru::platform::colors::lightskyblue;
-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;
-using cru::platform::colors::mediumpurple;
-using cru::platform::colors::mediumseagreen;
-using cru::platform::colors::mediumslateblue;
-using cru::platform::colors::mediumspringgreen;
-using cru::platform::colors::mediumturquoise;
-using cru::platform::colors::mediumvioletred;
-using cru::platform::colors::midnightblue;
-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;
-using cru::platform::colors::palegreen;
-using cru::platform::colors::paleturquoise;
-using cru::platform::colors::palevioletred;
-using cru::platform::colors::papayawhip;
-using cru::platform::colors::peachpuff;
-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;
-using cru::platform::colors::salmon;
-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;
-using cru::platform::colors::slategrey;
-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;
-} // namespace colors
+namespace colors = cru::platform::colors;
//-------------------- region: forward declaration --------------------
class Window;
diff --git a/src/ui/controls/TextControlService.hpp b/src/ui/controls/TextControlService.hpp
index 1108a3b2..41959f9d 100644
--- a/src/ui/controls/TextControlService.hpp
+++ b/src/ui/controls/TextControlService.hpp
@@ -87,6 +87,29 @@ class TextControlService : public Object {
return this->control_->GetScrollRenderObject();
}
+ gsl::index GetCaretPosition() {
+ return this->GetTextRenderObject()->GetCaretPosition();
+ }
+
+ void SetCaretPosition(gsl::index position, bool clear_selection = true) {
+ this->GetTextRenderObject()->SetCaretPosition(position);
+ if (clear_selection) {
+ this->GetTextRenderObject()->SetSelectionRange(std::nullopt);
+ }
+ }
+
+ std::optional<TextRange> GetSelection() {
+ return this->GetTextRenderObject()->GetSelectionRange();
+ }
+
+ void SetSelection(std::optional<TextRange> selection,
+ bool set_caret_to_end = true) {
+ this->GetTextRenderObject()->SetSelectionRange(selection);
+ if (selection && set_caret_to_end) {
+ this->GetTextRenderObject()->SetCaretPosition(selection->GetEnd());
+ }
+ }
+
private:
void AbortSelection() {
if (this->select_down_button_.has_value()) {