diff options
| author | Andrius Ramanauskas <knutux@gmail.com> | 2006-05-04 11:13:11 +0000 |
|---|---|---|
| committer | knutux <knutux@users.sourceforge.net> | 2006-05-04 11:13:11 +0000 |
| commit | c03f3dab98e24f608e3e57c9343f2302897c6ecf (patch) | |
| tree | 557648333b94360c1f57fbd5e2007f327a0f577a /src | |
| parent | fix lcms flag (diff) | |
| download | inkscape-c03f3dab98e24f608e3e57c9343f2302897c6ecf.tar.gz inkscape-c03f3dab98e24f608e3e57c9343f2302897c6ecf.zip | |
Temporary fix for broken snap functionality: as named view constructor is never called, virtual tables of Snapper derived classes are never initialized. Fix - calling constructor/destructor on SPNamedView init/release.
(bzr r725)
Diffstat (limited to 'src')
| -rw-r--r-- | src/grid-snapper.cpp | 4 | ||||
| -rw-r--r-- | src/grid-snapper.h | 1 | ||||
| -rw-r--r-- | src/guide-snapper.cpp | 4 | ||||
| -rw-r--r-- | src/guide-snapper.h | 1 | ||||
| -rw-r--r-- | src/line-snapper.h | 3 | ||||
| -rw-r--r-- | src/object-snapper.cpp | 4 | ||||
| -rw-r--r-- | src/object-snapper.h | 3 | ||||
| -rw-r--r-- | src/snapper.h | 1 | ||||
| -rw-r--r-- | src/sp-namedview.cpp | 5 |
9 files changed, 24 insertions, 2 deletions
diff --git a/src/grid-snapper.cpp b/src/grid-snapper.cpp index f1d4e4bf6..419dc4b82 100644 --- a/src/grid-snapper.cpp +++ b/src/grid-snapper.cpp @@ -39,6 +39,10 @@ Inkscape::LineSnapper::LineList Inkscape::GridSnapper::_getSnapLines(NR::Point c { LineList s; + if ( NULL == _named_view ) { + return s; + } + SPCGrid *griditem = NULL; for (GSList *l = _named_view->gridviews; l != NULL; l = l->next) { // FIXME : this is a hack since there is only one view for now diff --git a/src/grid-snapper.h b/src/grid-snapper.h index 247823ac7..73a1f2500 100644 --- a/src/grid-snapper.h +++ b/src/grid-snapper.h @@ -24,6 +24,7 @@ namespace Inkscape class GridSnapper : public LineSnapper { public: + GridSnapper() {} GridSnapper(SPNamedView const *nv, NR::Coord const d); private: diff --git a/src/guide-snapper.cpp b/src/guide-snapper.cpp index fbf1af0af..a05ecd3e6 100644 --- a/src/guide-snapper.cpp +++ b/src/guide-snapper.cpp @@ -26,6 +26,10 @@ Inkscape::GuideSnapper::LineList Inkscape::GuideSnapper::_getSnapLines(NR::Point { LineList s; + if ( NULL == _named_view ) { + return s; + } + for (GSList const *l = _named_view->guides; l != NULL; l = l->next) { SPGuide const *g = SP_GUIDE(l->data); diff --git a/src/guide-snapper.h b/src/guide-snapper.h index f4c7b2de7..654149f5c 100644 --- a/src/guide-snapper.h +++ b/src/guide-snapper.h @@ -28,6 +28,7 @@ namespace Inkscape class GuideSnapper : public LineSnapper { public: + GuideSnapper() {} GuideSnapper(SPNamedView const *nv, NR::Coord const d); private: diff --git a/src/line-snapper.h b/src/line-snapper.h index 581466d33..72afab76d 100644 --- a/src/line-snapper.h +++ b/src/line-snapper.h @@ -19,13 +19,14 @@ namespace Inkscape class LineSnapper : public Snapper { public: + LineSnapper() {} LineSnapper(SPNamedView const *nv, NR::Coord const d); protected: typedef std::list<std::pair<NR::Dim2, NR::Coord> > LineList; private: - SnappedPoint _doFreeSnap(NR::Point const &p, + virtual SnappedPoint _doFreeSnap(NR::Point const &p, std::list<SPItem const *> const &it) const; SnappedPoint _doConstrainedSnap(NR::Point const &p, diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 6146c11b8..9a3f61525 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -144,6 +144,10 @@ void Inkscape::ObjectSnapper::_snapPaths(Inkscape::SnappedPoint &s, Inkscape::SnappedPoint Inkscape::ObjectSnapper::_doFreeSnap(NR::Point const &p, std::list<SPItem const *> const &it) const { + if ( NULL == _named_view ) { + return SnappedPoint(p, NR_HUGE); + } + /* Get a list of all the SPItems that we will try to snap to */ std::list<SPItem*> cand; _findCandidates(cand, sp_document_root(_named_view->document), it, p); diff --git a/src/object-snapper.h b/src/object-snapper.h index 189e96e3e..98d457088 100644 --- a/src/object-snapper.h +++ b/src/object-snapper.h @@ -25,6 +25,7 @@ namespace Inkscape class ObjectSnapper : public Snapper { public: + ObjectSnapper() {} ObjectSnapper(SPNamedView const *nv, NR::Coord const d); void setSnapToNodes(bool s) { @@ -44,7 +45,7 @@ public: } private: - SnappedPoint _doFreeSnap(NR::Point const &p, + virtual SnappedPoint _doFreeSnap(NR::Point const &p, std::list<SPItem const *> const &it) const; SnappedPoint _doConstrainedSnap(NR::Point const &p, diff --git a/src/snapper.h b/src/snapper.h index 02f7cb7e9..2f3c487d6 100644 --- a/src/snapper.h +++ b/src/snapper.h @@ -27,6 +27,7 @@ namespace Inkscape class Snapper { public: + Snapper() {} Snapper(SPNamedView const *nv, ::NR::Coord const d); virtual ~Snapper() {} diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index bd7793ca1..4be180237 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -104,6 +104,9 @@ static void sp_namedview_class_init(SPNamedViewClass * klass) static void sp_namedview_init(SPNamedView *nv) { + // explicitly call a contructor + new(nv) SPNamedView(); + nv->editable = TRUE; nv->showgrid = FALSE; nv->showguides = TRUE; @@ -202,6 +205,8 @@ static void sp_namedview_release(SPObject *object) if (((SPObjectClass *) parent_class)->release) { ((SPObjectClass *) parent_class)->release(object); } + + namedview->~SPNamedView(); } static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *value) |
