summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/effect.cpp3
-rw-r--r--src/live_effects/lpe-clone-original.cpp3
-rw-r--r--src/live_effects/lpe-copy_rotate.cpp12
-rw-r--r--src/live_effects/lpe-measure-line.cpp12
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp160
5 files changed, 114 insertions, 76 deletions
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 50e2aa353..f664870ec 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -430,6 +430,9 @@ void
Effect::processObjects(LpeAction lpe_action)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
for (std::vector<const char *>::iterator el_it = items.begin();
el_it != items.end(); ++el_it) {
const char * id = *el_it;
diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp
index 04db6171e..b1cd6b0e5 100644
--- a/src/live_effects/lpe-clone-original.cpp
+++ b/src/live_effects/lpe-clone-original.cpp
@@ -64,6 +64,9 @@ void
LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, const char * attributes, const char * style_attributes, bool root)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
if ( SP_IS_GROUP(origin) && SP_IS_GROUP(dest) && SP_GROUP(origin)->getItemCount() == SP_GROUP(dest)->getItemCount() ) {
std::vector< SPObject * > childs = origin->childList(true);
size_t index = 0;
diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp
index 26912115e..9ba680cd4 100644
--- a/src/live_effects/lpe-copy_rotate.cpp
+++ b/src/live_effects/lpe-copy_rotate.cpp
@@ -92,11 +92,13 @@ LPECopyRotate::doAfterEffect (SPLPEItem const* lpeitem)
{
if (split_items) {
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
items.clear();
container = dynamic_cast<SPObject *>(sp_lpe_item->parent);
- SPDocument * doc = SP_ACTIVE_DOCUMENT;
Inkscape::XML::Node *root = sp_lpe_item->document->getReprRoot();
- Inkscape::XML::Node *root_origin = doc->getReprRoot();
+ Inkscape::XML::Node *root_origin = document->getReprRoot();
if (root_origin != root) {
return;
}
@@ -174,6 +176,9 @@ void
LPECopyRotate::cloneD(SPObject *origin, SPObject *dest, bool root, bool reset)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
if ( SP_IS_GROUP(origin) && SP_IS_GROUP(dest) && SP_GROUP(origin)->getItemCount() == SP_GROUP(dest)->getItemCount() ) {
std::vector< SPObject * > childs = origin->childList(true);
@@ -216,6 +221,9 @@ void
LPECopyRotate::toItem(Geom::Affine transform, size_t i, bool reset)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
const char * elemref_id = g_strdup(Glib::ustring("rotated-").append(std::to_string(i)).append("-").append(sp_lpe_item->getRepr()->attribute("id")).c_str());
items.push_back(elemref_id);
diff --git a/src/live_effects/lpe-measure-line.cpp b/src/live_effects/lpe-measure-line.cpp
index ef87be81c..625db150b 100644
--- a/src/live_effects/lpe-measure-line.cpp
+++ b/src/live_effects/lpe-measure-line.cpp
@@ -171,6 +171,9 @@ void
LPEMeasureLine::createArrowMarker(const char * mode)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
SPObject *elemref = NULL;
Inkscape::XML::Node *arrow = NULL;
@@ -232,6 +235,9 @@ void
LPEMeasureLine::createTextLabel(Geom::Point pos, double length, Geom::Coord angle, bool remove, bool valid)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *rtext = NULL;
double doc_w = document->getRoot()->width.value;
@@ -376,6 +382,9 @@ void
LPEMeasureLine::createLine(Geom::Point start,Geom::Point end, const char * id, bool main, bool overflow, bool remove, bool arrows)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
SPObject *elemref = NULL;
Inkscape::XML::Node *line = NULL;
@@ -500,6 +509,9 @@ LPEMeasureLine::doBeforeEffect (SPLPEItem const* lpeitem)
SPLPEItem * splpeitem = const_cast<SPLPEItem *>(lpeitem);
sp_lpe_item->parent = dynamic_cast<SPObject *>(splpeitem->parent);
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Node *root = splpeitem->document->getReprRoot();
Inkscape::XML::Node *root_origin = document->getReprRoot();
if (root_origin != root) {
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index ad374c5f8..c31ce7c01 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -87,11 +87,14 @@ LPEMirrorSymmetry::~LPEMirrorSymmetry()
void
LPEMirrorSymmetry::doAfterEffect (SPLPEItem const* lpeitem)
{
+ SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
if (split_items && !discard_orig_path) {
container = dynamic_cast<SPObject *>(sp_lpe_item->parent);
- SPDocument * doc = SP_ACTIVE_DOCUMENT;
Inkscape::XML::Node *root = sp_lpe_item->document->getReprRoot();
- Inkscape::XML::Node *root_origin = doc->getReprRoot();
+ Inkscape::XML::Node *root_origin = document->getReprRoot();
if (root_origin != root) {
return;
}
@@ -161,20 +164,24 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem)
}
} else if ( mode == MT_V){
SPDocument * document = SP_ACTIVE_DOCUMENT;
- Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
- Geom::Point sp = Geom::Point(document->getWidth().value("px")/2.0, 0) * transform;
- start_point.param_setValue(sp, true);
- Geom::Point ep = Geom::Point(document->getWidth().value("px")/2.0, document->getHeight().value("px")) * transform;
- end_point.param_setValue(ep, true);
- center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ if (document) {
+ Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
+ Geom::Point sp = Geom::Point(document->getWidth().value("px")/2.0, 0) * transform;
+ start_point.param_setValue(sp, true);
+ Geom::Point ep = Geom::Point(document->getWidth().value("px")/2.0, document->getHeight().value("px")) * transform;
+ end_point.param_setValue(ep, true);
+ center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ }
} else { //horizontal page
SPDocument * document = SP_ACTIVE_DOCUMENT;
- Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
- Geom::Point sp = Geom::Point(0, document->getHeight().value("px")/2.0) * transform;
- start_point.param_setValue(sp, true);
- Geom::Point ep = Geom::Point(document->getWidth().value("px"), document->getHeight().value("px")/2.0) * transform;
- end_point.param_setValue(ep, true);
- center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ if (document) {
+ Geom::Affine transform = i2anc_affine(SP_OBJECT(lpeitem), NULL).inverse();
+ Geom::Point sp = Geom::Point(0, document->getHeight().value("px")/2.0) * transform;
+ start_point.param_setValue(sp, true);
+ Geom::Point ep = Geom::Point(document->getWidth().value("px"), document->getHeight().value("px")/2.0) * transform;
+ end_point.param_setValue(ep, true);
+ center_point.param_setValue(Geom::middle_point((Geom::Point)start_point, (Geom::Point)end_point), true);
+ }
}
previous_center = center_point;
}
@@ -183,6 +190,9 @@ void
LPEMirrorSymmetry::cloneD(SPObject *origin, SPObject *dest, bool live, bool root)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
+ if (!document) {
+ return;
+ }
Inkscape::XML::Document *xml_doc = document->getReprDoc();
if ( SP_IS_GROUP(origin) && SP_IS_GROUP(dest) && SP_GROUP(origin)->getItemCount() == SP_GROUP(dest)->getItemCount() ) {
std::vector< SPObject * > childs = origin->childList(true);
@@ -226,67 +236,69 @@ void
LPEMirrorSymmetry::toMirror(Geom::Affine transform)
{
SPDocument * document = SP_ACTIVE_DOCUMENT;
- Inkscape::XML::Document *xml_doc = document->getReprDoc();
- const char * id_origin_char = id_origin.param_getSVGValue();
- const char * elemref_id = g_strdup(Glib::ustring("mirror-").append(id_origin_char).c_str());
- items.clear();
- items.push_back(elemref_id);
- SPObject *elemref= NULL;
- Inkscape::XML::Node *phantom = NULL;
- if (elemref = document->getObjectById(elemref_id)) {
- phantom = elemref->getRepr();
- } else {
- phantom = sp_lpe_item->getRepr()->duplicate(xml_doc);
- std::vector<const char *> attrs;
- attrs.push_back("inkscape:path-effect");
- attrs.push_back("inkscape:original-d");
- attrs.push_back("sodipodi:type");
- attrs.push_back("sodipodi:rx");
- attrs.push_back("sodipodi:ry");
- attrs.push_back("sodipodi:cx");
- attrs.push_back("sodipodi:cy");
- attrs.push_back("sodipodi:end");
- attrs.push_back("sodipodi:start");
- attrs.push_back("inkscape:flatsided");
- attrs.push_back("inkscape:randomized");
- attrs.push_back("inkscape:rounded");
- attrs.push_back("sodipodi:arg1");
- attrs.push_back("sodipodi:arg2");
- attrs.push_back("sodipodi:r1");
- attrs.push_back("sodipodi:r2");
- attrs.push_back("sodipodi:sides");
- attrs.push_back("inkscape:randomized");
- attrs.push_back("sodipodi:argument");
- attrs.push_back("sodipodi:expansion");
- attrs.push_back("sodipodi:radius");
- attrs.push_back("sodipodi:revolution");
- attrs.push_back("sodipodi:t0");
- attrs.push_back("inkscape:randomized");
- attrs.push_back("inkscape:randomized");
- attrs.push_back("inkscape:randomized");
- attrs.push_back("x");
- attrs.push_back("y");
- attrs.push_back("rx");
- attrs.push_back("ry");
- attrs.push_back("width");
- attrs.push_back("height");
- for(const char * attr : attrs) {
- phantom->setAttribute(attr, NULL);
+ if (document) {
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
+ const char * id_origin_char = id_origin.param_getSVGValue();
+ const char * elemref_id = g_strdup(Glib::ustring("mirror-").append(id_origin_char).c_str());
+ items.clear();
+ items.push_back(elemref_id);
+ SPObject *elemref= NULL;
+ Inkscape::XML::Node *phantom = NULL;
+ if (elemref = document->getObjectById(elemref_id)) {
+ phantom = elemref->getRepr();
+ } else {
+ phantom = sp_lpe_item->getRepr()->duplicate(xml_doc);
+ std::vector<const char *> attrs;
+ attrs.push_back("inkscape:path-effect");
+ attrs.push_back("inkscape:original-d");
+ attrs.push_back("sodipodi:type");
+ attrs.push_back("sodipodi:rx");
+ attrs.push_back("sodipodi:ry");
+ attrs.push_back("sodipodi:cx");
+ attrs.push_back("sodipodi:cy");
+ attrs.push_back("sodipodi:end");
+ attrs.push_back("sodipodi:start");
+ attrs.push_back("inkscape:flatsided");
+ attrs.push_back("inkscape:randomized");
+ attrs.push_back("inkscape:rounded");
+ attrs.push_back("sodipodi:arg1");
+ attrs.push_back("sodipodi:arg2");
+ attrs.push_back("sodipodi:r1");
+ attrs.push_back("sodipodi:r2");
+ attrs.push_back("sodipodi:sides");
+ attrs.push_back("inkscape:randomized");
+ attrs.push_back("sodipodi:argument");
+ attrs.push_back("sodipodi:expansion");
+ attrs.push_back("sodipodi:radius");
+ attrs.push_back("sodipodi:revolution");
+ attrs.push_back("sodipodi:t0");
+ attrs.push_back("inkscape:randomized");
+ attrs.push_back("inkscape:randomized");
+ attrs.push_back("inkscape:randomized");
+ attrs.push_back("x");
+ attrs.push_back("y");
+ attrs.push_back("rx");
+ attrs.push_back("ry");
+ attrs.push_back("width");
+ attrs.push_back("height");
+ for(const char * attr : attrs) {
+ phantom->setAttribute(attr, NULL);
+ }
+ }
+ phantom->setAttribute("id", elemref_id);
+ if (!elemref) {
+ elemref = container->appendChildRepr(phantom);
+ Inkscape::GC::release(phantom);
+ }
+ cloneD(SP_OBJECT(sp_lpe_item), elemref, true, true);
+ elemref->getRepr()->setAttribute("transform" , sp_svg_transform_write(transform));
+ if (elemref->parent != container) {
+ Inkscape::XML::Node *copy = phantom->duplicate(xml_doc);
+ copy->setAttribute("id", elemref_id);
+ container->appendChildRepr(copy);
+ Inkscape::GC::release(copy);
+ elemref->deleteObject();
}
- }
- phantom->setAttribute("id", elemref_id);
- if (!elemref) {
- elemref = container->appendChildRepr(phantom);
- Inkscape::GC::release(phantom);
- }
- cloneD(SP_OBJECT(sp_lpe_item), elemref, true, true);
- elemref->getRepr()->setAttribute("transform" , sp_svg_transform_write(transform));
- if (elemref->parent != container) {
- Inkscape::XML::Node *copy = phantom->duplicate(xml_doc);
- copy->setAttribute("id", elemref_id);
- container->appendChildRepr(copy);
- Inkscape::GC::release(copy);
- elemref->deleteObject();
}
}