WIP: mouse tracking on instance, box, path and text editor.

This commit is contained in:
Matthias Koefferlein 2020-09-08 00:06:06 +02:00
parent 316cf77175
commit 655c8c7658
5 changed files with 53 additions and 14 deletions

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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<bool, db::cell_index_type> (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);

View File

@ -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);