summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2017-11-01 21:13:21 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2017-11-01 21:13:21 +0000
commit66b464e2f07106e2b270517c13205464727f281f (patch)
treef7aa6386eef836f175aaa434bfbf4a06261e5621 /src
parentMerge branch 'master' into menuInverseClipMask (diff)
downloadinkscape-66b464e2f07106e2b270517c13205464727f281f.tar.gz
inkscape-66b464e2f07106e2b270517c13205464727f281f.zip
Added inverse mask and clippath
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-powermask.cpp60
-rw-r--r--src/live_effects/lpe-powermask.h1
-rw-r--r--src/selection-chemistry.cpp1
3 files changed, 35 insertions, 27 deletions
diff --git a/src/live_effects/lpe-powermask.cpp b/src/live_effects/lpe-powermask.cpp
index a0ba42ddf..0d48b1b77 100644
--- a/src/live_effects/lpe-powermask.cpp
+++ b/src/live_effects/lpe-powermask.cpp
@@ -19,7 +19,6 @@
#include "uri.h"
#include "extract-uri.h"
#include <bad-uri-exception.h>
-
// TODO due to internal breakage in glibmm headers, this must be last:
#include <glibmm/i18n.h>
@@ -41,12 +40,14 @@ LPEPowerMask::LPEPowerMask(LivePathEffectObject *lpeobject)
registerParameter(&hide_mask);
registerParameter(&background);
registerParameter(&background_color);
+ previous_color = background_color.get_value();
}
LPEPowerMask::~LPEPowerMask() {}
void
LPEPowerMask::doBeforeEffect (SPLPEItem const* lpeitem){
+ //To avoid close of color dialog and better performance on change color
SPObject * mask = SP_ITEM(sp_lpe_item)->mask_ref->getObject();
if(hide_mask && mask) {
SP_ITEM(sp_lpe_item)->mask_ref->detach();
@@ -60,35 +61,40 @@ LPEPowerMask::doBeforeEffect (SPLPEItem const* lpeitem){
}
mask = SP_ITEM(sp_lpe_item)->mask_ref->getObject();
if (mask) {
- uri.param_setValue(Glib::ustring(extract_uri(sp_lpe_item->getRepr()->attribute("mask"))), true);
- SP_ITEM(sp_lpe_item)->mask_ref->detach();
- Geom::OptRect bbox = sp_lpe_item->visualBounds();
- if(!bbox) {
- return;
- }
- if (uri.param_getSVGValue()) {
- try {
- SP_ITEM(sp_lpe_item)->mask_ref->attach(Inkscape::URI(uri.param_getSVGValue()));
- } catch (Inkscape::BadURIException &e) {
- g_warning("%s", e.what());
- SP_ITEM(sp_lpe_item)->mask_ref->detach();
- }
+ if (previous_color != background_color.get_value()) {
+ previous_color = background_color.get_value();
+ setMask();
} else {
+ uri.param_setValue(Glib::ustring(extract_uri(sp_lpe_item->getRepr()->attribute("mask"))), true);
SP_ITEM(sp_lpe_item)->mask_ref->detach();
+ Geom::OptRect bbox = sp_lpe_item->visualBounds();
+ if(!bbox) {
+ return;
+ }
+ if (uri.param_getSVGValue()) {
+ try {
+ SP_ITEM(sp_lpe_item)->mask_ref->attach(Inkscape::URI(uri.param_getSVGValue()));
+ } catch (Inkscape::BadURIException &e) {
+ g_warning("%s", e.what());
+ SP_ITEM(sp_lpe_item)->mask_ref->detach();
+ }
+ } else {
+ SP_ITEM(sp_lpe_item)->mask_ref->detach();
+ }
+ Geom::Rect bboxrect = (*bbox);
+ bboxrect.expandBy(1);
+ Geom::Point topleft = bboxrect.corner(0);
+ Geom::Point topright = bboxrect.corner(1);
+ Geom::Point bottomright = bboxrect.corner(2);
+ Geom::Point bottomleft = bboxrect.corner(3);
+ mask_box.clear();
+ mask_box.start(topleft);
+ mask_box.appendNew<Geom::LineSegment>(topright);
+ mask_box.appendNew<Geom::LineSegment>(bottomright);
+ mask_box.appendNew<Geom::LineSegment>(bottomleft);
+ mask_box.close();
+ setMask();
}
- Geom::Rect bboxrect = (*bbox);
- bboxrect.expandBy(1);
- Geom::Point topleft = bboxrect.corner(0);
- Geom::Point topright = bboxrect.corner(1);
- Geom::Point bottomright = bboxrect.corner(2);
- Geom::Point bottomleft = bboxrect.corner(3);
- mask_box.clear();
- mask_box.start(topleft);
- mask_box.appendNew<Geom::LineSegment>(topright);
- mask_box.appendNew<Geom::LineSegment>(bottomright);
- mask_box.appendNew<Geom::LineSegment>(bottomleft);
- mask_box.close();
- setMask();
}
}
diff --git a/src/live_effects/lpe-powermask.h b/src/live_effects/lpe-powermask.h
index 44bf56333..eb2640867 100644
--- a/src/live_effects/lpe-powermask.h
+++ b/src/live_effects/lpe-powermask.h
@@ -33,6 +33,7 @@ private:
BoolParam background;
ColorPickerParam background_color;
Geom::Path mask_box;
+ guint32 previous_color;
};
} //namespace LivePathEffect
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index 24113f976..43e7d8af5 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -4028,6 +4028,7 @@ void ObjectSet::setClipGroup()
lpe->getRepr()->setAttribute("inverse", "true");
lpe->getRepr()->setAttribute("flatten", "false");
lpe->getRepr()->setAttribute("hide_clip", "false");
+ dynamic_cast<LPEPowerClip *>(lpe)->convertShapes();
} else {
Effect::createAndApply(POWERMASK, doc, item);
Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE();