From 017e93e3dae0be363c6b9caf71d68dc4d1055bc9 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sun, 2 Mar 2008 22:01:12 +0000 Subject: 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) --- src/display/Makefile_insert | 2 + src/display/canvas-temporary-item-list.cpp | 10 ++-- src/display/display-forward.h | 6 +++ src/display/snap-indicator.cpp | 76 ++++++++++++++++++++++++++++++ src/display/snap-indicator.h | 53 +++++++++++++++++++++ 5 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 src/display/snap-indicator.cpp create mode 100644 src/display/snap-indicator.h (limited to 'src/display') 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 + * + * 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 + * + * 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 : -- cgit v1.2.3