summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-03-02 22:01:12 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-03-02 22:01:12 +0000
commit017e93e3dae0be363c6b9caf71d68dc4d1055bc9 (patch)
tree70d3afe3e23ab28effaa8f94c1c977e2a7c2aa11 /src
parent* [INTL: sk] (trunk) Updated Slovak translation (diff)
downloadinkscape-017e93e3dae0be363c6b9caf71d68dc4d1055bc9.tar.gz
inkscape-017e93e3dae0be363c6b9caf71d68dc4d1055bc9.zip
remove flashing test indicator on pointparam.
remove some leftover code from point param code remove test pointparam from LPEKnot added SnapIndicator added SnapIndicator to SPDesktop, and a call from guidesnapping to display a snapindicator when a guide is snapped. fix canvas-temporary-item-list.cpp (bzr r4931)
Diffstat (limited to 'src')
-rw-r--r--src/desktop-events.cpp20
-rw-r--r--src/desktop.cpp18
-rw-r--r--src/desktop.h2
-rw-r--r--src/display/Makefile_insert2
-rw-r--r--src/display/canvas-temporary-item-list.cpp10
-rw-r--r--src/display/display-forward.h6
-rw-r--r--src/display/snap-indicator.cpp76
-rw-r--r--src/display/snap-indicator.h53
-rw-r--r--src/live_effects/lpe-knot.h1
-rw-r--r--src/live_effects/parameter/point.cpp25
-rw-r--r--src/live_effects/parameter/point.h4
11 files changed, 175 insertions, 42 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index 1351d62f0..e115a744a 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -17,6 +17,7 @@
#include <map>
#include <string>
#include "display/guideline.h"
+#include "display/snap-indicator.h"
#include "helper/unit-menu.h"
#include "helper/units.h"
#include "desktop.h"
@@ -142,11 +143,16 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
NR::Point event_dt(desktop->w2d(event_w));
SnapManager const &m = desktop->namedview->snap_manager;
- event_dt = m.guideSnap(event_dt, normal).getPoint();
-
+ Inkscape::SnappedPoint snappoint = m.guideSnap(event_dt, normal);
+ event_dt = snappoint.getPoint();
+
sp_guideline_set_position(SP_GUIDELINE(guide), event_dt.to_2geom());
desktop->set_coordinate_status(event_dt);
desktop->setPosition (event_dt);
+
+ if (snappoint.getDistance() < NR_HUGE) {
+ desktop->snapindicator->set_new_snappoint(snappoint.getPoint().to_2geom());
+ }
}
break;
case GDK_BUTTON_RELEASE:
@@ -238,12 +244,18 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
// This is for snapping while dragging existing guidelines. New guidelines,
// which are dragged off the ruler, are being snapped in sp_dt_ruler_event
SnapManager const &m = desktop->namedview->snap_manager;
- motion_dt = m.guideSnap(motion_dt, guide->normal_to_line).getPoint();
-
+ Inkscape::SnappedPoint snappoint = m.guideSnap(motion_dt, guide->normal_to_line);
+ motion_dt = snappoint.getPoint();
+
sp_guide_moveto(*guide, motion_dt.to_2geom(), false);
moved = true;
desktop->set_coordinate_status(motion_dt);
desktop->setPosition (motion_dt);
+
+ if (snappoint.getDistance() < NR_HUGE) {
+ desktop->snapindicator->set_new_snappoint(snappoint.getPoint().to_2geom());
+ }
+
ret = TRUE;
}
break;
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 65025027a..3ff4bf2f5 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -78,6 +78,7 @@
#include "display/sodipodi-ctrlrect.h"
#include "display/sp-canvas-util.h"
#include "display/canvas-temporary-item-list.h"
+#include "display/snap-indicator.h"
#include "libnr/nr-matrix-div.h"
#include "libnr/nr-rect-ops.h"
#include "ui/dialog/dialog-manager.h"
@@ -117,6 +118,7 @@ SPDesktop::SPDesktop() :
layer_manager( 0 ),
event_log( 0 ),
temporary_item_list( 0 ),
+ snapindicator( 0 ),
acetate( 0 ),
main( 0 ),
gridgroup( 0 ),
@@ -316,13 +318,20 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas)
showGrids(namedview->grids_visible, false);
temporary_item_list = new Inkscape::Display::TemporaryItemList( this );
+ snapindicator = new Inkscape::Display::SnapIndicator ( this );
}
void SPDesktop::destroy()
{
- delete temporary_item_list;
- temporary_item_list = NULL;
+ if (snapindicator) {
+ delete snapindicator;
+ snapindicator = NULL;
+ }
+ if (temporary_item_list) {
+ delete temporary_item_list;
+ temporary_item_list = NULL;
+ }
namedview->hide(this);
@@ -393,7 +402,10 @@ SPDesktop::add_temporary_canvasitem (SPCanvasItem *item, guint lifetime)
void
SPDesktop::remove_temporary_canvasitem (Inkscape::Display::TemporaryItem * tempitem)
{
- temporary_item_list->delete_item(tempitem);
+ // check for non-null temporary_item_list, because during destruction of desktop, some destructor might try to access this list!
+ if (tempitem && temporary_item_list) {
+ temporary_item_list->delete_item(tempitem);
+ }
}
void SPDesktop::setDisplayModeNormal()
diff --git a/src/desktop.h b/src/desktop.h
index bb05331b6..1435eea6f 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -75,6 +75,7 @@ namespace Inkscape {
namespace Display {
class TemporaryItemList;
class TemporaryItem;
+ class SnapIndicator;
}
}
@@ -95,6 +96,7 @@ struct SPDesktop : public Inkscape::UI::View::View
Inkscape::EventLog *event_log;
Inkscape::Display::TemporaryItemList *temporary_item_list;
+ Inkscape::Display::SnapIndicator *snapindicator;
SPCanvasItem *acetate;
SPCanvasGroup *main;
diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert
index 61cb02155..d7b0fb608 100644
--- a/src/display/Makefile_insert
+++ b/src/display/Makefile_insert
@@ -55,6 +55,8 @@ display_libspdisplay_a_SOURCES = \
display/nr-plain-stuff-gdk.h \
display/nr-plain-stuff.cpp \
display/nr-plain-stuff.h \
+ display/snap-indicator.cpp \
+ display/snap-indicator.h \
display/sodipodi-ctrl.cpp \
display/sodipodi-ctrl.h \
display/sodipodi-ctrlrect.cpp \
diff --git a/src/display/canvas-temporary-item-list.cpp b/src/display/canvas-temporary-item-list.cpp
index 5b92e1828..54e81a1f0 100644
--- a/src/display/canvas-temporary-item-list.cpp
+++ b/src/display/canvas-temporary-item-list.cpp
@@ -37,11 +37,11 @@ TemporaryItemList::~TemporaryItemList()
TemporaryItem *
TemporaryItemList::add_item(SPCanvasItem *item, guint lifetime)
{
- if (lifetime > 100) { // beware of strange things happening due to very short timeouts
- TemporaryItem * tempitem = new TemporaryItem(item, lifetime);
- itemlist.push_back(tempitem);
- tempitem->signal_timeout.connect( sigc::mem_fun(*this, &TemporaryItemList::_item_timeout) );
- }
+ // beware of strange things happening due to very short timeouts
+ TemporaryItem * tempitem = new TemporaryItem(item, lifetime);
+ itemlist.push_back(tempitem);
+ tempitem->signal_timeout.connect( sigc::mem_fun(*this, &TemporaryItemList::_item_timeout) );
+ return tempitem;
}
void
diff --git a/src/display/display-forward.h b/src/display/display-forward.h
index a28b7d03a..191aac61f 100644
--- a/src/display/display-forward.h
+++ b/src/display/display-forward.h
@@ -11,6 +11,12 @@ struct SPCanvasGroup;
struct SPCanvasGroupClass;
struct SPCurve;
+namespace Inkscape {
+namespace Display {
+ class TemporaryItem;
+ class TemporaryItemList;
+}
+}
#define SP_TYPE_CANVAS_ITEM (sp_canvas_item_get_type())
#define SP_CANVAS_ITEM(obj) (GTK_CHECK_CAST((obj), SP_TYPE_CANVAS_ITEM, SPCanvasItem))
diff --git a/src/display/snap-indicator.cpp b/src/display/snap-indicator.cpp
new file mode 100644
index 000000000..1d005ceb8
--- /dev/null
+++ b/src/display/snap-indicator.cpp
@@ -0,0 +1,76 @@
+/** \file
+ * Provides a class that shows a temporary indicator on the canvas of where the snap was, and what kind of snap
+ *
+ * Authors:
+ * Johan Engelen
+ *
+ * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "display/snap-indicator.h"
+
+#include "desktop.h"
+#include "desktop-handles.h"
+#include "display/sodipodi-ctrl.h"
+#include "knot.h"
+
+namespace Inkscape {
+namespace Display {
+
+/** lifetime is measured in milliseconds
+ */
+SnapIndicator::SnapIndicator(SPDesktop * desktop)
+ : tempitem(NULL),
+ desktop(desktop)
+{
+}
+
+SnapIndicator::~SnapIndicator()
+{
+ // remove item that might be present
+ remove_snappoint();
+}
+
+void
+SnapIndicator::set_new_snappoint(Geom::Point p)
+{
+ remove_snappoint();
+
+ SPCanvasItem * canvasitem = sp_canvas_item_new( sp_desktop_tempgroup (desktop),
+ SP_TYPE_CTRL,
+ "anchor", GTK_ANCHOR_CENTER,
+ "size", 6.0,
+ "stroked", TRUE,
+ "stroke_color", 0xf000f0ff,
+ "mode", SP_KNOT_MODE_XOR,
+ "shape", SP_KNOT_SHAPE_CROSS,
+ NULL );
+ SP_CTRL(canvasitem)->moveto ( p );
+ tempitem = desktop->add_temporary_canvasitem(canvasitem, 2000);
+}
+
+void
+SnapIndicator::remove_snappoint()
+{
+ if (tempitem) {
+ desktop->remove_temporary_canvasitem(tempitem);
+ tempitem = NULL;
+ }
+}
+
+
+} //namespace Display
+} /* namespace Inkscape */
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/display/snap-indicator.h b/src/display/snap-indicator.h
new file mode 100644
index 000000000..bedeb492b
--- /dev/null
+++ b/src/display/snap-indicator.h
@@ -0,0 +1,53 @@
+#ifndef INKSCAPE_DISPLAY_SNAP_INDICATOR_H
+#define INKSCAPE_DISPLAY_SNAP_INDICATOR_H
+
+/** \file
+ * Provides a class that shows a temporary indicator on the canvas of where the snap was, and what kind of snap
+ *
+ * Authors:
+ * Johan Engelen
+ *
+ * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "forward.h"
+#include "display/display-forward.h"
+#include <2geom/point.h>
+
+namespace Inkscape {
+namespace Display {
+
+class SnapIndicator {
+public:
+ SnapIndicator(SPDesktop *desktop);
+ virtual ~SnapIndicator();
+
+ void set_new_snappoint(Geom::Point p);
+ void remove_snappoint();
+
+protected:
+ TemporaryItem * tempitem;
+ SPDesktop *desktop;
+
+private:
+ SnapIndicator(const SnapIndicator&);
+ SnapIndicator& operator=(const SnapIndicator&);
+};
+
+} //namespace Display
+} //namespace Inkscape
+
+#endif
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/live_effects/lpe-knot.h b/src/live_effects/lpe-knot.h
index f456ab2ce..a030f7567 100644
--- a/src/live_effects/lpe-knot.h
+++ b/src/live_effects/lpe-knot.h
@@ -16,7 +16,6 @@
#include "live_effects/effect.h"
#include "live_effects/parameter/parameter.h"
-#include "live_effects/parameter/point.h"
namespace Inkscape {
namespace LivePathEffect {
diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp
index 38bf4be57..075f7544f 100644
--- a/src/live_effects/parameter/point.cpp
+++ b/src/live_effects/parameter/point.cpp
@@ -24,12 +24,6 @@
#include "desktop.h"
#include "selection.h"
-// temporarily needed for tempitem tryout
-#include "desktop-handles.h"
-#include "display/sodipodi-ctrl.h"
-#include "knot.h"
-#include "display/canvas-temporary-item-list.h"
-
#define LPEPOINTPARAM_DEBUG // undefine to disable all on-canvas editing code for PointParam
namespace Inkscape {
@@ -41,7 +35,6 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip,
Effect* effect, Geom::Point default_value )
: Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value)
{
- knot = NULL;
#ifdef LPEPOINTPARAM_DEBUG
oncanvas_editable = true;
#endif
@@ -49,8 +42,6 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip,
PointParam::~PointParam()
{
- if (knot)
- g_object_unref (G_OBJECT (knot));
}
void
@@ -144,22 +135,6 @@ PointParam::param_editOncanvas(SPItem * item, SPDesktop * dt)
ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor;
shape_editor->set_item_lpe_point_parameter(item, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str());
-
-
- /* TEMPORARY CODE TO TEST TEMPORARY CANVAS ITEMS */
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
- SPCanvasItem * canvasitem = sp_canvas_item_new( sp_desktop_tempgroup (desktop),
- SP_TYPE_CTRL,
- "anchor", GTK_ANCHOR_CENTER,
- "size", 8.0,
- "stroked", TRUE,
- "stroke_color", 0xf000f0ff,
- "mode", SP_KNOT_MODE_XOR,
- "shape", SP_KNOT_SHAPE_CROSS,
- NULL );
- SP_CTRL(canvasitem)->moveto ( static_cast<Geom::Point> (*this) );
- desktop->add_temporary_canvasitem(canvasitem, 2000);
- /* END ---- TEMPORARY CODE TO TEST TEMPORARY CANVAS ITEMS */
}
diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h
index a6866f7df..c167807d9 100644
--- a/src/live_effects/parameter/point.h
+++ b/src/live_effects/parameter/point.h
@@ -16,8 +16,6 @@
#include "live_effects/parameter/parameter.h"
-struct SPKnot;
-
namespace Inkscape {
namespace LivePathEffect {
@@ -53,8 +51,6 @@ private:
void on_button_click();
- SPKnot *knot;
-
Geom::Point defvalue;
};