aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls/Button.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-03-24 19:14:19 +0800
committercrupest <crupest@outlook.com>2021-03-24 19:14:19 +0800
commit7f15a1ff9a2007e119798053083a0a87d042990a (patch)
treecb35c01a7eaee867376d959b96c9bbd15df939e5 /src/ui/controls/Button.cpp
parent74956951ee663012df0c3fe4ebe29799cb2f7732 (diff)
parent7703063a5816b089483e78ccd74bb9902ccfbea8 (diff)
downloadcru-7f15a1ff9a2007e119798053083a0a87d042990a.tar.gz
cru-7f15a1ff9a2007e119798053083a0a87d042990a.tar.bz2
cru-7f15a1ff9a2007e119798053083a0a87d042990a.zip
Merge branch 'master' of https://github.com/crupest/CruUI
Diffstat (limited to 'src/ui/controls/Button.cpp')
-rw-r--r--src/ui/controls/Button.cpp62
1 files changed, 10 insertions, 52 deletions
diff --git a/src/ui/controls/Button.cpp b/src/ui/controls/Button.cpp
index 6f6af878..c6480b77 100644
--- a/src/ui/controls/Button.cpp
+++ b/src/ui/controls/Button.cpp
@@ -1,61 +1,22 @@
#include "cru/ui/controls/Button.hpp"
-#include <memory>
#include "../Helper.hpp"
-#include "cru/platform/graph/Brush.hpp"
-#include "cru/platform/native/Cursor.hpp"
-#include "cru/platform/native/UiApplication.hpp"
-#include "cru/ui/render/BorderRenderObject.hpp"
+#include "cru/platform/graphics/Brush.hpp"
+#include "cru/platform/gui/Cursor.hpp"
+#include "cru/platform/gui/UiApplication.hpp"
#include "cru/ui/UiManager.hpp"
-#include "cru/ui/Window.hpp"
+#include "cru/ui/helper/ClickDetector.hpp"
+#include "cru/ui/render/BorderRenderObject.hpp"
namespace cru::ui::controls {
-using cru::platform::native::SystemCursorType;
-
-namespace {
-void Set(render::BorderRenderObject* o, const ButtonStateStyle& s) {
- o->SetBorderBrush(s.border_brush);
- o->SetBorderThickness(s.border_thickness);
- o->SetBorderRadius(s.border_radius);
- o->SetForegroundBrush(s.foreground_brush);
- o->SetBackgroundBrush(s.background_brush);
-}
-
-std::shared_ptr<platform::native::ICursor> GetSystemCursor(
- SystemCursorType type) {
- return GetUiApplication()->GetCursorManager()->GetSystemCursor(type);
-}
-} // namespace
-
Button::Button() : click_detector_(this) {
- style_ = UiManager::GetInstance()->GetThemeResources()->button_style;
-
render_object_ = std::make_unique<render::BorderRenderObject>();
render_object_->SetAttachedControl(this);
- Set(render_object_.get(), style_.normal);
+ SetContainerRenderObject(render_object_.get());
render_object_->SetBorderEnabled(true);
- click_detector_.StateChangeEvent()->AddHandler(
- [this](const ClickState& state) {
- switch (state) {
- case ClickState::None:
- Set(render_object_.get(), style_.normal);
- SetCursor(GetSystemCursor(SystemCursorType::Arrow));
- break;
- case ClickState::Hover:
- Set(render_object_.get(), style_.hover);
- SetCursor(GetSystemCursor(SystemCursorType::Hand));
- break;
- case ClickState::Press:
- Set(render_object_.get(), style_.press);
- SetCursor(GetSystemCursor(SystemCursorType::Hand));
- break;
- case ClickState::PressInactive:
- Set(render_object_.get(), style_.press_cancel);
- SetCursor(GetSystemCursor(SystemCursorType::Arrow));
- break;
- }
- });
+ GetStyleRuleSet()->SetParent(
+ &UiManager::GetInstance()->GetThemeResources()->button_style);
}
Button::~Button() = default;
@@ -64,10 +25,7 @@ render::RenderObject* Button::GetRenderObject() const {
return render_object_.get();
}
-void Button::OnChildChanged(Control* old_child, Control* new_child) {
- if (old_child != nullptr) render_object_->RemoveChild(0);
- if (new_child != nullptr)
- render_object_->AddChild(new_child->GetRenderObject(), 0);
+void Button::ApplyBorderStyle(const style::ApplyBorderStyleInfo& style) {
+ render_object_->ApplyBorderStyle(style);
}
-
} // namespace cru::ui::controls