40
40
#include " scene/gui/menu_button.h"
41
41
42
42
void Camera2DEditor::edit (Camera2D *p_camera) {
43
- if (p_camera == selected_camera) {
43
+ if (p_camera == selected_camera) {
44
44
return ;
45
45
}
46
46
@@ -49,6 +49,12 @@ if (p_camera == selected_camera) {
49
49
50
50
if (selected_camera) {
51
51
selected_camera->disconnect (update_signal, update_overlays);
52
+ if (drag_type != Drag::NONE) {
53
+ selected_camera->set_limit_rect (drag_revert);
54
+ }
55
+ drag_type = Drag::NONE;
56
+ hover_type = Drag::NONE;
57
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override (CURSOR_ARROW);
52
58
}
53
59
selected_camera = p_camera;
54
60
@@ -67,32 +73,13 @@ bool Camera2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
67
73
if (mb.is_valid ()) {
68
74
if (mb->get_button_index () == MouseButton::LEFT) {
69
75
if (mb->is_pressed ()) {
70
- const Rect2 limit_rect = selected_camera->get_limit_rect ();
71
- const Vector2 pos = CanvasItemEditor::get_singleton ()->get_canvas_transform ().affine_inverse ().xform (mb->get_position ());
72
- drag_revert = limit_rect;
73
-
74
- if (pos.y > limit_rect.position .y && pos.y < limit_rect.get_end ().y ) {
75
- if (ABS (pos.x - limit_rect.position .x ) < 8 ) {
76
- drag_type = Drag::LEFT;
77
- return true ;
78
- } else if (ABS (pos.x - limit_rect.get_end ().x ) < 8 ) {
79
- drag_type = Drag::RIGHT;
80
- return true ;
81
- }
82
- } else if (pos.x > limit_rect.position .x && pos.x < limit_rect.get_end ().x ) {
83
- if (ABS (pos.y - limit_rect.position .y ) < 8 ) {
84
- drag_type = Drag::TOP;
85
- return true ;
86
- } else if (ABS (pos.y - limit_rect.get_end ().y ) < 8 ) {
87
- drag_type = Drag::BOTTOM;
88
- return true ;
89
- }
90
- }
76
+ if (hover_type != Drag::NONE) {
77
+ Vector2 pos = CanvasItemEditor::get_singleton ()->get_canvas_transform ().affine_inverse ().xform (mb->get_position ());
78
+ const Rect2 limit_rect = selected_camera->get_limit_rect ();
91
79
92
- if (limit_rect. has_point (pos)) {
93
- drag_type = Drag::CENTER ;
80
+ drag_type = hover_type;
81
+ drag_revert = selected_camera-> get_limit_rect () ;
94
82
center_drag_point = pos - limit_rect.position ;
95
- plugin->update_overlays ();
96
83
return true ;
97
84
}
98
85
} else if (drag_type != Drag::NONE) {
@@ -111,18 +98,21 @@ bool Camera2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
111
98
selected_camera->set_limit_rect (drag_revert);
112
99
drag_type = Drag::NONE;
113
100
plugin->update_overlays ();
101
+ _update_hover (mb->get_position ());
114
102
return true ;
115
103
}
116
104
return false ;
117
105
}
118
106
119
- if (drag_type == Drag::NONE) {
120
- return false ;
121
- }
122
-
123
107
Ref<InputEventMouseMotion> mm = p_event;
124
108
if (mm.is_valid ()) {
125
- Vector2 pos = CanvasItemEditor::get_singleton ()->get_canvas_transform ().affine_inverse ().xform (mm->get_position ());
109
+ Vector2 pos = mm->get_position ();
110
+ if (drag_type == Drag::NONE) {
111
+ _update_hover (pos);
112
+ return false ;
113
+ }
114
+
115
+ pos = CanvasItemEditor::get_singleton ()->get_canvas_transform ().affine_inverse ().xform (pos);
126
116
pos = CanvasItemEditor::get_singleton ()->snap_point (pos);
127
117
128
118
switch (drag_type) {
@@ -152,6 +142,9 @@ bool Camera2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
152
142
selected_camera->set_limit_rect (target_rect);
153
143
plugin->update_overlays ();
154
144
} break ;
145
+
146
+ case Drag::NONE: {
147
+ } break ;
155
148
}
156
149
return true ;
157
150
}
@@ -195,6 +188,53 @@ void Camera2DEditor::_update_overlays_if_needed(Camera2D *p_camera) {
195
188
}
196
189
}
197
190
191
+ void Camera2DEditor::_update_hover (const Vector2 &p_mouse_pos) {
192
+ if (CanvasItemEditor::get_singleton ()->get_current_tool () != CanvasItemEditor::TOOL_SELECT) {
193
+ hover_type = Drag::NONE;
194
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override ();
195
+ return ;
196
+ }
197
+
198
+ const Rect2 limit_rect = CanvasItemEditor::get_singleton ()->get_canvas_transform ().xform (selected_camera->get_limit_rect ());
199
+ const float drag_tolerance = 8.0 ;
200
+
201
+ hover_type = Drag::NONE;
202
+ if (p_mouse_pos.y > limit_rect.position .y && p_mouse_pos.y < limit_rect.get_end ().y ) {
203
+ if (Math::abs (p_mouse_pos.x - limit_rect.position .x ) < drag_tolerance) {
204
+ hover_type = Drag::LEFT;
205
+ } else if (Math::abs (p_mouse_pos.x - limit_rect.get_end ().x ) < drag_tolerance) {
206
+ hover_type = Drag::RIGHT;
207
+ }
208
+ } else if (p_mouse_pos.x > limit_rect.position .x && p_mouse_pos.x < limit_rect.get_end ().x ) {
209
+ if (Math::abs (p_mouse_pos.y - limit_rect.position .y ) < drag_tolerance) {
210
+ hover_type = Drag::TOP;
211
+ } else if (Math::abs (p_mouse_pos.y - limit_rect.get_end ().y ) < drag_tolerance) {
212
+ hover_type = Drag::BOTTOM;
213
+ }
214
+ }
215
+
216
+ if (hover_type == Drag::NONE && limit_rect.has_point (p_mouse_pos)) {
217
+ hover_type = Drag::CENTER;
218
+ }
219
+
220
+ switch (hover_type) {
221
+ case Drag::NONE: {
222
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override ();
223
+ } break ;
224
+ case Drag::LEFT:
225
+ case Drag::RIGHT: {
226
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override (CURSOR_HSIZE);
227
+ } break ;
228
+ case Drag::TOP:
229
+ case Drag::BOTTOM: {
230
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override (CURSOR_VSIZE);
231
+ } break ;
232
+ case Drag::CENTER: {
233
+ CanvasItemEditor::get_singleton ()->set_cursor_shape_override (CURSOR_MOVE);
234
+ } break ;
235
+ }
236
+ }
237
+
198
238
void Camera2DEditor::_notification (int p_what) {
199
239
switch (p_what) {
200
240
case NOTIFICATION_THEME_CHANGED: {
0 commit comments