mirror of https://github.com/KLayout/klayout.git
WIP: Ruler now has a mouse snapping indicator too.
This commit is contained in:
parent
df1583b5db
commit
316cf77175
|
|
@ -706,9 +706,7 @@ View::render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
|||
// ant::Service implementation
|
||||
|
||||
Service::Service (db::Manager *manager, lay::LayoutView *view)
|
||||
: lay::ViewService (view->view_object_widget ()),
|
||||
lay::Editable (view),
|
||||
lay::Plugin (view),
|
||||
: lay::EditorServiceBase (view),
|
||||
lay::Drawing (1/*number of planes*/, view->drawings ()),
|
||||
db::Object (manager),
|
||||
m_halo (true),
|
||||
|
|
@ -801,7 +799,7 @@ Service::configure (const std::string &name, const std::string &value)
|
|||
m_current_template = n;
|
||||
|
||||
} else {
|
||||
taken = false;
|
||||
lay::EditorServiceBase::configure (name, value);
|
||||
}
|
||||
|
||||
return taken;
|
||||
|
|
@ -1513,9 +1511,23 @@ Service::create_measure_ruler (const db::DPoint &pt, lay::angle_constraint_type
|
|||
}
|
||||
}
|
||||
|
||||
bool
|
||||
bool
|
||||
Service::mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio)
|
||||
{
|
||||
if (prio) {
|
||||
|
||||
lay::PointSnapToObjectResult snap_details;
|
||||
if (m_drawing) {
|
||||
snap_details = snap2_details (m_p1, p, mp_active_ruler->ruler (), ac_from_buttons (buttons));
|
||||
} else {
|
||||
const ant::Template &tpl = current_template ();
|
||||
snap_details = snap1_details (p, m_obj_snap && tpl.snap ());
|
||||
}
|
||||
|
||||
mouse_cursor_from_snap_details (snap_details);
|
||||
|
||||
}
|
||||
|
||||
if (m_drawing && prio) {
|
||||
|
||||
set_cursor (lay::Cursor::cross);
|
||||
|
|
@ -1532,12 +1544,14 @@ Service::mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio)
|
|||
void
|
||||
Service::deactivated ()
|
||||
{
|
||||
lay::EditorServiceBase::deactivated ();
|
||||
|
||||
drag_cancel ();
|
||||
clear_transient_selection ();
|
||||
}
|
||||
|
||||
std::pair<bool, db::DPoint>
|
||||
Service::snap1 (const db::DPoint &p, bool obj_snap)
|
||||
lay::PointSnapToObjectResult
|
||||
Service::snap1_details (const db::DPoint &p, bool obj_snap)
|
||||
{
|
||||
db::DVector g;
|
||||
if (m_grid_snap) {
|
||||
|
|
@ -1545,13 +1559,19 @@ Service::snap1 (const db::DPoint &p, bool obj_snap)
|
|||
}
|
||||
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
lay::PointSnapToObjectResult res = lay::obj_snap (obj_snap ? mp_view : 0, p, g, snap_range);
|
||||
return lay::obj_snap (obj_snap ? mp_view : 0, p, g, snap_range);
|
||||
}
|
||||
|
||||
std::pair<bool, db::DPoint>
|
||||
Service::snap1 (const db::DPoint &p, bool obj_snap)
|
||||
{
|
||||
lay::PointSnapToObjectResult res = snap1_details (p, obj_snap);
|
||||
return std::make_pair (res.object_snap != lay::PointSnapToObjectResult::NoObject, res.snapped_point);
|
||||
}
|
||||
|
||||
|
||||
std::pair <bool, db::DPoint>
|
||||
Service::snap2 (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *obj, lay::angle_constraint_type ac)
|
||||
lay::PointSnapToObjectResult
|
||||
Service::snap2_details (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *obj, lay::angle_constraint_type ac)
|
||||
{
|
||||
db::DVector g;
|
||||
if (m_grid_snap) {
|
||||
|
|
@ -1561,7 +1581,13 @@ Service::snap2 (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *o
|
|||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
lay::angle_constraint_type snap_mode = ac == lay::AC_Global ? (obj->angle_constraint () == lay::AC_Global ? m_snap_mode : obj->angle_constraint ()) : ac;
|
||||
|
||||
lay::PointSnapToObjectResult res = lay::obj_snap (m_obj_snap && obj->snap () ? mp_view : 0, p1, p2, g, snap_mode, snap_range);
|
||||
return lay::obj_snap (m_obj_snap && obj->snap () ? mp_view : 0, p1, p2, g, snap_mode, snap_range);
|
||||
}
|
||||
|
||||
std::pair <bool, db::DPoint>
|
||||
Service::snap2 (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *obj, lay::angle_constraint_type ac)
|
||||
{
|
||||
lay::PointSnapToObjectResult res = snap2_details (p1, p2, obj, ac);
|
||||
return std::make_pair (res.object_snap != lay::PointSnapToObjectResult::NoObject, res.snapped_point);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,9 +27,7 @@
|
|||
|
||||
#include "antCommon.h"
|
||||
|
||||
#include "layViewObject.h"
|
||||
#include "layEditable.h"
|
||||
#include "layPlugin.h"
|
||||
#include "layEditorServiceBase.h"
|
||||
#include "layDrawing.h"
|
||||
#include "laySnap.h"
|
||||
#include "layAnnotationShapes.h"
|
||||
|
|
@ -180,9 +178,7 @@ private:
|
|||
// -------------------------------------------------------------
|
||||
|
||||
class ANT_PUBLIC Service
|
||||
: public lay::ViewService,
|
||||
public lay::Editable,
|
||||
public lay::Plugin,
|
||||
: public lay::EditorServiceBase,
|
||||
public lay::Drawing,
|
||||
public db::Object
|
||||
{
|
||||
|
|
@ -529,8 +525,10 @@ private:
|
|||
unsigned int m_current_template;
|
||||
|
||||
std::pair<bool, db::DPoint> snap1 (const db::DPoint &p, bool obj_snap);
|
||||
lay::PointSnapToObjectResult snap1_details (const db::DPoint &p, bool obj_snap);
|
||||
std::pair<bool, db::DPoint> snap2 (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *obj, lay::angle_constraint_type ac);
|
||||
|
||||
lay::PointSnapToObjectResult snap2_details (const db::DPoint &p1, const db::DPoint &p2, const ant::Object *obj, lay::angle_constraint_type ac);
|
||||
|
||||
const ant::Template ¤t_template () const;
|
||||
|
||||
void show_message ();
|
||||
|
|
|
|||
|
|
@ -417,17 +417,7 @@ void
|
|||
PolygonService::do_mouse_move_inactive (const db::DPoint &p)
|
||||
{
|
||||
lay::PointSnapToObjectResult snap_details = snap2_details (p);
|
||||
|
||||
clear_mouse_cursors ();
|
||||
|
||||
add_mouse_cursor (snap_details.snapped_point,
|
||||
snap_details.object_snap == lay::PointSnapToObjectResult::ObjectVertex ||
|
||||
(snap_details.object_snap == lay::PointSnapToObjectResult::ObjectUnspecific && snap_details.object_ref.is_degenerate ()));
|
||||
|
||||
if (snap_details.object_snap == lay::PointSnapToObjectResult::ObjectEdge ||
|
||||
(snap_details.object_snap == lay::PointSnapToObjectResult::ObjectUnspecific && ! snap_details.object_ref.is_degenerate ())) {
|
||||
add_edge_marker (snap_details.object_ref, false);
|
||||
}
|
||||
mouse_cursor_from_snap_details (snap_details);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -237,6 +237,21 @@ EditorServiceBase::clear_mouse_cursors ()
|
|||
m_mouse_cursor_markers.clear ();
|
||||
}
|
||||
|
||||
void
|
||||
EditorServiceBase::mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details)
|
||||
{
|
||||
clear_mouse_cursors ();
|
||||
|
||||
add_mouse_cursor (snap_details.snapped_point,
|
||||
snap_details.object_snap == lay::PointSnapToObjectResult::ObjectVertex ||
|
||||
(snap_details.object_snap == lay::PointSnapToObjectResult::ObjectUnspecific && snap_details.object_ref.is_degenerate ()));
|
||||
|
||||
if (snap_details.object_snap == lay::PointSnapToObjectResult::ObjectEdge ||
|
||||
(snap_details.object_snap == lay::PointSnapToObjectResult::ObjectUnspecific && ! snap_details.object_ref.is_degenerate ())) {
|
||||
add_edge_marker (snap_details.object_ref, false);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
EditorServiceBase::configure (const std::string &name, const std::string &value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -84,6 +84,11 @@ public:
|
|||
*/
|
||||
void clear_mouse_cursors ();
|
||||
|
||||
/**
|
||||
* @brief Provides a nice mouse tracking cursor from the given snap details
|
||||
*/
|
||||
void mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details);
|
||||
|
||||
/**
|
||||
* @brief Gets the tracking cursor color
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue