diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-11-01 21:13:21 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-11-01 21:13:21 +0000 |
| commit | 66b464e2f07106e2b270517c13205464727f281f (patch) | |
| tree | f7aa6386eef836f175aaa434bfbf4a06261e5621 /src | |
| parent | Merge branch 'master' into menuInverseClipMask (diff) | |
| download | inkscape-66b464e2f07106e2b270517c13205464727f281f.tar.gz inkscape-66b464e2f07106e2b270517c13205464727f281f.zip | |
Added inverse mask and clippath
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/lpe-powermask.cpp | 60 | ||||
| -rw-r--r-- | src/live_effects/lpe-powermask.h | 1 | ||||
| -rw-r--r-- | src/selection-chemistry.cpp | 1 |
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(); |
