aboutsummaryrefslogtreecommitdiff
path: root/CruUI/ui
diff options
context:
space:
mode:
Diffstat (limited to 'CruUI/ui')
-rw-r--r--CruUI/ui/control.cpp29
-rw-r--r--CruUI/ui/control.h5
-rw-r--r--CruUI/ui/controls/button.cpp33
-rw-r--r--CruUI/ui/controls/button.h36
-rw-r--r--CruUI/ui/window.cpp2
5 files changed, 99 insertions, 6 deletions
diff --git a/CruUI/ui/control.cpp b/CruUI/ui/control.cpp
index 2f5a7ef8..bfe3f7a7 100644
--- a/CruUI/ui/control.cpp
+++ b/CruUI/ui/control.cpp
@@ -382,8 +382,14 @@ namespace cru {
void Control::OnMouseLeaveCore(MouseEventArgs & args)
{
is_mouse_inside_ = false;
- for (auto& is_mouse_leave : is_mouse_leave_)
- is_mouse_leave.second = true;
+ for (auto& is_mouse_click_valid : is_mouse_click_valid_map_)
+ {
+ if (is_mouse_click_valid.second)
+ {
+ is_mouse_click_valid.second = false;
+ OnMouseClickEnd(is_mouse_click_valid.first);
+ }
+ }
}
void Control::OnMouseMoveCore(MouseEventArgs & args)
@@ -393,13 +399,18 @@ namespace cru {
void Control::OnMouseDownCore(MouseButtonEventArgs & args)
{
- is_mouse_leave_[args.GetMouseButton()] = false;
+ is_mouse_click_valid_map_[args.GetMouseButton()] = true;
+ OnMouseClickBegin(args.GetMouseButton());
}
void Control::OnMouseUpCore(MouseButtonEventArgs & args)
{
- if (!is_mouse_leave_[args.GetMouseButton()])
+ if (is_mouse_click_valid_map_[args.GetMouseButton()])
+ {
+ is_mouse_click_valid_map_[args.GetMouseButton()] = false;
RaiseMouseClickEvent(args);
+ OnMouseClickEnd(args.GetMouseButton());
+ }
}
void Control::OnMouseClickCore(MouseButtonEventArgs& args)
@@ -449,6 +460,16 @@ namespace cru {
mouse_click_event.Raise(args);
}
+ void Control::OnMouseClickBegin(MouseButton button)
+ {
+
+ }
+
+ void Control::OnMouseClickEnd(MouseButton button)
+ {
+
+ }
+
void Control::OnGetFocus(FocusChangeEventArgs& args)
{
diff --git a/CruUI/ui/control.h b/CruUI/ui/control.h
index 7b66ea57..44fbdfba 100644
--- a/CruUI/ui/control.h
+++ b/CruUI/ui/control.h
@@ -265,6 +265,9 @@ namespace cru
void RaiseMouseUpEvent(events::MouseButtonEventArgs& args);
void RaiseMouseClickEvent(events::MouseButtonEventArgs& args);
+ virtual void OnMouseClickBegin(MouseButton button);
+ virtual void OnMouseClickEnd(MouseButton button);
+
//*************** region: focus event ***************
virtual void OnGetFocus(events::FocusChangeEventArgs& args);
virtual void OnLoseFocus(events::FocusChangeEventArgs& args);
@@ -315,7 +318,7 @@ namespace cru
bool is_mouse_inside_ = false;
- std::unordered_map<MouseButton, bool> is_mouse_leave_
+ std::unordered_map<MouseButton, bool> is_mouse_click_valid_map_
{
{ MouseButton::Left, true },
{ MouseButton::Middle, true },
diff --git a/CruUI/ui/controls/button.cpp b/CruUI/ui/controls/button.cpp
new file mode 100644
index 00000000..b7614f93
--- /dev/null
+++ b/CruUI/ui/controls/button.cpp
@@ -0,0 +1,33 @@
+#include "button.h"
+
+#include "graph/graph.h"
+
+namespace cru::ui::controls
+{
+ using graph::CreateSolidBrush;
+
+ Button::Button() : Control(true)
+ {
+ normal_border_brush_ = CreateSolidBrush(D2D1::ColorF(D2D1::ColorF::RoyalBlue));
+ pressed_border_brush_ = CreateSolidBrush(D2D1::ColorF(D2D1::ColorF::MediumBlue));
+ current_border_brush_ = normal_border_brush_.Get();
+ }
+
+ void Button::OnDraw(ID2D1DeviceContext* device_context)
+ {
+ Control::OnDraw(device_context);
+ device_context->DrawRoundedRectangle(D2D1::RoundedRect(D2D1::RectF(0, 0, GetSize().width, GetSize().height), 6, 6), current_border_brush_, 2);
+ }
+
+ void Button::OnMouseClickBegin(MouseButton button)
+ {
+ current_border_brush_ = pressed_border_brush_.Get();
+ Repaint();
+ }
+
+ void Button::OnMouseClickEnd(MouseButton button)
+ {
+ current_border_brush_ = normal_border_brush_.Get();
+ Repaint();
+ }
+}
diff --git a/CruUI/ui/controls/button.h b/CruUI/ui/controls/button.h
new file mode 100644
index 00000000..f9ad7726
--- /dev/null
+++ b/CruUI/ui/controls/button.h
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "ui/control.h"
+
+namespace cru::ui::controls
+{
+ class Button : public Control
+ {
+ public:
+ static Button* Create()
+ {
+ return new Button();
+ }
+
+ protected:
+ Button();
+
+ public:
+ Button(const Button& other) = delete;
+ Button(Button&& other) = delete;
+ Button& operator=(const Button& other) = delete;
+ Button& operator=(Button&& other) = delete;
+ ~Button() override = default;
+
+ protected:
+ void OnDraw(ID2D1DeviceContext* device_context) override;
+
+ void OnMouseClickBegin(MouseButton button) override final;
+ void OnMouseClickEnd(MouseButton button) override final;
+
+ private:
+ Microsoft::WRL::ComPtr<ID2D1Brush> normal_border_brush_;
+ Microsoft::WRL::ComPtr<ID2D1Brush> pressed_border_brush_;
+ ID2D1Brush* current_border_brush_;
+ };
+}
diff --git a/CruUI/ui/window.cpp b/CruUI/ui/window.cpp
index 21528d9d..b20abb61 100644
--- a/CruUI/ui/window.cpp
+++ b/CruUI/ui/window.cpp
@@ -16,7 +16,7 @@ namespace cru
WNDCLASSEX window_class;
window_class.cbSize = sizeof(WNDCLASSEX);
- window_class.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
+ window_class.style = CS_HREDRAW | CS_VREDRAW;
window_class.lpfnWndProc = window_proc;
window_class.cbClsExtra = 0;
window_class.cbWndExtra = 0;