diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp
index 2f8dc7c50413af972a2e6de3d6538273d34950b1..51bb1e1ccc190c845e808588b3f47b2a26a99114 100644 (file)
--- a/src/sp-offset.cpp
+++ b/src/sp-offset.cpp
-#define __SP_OFFSET_C__
-
/** \file
* Implementation of <path sodipodi:type="inkscape:offset">.
*/
* Authors: (of the sp-spiral.c upon which this file was constructed):
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
#include "livarot/Shape.h"
#include "enums.h"
-#include "prefs-utils.h"
+#include "preferences.h"
#include "sp-text.h"
#include "sp-offset.h"
#include "sp-use-reference.h"
static void sp_offset_release (SPObject * object);
static gchar *sp_offset_description (SPItem * item);
-static void sp_offset_snappoints(SPItem const *item, SnapPointsIter p);
+static void sp_offset_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
static void sp_offset_set_shape (SPShape * shape);
static void refresh_offset_source(SPOffset* offset);
static void sp_offset_start_listening(SPOffset *offset,SPObject* to);
static void sp_offset_quit_listening(SPOffset *offset);
static void sp_offset_href_changed(SPObject *old_ref, SPObject *ref, SPOffset *offset);
-static void sp_offset_move_compensate(NR::Matrix const *mp, SPItem *original, SPOffset *self);
+static void sp_offset_move_compensate(Geom::Matrix const *mp, SPItem *original, SPOffset *self);
static void sp_offset_delete_self(SPObject *deleted, SPOffset *self);
static void sp_offset_source_modified (SPObject *iSource, guint flags, SPItem *item);
@@ -217,39 +216,42 @@ sp_offset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
- if (object->repr->attribute("inkscape:radius")) {
- sp_object_read_attr (object, "inkscape:radius");
+ //XML Tree being used directly here while it shouldn't be.
+ if (object->getRepr()->attribute("inkscape:radius")) {
+ object->readAttr( "inkscape:radius" );
} else {
- gchar const *oldA = object->repr->attribute("sodipodi:radius");
- object->repr->setAttribute("inkscape:radius",oldA);
- object->repr->setAttribute("sodipodi:radius",NULL);
+ //XML Tree being used directly here (as object->getRepr)
+ //in all the below lines in the block while it shouldn't be.
+ gchar const *oldA = object->getRepr()->attribute("sodipodi:radius");
+ object->getRepr()->setAttribute("inkscape:radius",oldA);
+ object->getRepr()->setAttribute("sodipodi:radius",NULL);
- sp_object_read_attr (object, "inkscape:radius");
+ object->readAttr( "inkscape:radius" );
}
- if (object->repr->attribute("inkscape:original")) {
- sp_object_read_attr (object, "inkscape:original");
+ if (object->getRepr()->attribute("inkscape:original")) {
+ object->readAttr( "inkscape:original" );
} else {
- gchar const *oldA = object->repr->attribute("sodipodi:original");
- object->repr->setAttribute("inkscape:original",oldA);
- object->repr->setAttribute("sodipodi:original",NULL);
+ gchar const *oldA = object->getRepr()->attribute("sodipodi:original");
+ object->getRepr()->setAttribute("inkscape:original",oldA);
+ object->getRepr()->setAttribute("sodipodi:original",NULL);
- sp_object_read_attr (object, "inkscape:original");
+ object->readAttr( "inkscape:original" );
}
- if (object->repr->attribute("xlink:href")) {
- sp_object_read_attr(object, "xlink:href");
+ if (object->getRepr()->attribute("xlink:href")) {
+ object->readAttr( "xlink:href" );
} else {
- gchar const *oldA = object->repr->attribute("inkscape:href");
+ gchar const *oldA = object->getRepr()->attribute("inkscape:href");
if (oldA) {
size_t lA = strlen(oldA);
- char *nA=(char*)malloc((lA+1)*sizeof(char));
+ char *nA=(char*)malloc((1+lA+1)*sizeof(char));
memcpy(nA+1,oldA,lA*sizeof(char));
nA[0]='#';
nA[lA+1]=0;
- object->repr->setAttribute("xlink:href",nA);
+ object->getRepr()->setAttribute("xlink:href",nA);
free(nA);
- object->repr->setAttribute("inkscape:href",NULL);
+ object->getRepr()->setAttribute("inkscape:href",NULL);
}
- sp_object_read_attr (object, "xlink:href");
+ object->readAttr( "xlink:href" );
}
}
@@ -278,7 +280,7 @@ sp_offset_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
// Make sure the object has curve
- SPCurve *curve = sp_shape_get_curve (SP_SHAPE (offset));
+ SPCurve *curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL) {
sp_offset_set_shape (SP_SHAPE (offset));
}
if (flags &
(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape ((SPShape *) object);
+ ((SPShape *) object)->setShape ();
}
offset->isUpdating=false;
// just put the source shape as the offseted one, no one will notice
// it's also useless to compute the offset with a 0 radius
- const char *res_d = SP_OBJECT(shape)->repr->attribute("inkscape:original");
+ //XML Tree being used directly here while it shouldn't be.
+ const char *res_d = SP_OBJECT(shape)->getRepr()->attribute("inkscape:original");
if ( res_d ) {
Geom::PathVector pv = sp_svg_read_pathv(res_d);
SPCurve *c = new SPCurve(pv);
g_assert(c != NULL);
- sp_shape_set_curve_insync ((SPShape *) offset, c, TRUE);
+ ((SPShape *) offset)->setCurveInsync (c, TRUE);
c->unref();
}
return;
theRes->ConvertToForme (orig, 1, originaux);
SPItem *item = shape;
- NR::Maybe<NR::Rect> bbox = sp_item_bbox_desktop (item);
- if ( bbox && !bbox->isEmpty() ) {
+ Geom::OptRect bbox = item->getBboxDesktop ();
+ if ( bbox ) {
gdouble size = L2(bbox->dimensions());
- gdouble const exp = NR::expansion(item->transform);
+ gdouble const exp = item->transform.descrim();
if (exp != 0)
size /= exp;
orig->Coalesce (size * 0.001);
Geom::PathVector pv = sp_svg_read_pathv(res_d);
SPCurve *c = new SPCurve(pv);
g_assert(c != NULL);
- sp_shape_set_curve_insync ((SPShape *) offset, c, TRUE);
+ ((SPShape *) offset)->setCurveInsync (c, TRUE);
c->unref();
free (res_d);
/**
* Virtual snappoints function.
*/
-static void sp_offset_snappoints(SPItem const *item, SnapPointsIter p)
+static void sp_offset_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
{
if (((SPItemClass *) parent_class)->snappoints) {
- ((SPItemClass *) parent_class)->snappoints (item, p);
+ ((SPItemClass *) parent_class)->snappoints (item, p, snapprefs);
}
}
* -- njh
*/
bool
-vectors_are_clockwise (NR::Point A, NR::Point B, NR::Point C)
+vectors_are_clockwise (Geom::Point A, Geom::Point B, Geom::Point C)
{
- using NR::rot90;
+ using Geom::rot90;
double ab_s = dot(A, rot90(B));
double ab_c = dot(A, B);
double bc_s = dot(B, rot90(C));
* 'px inside source'.
*/
double
-sp_offset_distance_to_original (SPOffset * offset, NR::Point px)
+sp_offset_distance_to_original (SPOffset * offset, Geom::Point px)
{
if (offset == NULL || offset->originalPath == NULL
|| ((Path *) offset->originalPath)->descr_cmd.size() <= 1)
{
if (theRes->getPoint(i).totalDegree() > 0)
{
- NR::Point nx = theRes->getPoint(i).x;
- NR::Point nxpx = px-nx;
+ Geom::Point nx = theRes->getPoint(i).x;
+ Geom::Point nxpx = px-nx;
double ndist = sqrt (dot(nxpx,nxpx));
if (ptSet == false || fabs (ndist) < fabs (ptDist))
{
// we have a new minimum distance
// now we need to wheck if px is inside or outside (for the sign)
- nx = px - theRes->getPoint(i).x;
+ nx = px - to_2geom(theRes->getPoint(i).x);
double nlen = sqrt (dot(nx , nx));
nx /= nlen;
int pb, cb, fb;
do
{
// one angle
- NR::Point prx, nex;
+ Geom::Point prx, nex;
prx = theRes->getEdge(pb).dx;
nlen = sqrt (dot(prx, prx));
prx /= nlen;
}
while (cb >= 0 && pb >= 0 && pb != fb);
}
- }
+ }
}
// loop over the edges to try to improve the distance
for (int i = 0; i < theRes->numberOfEdges(); i++)
{
- NR::Point sx = theRes->getPoint(theRes->getEdge(i).st).x;
- NR::Point ex = theRes->getPoint(theRes->getEdge(i).en).x;
- NR::Point nx = ex - sx;
+ Geom::Point sx = theRes->getPoint(theRes->getEdge(i).st).x;
+ Geom::Point ex = theRes->getPoint(theRes->getEdge(i).en).x;
+ Geom::Point nx = ex - sx;
double len = sqrt (dot(nx,nx));
if (len > 0.0001)
- {
- NR::Point pxsx=px-sx;
+ {
+ Geom::Point pxsx=px-sx;
double ab = dot(nx,pxsx);
if (ab > 0 && ab < len * len)
{
arSet = true;
}
}
- }
+ }
}
if (arSet || ptSet)
{
return;
}
- SPCurve *curve = sp_shape_get_curve (SP_SHAPE (offset));
+ SPCurve *curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL)
{
sp_offset_set_shape (SP_SHAPE (offset));
- curve = sp_shape_get_curve (SP_SHAPE (offset));
+ curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL)
return;
}
@@ -1021,23 +1024,24 @@ sp_offset_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPOffset *offse
}
static void
-sp_offset_move_compensate(NR::Matrix const *mp, SPItem */*original*/, SPOffset *self)
+sp_offset_move_compensate(Geom::Matrix const *mp, SPItem */*original*/, SPOffset *self)
{
- guint mode = prefs_get_int_attribute("options.clonecompensation", "value", SP_CLONE_COMPENSATION_PARALLEL);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ guint mode = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_PARALLEL);
if (mode == SP_CLONE_COMPENSATION_NONE) return;
- NR::Matrix m(*mp);
- if (!(m.is_translation())) return;
+ Geom::Matrix m(*mp);
+ if (!(m.isTranslation())) return;
// calculate the compensation matrix and the advertized movement matrix
SPItem *item = SP_ITEM(self);
- NR::Matrix compensate;
- NR::Matrix advertized_move;
+ Geom::Matrix compensate;
+ Geom::Matrix advertized_move;
if (mode == SP_CLONE_COMPENSATION_UNMOVED) {
- compensate = NR::identity();
- advertized_move.set_identity();
+ compensate = Geom::identity();
+ advertized_move.setIdentity();
} else if (mode == SP_CLONE_COMPENSATION_PARALLEL) {
compensate = m;
advertized_move = m;
@@ -1048,14 +1052,15 @@ sp_offset_move_compensate(NR::Matrix const *mp, SPItem */*original*/, SPOffset *
item->transform *= compensate;
// commit the compensation
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, &advertized_move);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform, &advertized_move);
SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
static void
sp_offset_delete_self(SPObject */*deleted*/, SPOffset *offset)
{
- guint const mode = prefs_get_int_attribute("options.cloneorphans", "value", SP_CLONE_ORPHANS_UNLINK);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ guint const mode = prefs->getInt("/options/cloneorphans/value", SP_CLONE_ORPHANS_UNLINK);
if (mode == SP_CLONE_ORPHANS_UNLINK) {
// leave it be. just forget about the source
@@ -1074,7 +1079,7 @@ sp_offset_source_modified (SPObject */*iSource*/, guint /*flags*/, SPItem *item)
SPOffset *offset = SP_OFFSET(item);
offset->sourceDirty=true;
refresh_offset_source(offset);
- sp_shape_set_shape ((SPShape *) offset);
+ ((SPShape *) offset)->setShape ();
}
static void
SPCurve *curve=NULL;
if (!SP_IS_SHAPE (item) && !SP_IS_TEXT (item)) return;
if (SP_IS_SHAPE (item)) {
- curve = sp_shape_get_curve (SP_SHAPE (item));
+ curve = SP_SHAPE (item)->getCurve ();
if (curve == NULL)
return;
}
delete res;
delete orig;
- SP_OBJECT (offset)->repr->setAttribute("inkscape:original", res_d);
+ //XML Tree being used diectly here while it shouldn't be.
+ SP_OBJECT (offset)->getRepr()->setAttribute("inkscape:original", res_d);
free (res_d);
}
fill-column:99
End:
*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :