diff --git a/DevTools/VisualBuilder/VBForm.cpp b/DevTools/VisualBuilder/VBForm.cpp index 446177816f..d825da7287 100644 --- a/DevTools/VisualBuilder/VBForm.cpp +++ b/DevTools/VisualBuilder/VBForm.cpp @@ -288,6 +288,12 @@ void VBForm::mousemove_event(GMouseEvent& event) new_rect.set_height(new_rect.height() - (new_rect.height() % m_grid_size) + 1); widget.set_rect(new_rect); }); + + set_cursor_type_from_grabber(m_resize_direction); + } else { + for_each_selected_widget([&](auto& widget) { + set_cursor_type_from_grabber(widget.grabber_at(event.position())); + }); } } @@ -394,6 +400,36 @@ void VBForm::for_each_selected_widget(Callback callback) callback(*widget); } +void VBForm::set_cursor_type_from_grabber(Direction grabber) +{ + if (grabber == m_mouse_direction_type) + return; + + switch (grabber) { + case Direction::Up: + case Direction::Down: + window()->set_override_cursor(GStandardCursor::ResizeVertical); + break; + case Direction::Left: + case Direction::Right: + window()->set_override_cursor(GStandardCursor::ResizeHorizontal); + break; + case Direction::UpLeft: + case Direction::DownRight: + window()->set_override_cursor(GStandardCursor::ResizeDiagonalTLBR); + break; + case Direction::UpRight: + case Direction::DownLeft: + window()->set_override_cursor(GStandardCursor::ResizeDiagonalBLTR); + break; + case Direction::None: + window()->set_override_cursor(GStandardCursor::None); + break; + } + + m_mouse_direction_type = grabber; +} + VBWidget* VBForm::single_selected_widget() { if (m_selected_widgets.size() != 1) diff --git a/DevTools/VisualBuilder/VBForm.h b/DevTools/VisualBuilder/VBForm.h index 1f86c5027a..e2d7421185 100644 --- a/DevTools/VisualBuilder/VBForm.h +++ b/DevTools/VisualBuilder/VBForm.h @@ -47,6 +47,7 @@ private: void delete_selected_widgets(); template void for_each_selected_widget(Callback); + void set_cursor_type_from_grabber(Direction grabber); VBWidget* single_selected_widget(); @@ -59,5 +60,6 @@ private: Point m_transform_event_origin; Point m_next_insertion_position; Direction m_resize_direction { Direction::None }; + Direction m_mouse_direction_type { Direction::None }; OwnPtr m_context_menu; };