From 655c8c76587a756147eb4bf54492dab4e94a1119 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 8 Sep 2020 00:06:06 +0200 Subject: [PATCH] WIP: mouse tracking on instance, box, path and text editor. --- src/edt/edt/edtPartialService.cc | 9 ++++--- src/edt/edt/edtPartialService.h | 8 ++---- src/edt/edt/edtPlugin.cc | 2 ++ src/edt/edt/edtServiceImpl.cc | 44 +++++++++++++++++++++++++++++--- src/edt/edt/edtServiceImpl.h | 4 +++ 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/edt/edt/edtPartialService.cc b/src/edt/edt/edtPartialService.cc index 989c4ae12..073b3a45d 100644 --- a/src/edt/edt/edtPartialService.cc +++ b/src/edt/edt/edtPartialService.cc @@ -1010,9 +1010,7 @@ PartialShapeFinder::visit_cell (const db::Cell &cell, const db::Box &search_box, PartialService::PartialService (db::Manager *manager, lay::LayoutView *view, lay::Dispatcher *root) : QObject (), - lay::ViewService (view->view_object_widget ()), - lay::Editable (view), - lay::Plugin (view), + lay::EditorServiceBase (view), db::Object (manager), mp_view (view), mp_root (root), @@ -1531,13 +1529,16 @@ PartialService::wheel_event (int /*delta*/, bool /*horizonal*/, const db::DPoint bool PartialService::mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio) { + clear_mouse_cursors (); + if (m_dragging) { set_cursor (lay::Cursor::size_all); m_alt_ac = ac_from_buttons (buttons); - // drag the vertex or edge/segment + // @@@ Provide object snapping also when moving edges, provide mouse tracking + // drag the vertex or edge/segment if (is_single_point_selection ()) { // for a single selected point, m_start is the original position and we snap the target - // thus, we can bring the point on grid or to an object's edge or vertex diff --git a/src/edt/edt/edtPartialService.h b/src/edt/edt/edtPartialService.h index 2c22ac21c..713d2dbfd 100644 --- a/src/edt/edt/edtPartialService.h +++ b/src/edt/edt/edtPartialService.h @@ -25,10 +25,8 @@ #ifndef HDR_edtPartialService #define HDR_edtPartialService -#include "layEditable.h" +#include "layEditorServiceBase.h" #include "layObjectInstPath.h" -#include "layLayoutView.h" -#include "layPlugin.h" #include "layViewObject.h" #include "layRubberBox.h" #include "laySnap.h" @@ -140,9 +138,7 @@ struct EdgeWithIndex */ class PartialService : public QObject, - public lay::ViewService, - public lay::Editable, - public lay::Plugin, + public lay::EditorServiceBase, public db::Object { Q_OBJECT diff --git a/src/edt/edt/edtPlugin.cc b/src/edt/edt/edtPlugin.cc index b6596218f..7caa8288b 100644 --- a/src/edt/edt/edtPlugin.cc +++ b/src/edt/edt/edtPlugin.cc @@ -23,6 +23,8 @@ #include "layTipDialog.h" #include "layEditorOptionsPages.h" +#include "layDispatcher.h" +#include "layLayoutView.h" #include "edtPlugin.h" #include "edtConfig.h" #include "edtService.h" diff --git a/src/edt/edt/edtServiceImpl.cc b/src/edt/edt/edtServiceImpl.cc index 95bb95c07..c15bc6106 100644 --- a/src/edt/edt/edtServiceImpl.cc +++ b/src/edt/edt/edtServiceImpl.cc @@ -728,9 +728,18 @@ BoxService::update_marker () } } -void +void +BoxService::do_mouse_move_inactive (const db::DPoint &p) +{ + lay::PointSnapToObjectResult snap_details = snap2_details (p); + mouse_cursor_from_snap_details (snap_details); +} + +void BoxService::do_mouse_move (const db::DPoint &p) { + do_mouse_move_inactive (p); + set_cursor (lay::Cursor::cross); m_p2 = snap2 (p); update_marker (); @@ -826,9 +835,18 @@ TextService::do_activated () return true; // start editing immediately } -void +void +TextService::do_mouse_move_inactive (const db::DPoint &p) +{ + lay::PointSnapToObjectResult snap_details = snap2_details (p); + mouse_cursor_from_snap_details (snap_details); +} + +void TextService::do_mouse_move (const db::DPoint &p) { + do_mouse_move_inactive (p); + set_cursor (lay::Cursor::cross); m_text.trans (db::DTrans (m_rot, snap2 (p) - db::DPoint ())); update_marker (); @@ -1010,9 +1028,18 @@ PathService::set_last_point (const db::DPoint &p) } } -void +void +PathService::do_mouse_move_inactive (const db::DPoint &p) +{ + lay::PointSnapToObjectResult snap_details = snap2_details (p); + mouse_cursor_from_snap_details (snap_details); +} + +void PathService::do_mouse_move (const db::DPoint &p) { + do_mouse_move_inactive (p); + set_cursor (lay::Cursor::cross); if (m_points.size () >= 2) { set_last_point (p); @@ -1454,9 +1481,18 @@ InstService::make_cell (const lay::CellView &cv) return std::pair (true, inst_cell_index); } -void +void +InstService::do_mouse_move_inactive (const db::DPoint &p) +{ + clear_mouse_cursors (); + add_mouse_cursor (snap (p)); +} + +void InstService::do_mouse_move (const db::DPoint &p) { + do_mouse_move_inactive (p); + set_cursor (lay::Cursor::cross); const lay::CellView &cv = view ()->cellview (m_cv_index); diff --git a/src/edt/edt/edtServiceImpl.h b/src/edt/edt/edtServiceImpl.h index 15865e2d6..f10c82a30 100644 --- a/src/edt/edt/edtServiceImpl.h +++ b/src/edt/edt/edtServiceImpl.h @@ -121,6 +121,7 @@ public: virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent); virtual void do_begin_edit (const db::DPoint &p); virtual void do_mouse_move (const db::DPoint &p); + virtual void do_mouse_move_inactive (const db::DPoint &p); virtual bool do_mouse_click (const db::DPoint &p); virtual void do_finish_edit (); virtual void do_cancel_edit (); @@ -147,6 +148,7 @@ public: virtual void do_begin_edit (const db::DPoint &p); virtual void do_mouse_transform (const db::DPoint &p, db::DFTrans trans); virtual void do_mouse_move (const db::DPoint &p); + virtual void do_mouse_move_inactive (const db::DPoint &p); virtual bool do_mouse_click (const db::DPoint &p); virtual void do_finish_edit (); virtual void do_cancel_edit (); @@ -178,6 +180,7 @@ public: virtual void do_begin_edit (const db::DPoint &p); virtual void do_mouse_move (const db::DPoint &p); virtual bool do_mouse_click (const db::DPoint &p); + virtual void do_mouse_move_inactive (const db::DPoint &p); virtual void do_finish_edit (); virtual void do_cancel_edit (); virtual bool do_activated (); @@ -210,6 +213,7 @@ public: virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent); virtual void do_begin_edit (const db::DPoint &p); + virtual void do_mouse_move_inactive (const db::DPoint &p); virtual void do_mouse_move (const db::DPoint &p); virtual bool do_mouse_click (const db::DPoint &p); virtual void do_mouse_transform (const db::DPoint &p, db::DFTrans trans);