summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2017-01-25 11:33:08 +0000
committerjabiertxof <info@marker.es>2017-01-25 11:33:08 +0000
commitd8423112d4080f8bc432e3d7a577c877d2cb0ed2 (patch)
tree3fc18b797fdb7e359386e63302e26ad99014089a /src
parentupdate to trunk (diff)
parentRetain clone position in clone Original LPE (diff)
downloadinkscape-d8423112d4080f8bc432e3d7a577c877d2cb0ed2.tar.gz
inkscape-d8423112d4080f8bc432e3d7a577c877d2cb0ed2.zip
update to trunk
(bzr r13645.1.169)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/cairo-render-context.cpp2
-rw-r--r--src/live_effects/lpe-clone-original.cpp21
-rw-r--r--src/live_effects/lpe-clone-original.h1
-rw-r--r--src/widgets/icon.cpp14
4 files changed, 36 insertions, 2 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index e65752c84..06711bca4 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -865,7 +865,7 @@ CairoRenderContext::_finishSurfaceSetup(cairo_surface_t *surface, cairo_matrix_t
cairo_scale(_cr, Inkscape::Util::Quantity::convert(1, "px", "pt"), Inkscape::Util::Quantity::convert(1, "px", "pt"));
} else if (cairo_surface_get_content(_surface) != CAIRO_CONTENT_ALPHA) {
// set background color on non-alpha surfaces
- // TODO: bgcolor should be derived from SPDocument
+ // TODO: bgcolor should be derived from SPDocument (see IconImpl)
cairo_set_source_rgb(_cr, 1.0, 1.0, 1.0);
cairo_rectangle(_cr, 0, 0, _width, _height);
cairo_fill(_cr);
diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp
index 31d5bab65..e70575986 100644
--- a/src/live_effects/lpe-clone-original.cpp
+++ b/src/live_effects/lpe-clone-original.cpp
@@ -34,7 +34,8 @@ LPECloneOriginal::LPECloneOriginal(LivePathEffectObject *lpeobject) :
filter(_("Clone filter"), _("Clone filter"), "filter", &wr, this, false),
attributes("Attributes linked", "Attributes linked, comma separated atributes", "attributes", &wr, this,""),
style_attributes("Style attributes linked", "Style attributes linked, comma separated atributes", "style_attributes", &wr, this,""),
- expanded(false)
+ expanded(false),
+ origin(Geom::Point(0,0))
{
registerParameter(&linked_path);
registerParameter(&linked_item);
@@ -259,8 +260,26 @@ LPECloneOriginal::doBeforeEffect (SPLPEItem const* lpeitem){
style_attr.append(Glib::ustring(style_attributes.param_getSVGValue()).append(","));
if (inverse) {
cloneAttrbutes(SP_OBJECT(sp_lpe_item), linked_item.getObject(), true, g_strdup(attr.c_str()), g_strdup(style_attr.c_str()), true);
+ Geom::OptRect bbox = SP_ITEM(sp_lpe_item)->geometricBounds();
+ if (bbox && preserve_position && origin != Geom::Point(0,0)) {
+ origin = (*bbox).corner(0) - origin;
+ SP_ITEM(linked_item.getObject())->transform *= Geom::Translate(origin);
+ }
+ bbox = SP_ITEM(sp_lpe_item)->geometricBounds();
+ if (bbox && preserve_position) {
+ origin = (*bbox).corner(0);
+ }
} else {
cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, g_strdup(attr.c_str()), g_strdup(style_attr.c_str()), true);
+ Geom::OptRect bbox = SP_ITEM(linked_item.getObject())->geometricBounds();
+ if (bbox && preserve_position && origin != Geom::Point(0,0)) {
+ origin = (*bbox).corner(0) - origin;
+ SP_ITEM(sp_lpe_item)->transform *= Geom::Translate(origin);
+ }
+ bbox = SP_ITEM(linked_item.getObject())->geometricBounds();
+ if (bbox && preserve_position) {
+ origin = (*bbox).corner(0);
+ }
}
}
}
diff --git a/src/live_effects/lpe-clone-original.h b/src/live_effects/lpe-clone-original.h
index 0ff5eb01d..e4328c169 100644
--- a/src/live_effects/lpe-clone-original.h
+++ b/src/live_effects/lpe-clone-original.h
@@ -46,6 +46,7 @@ private:
BoolParam filter;
TextParam attributes;
TextParam style_attributes;
+ Geom::Point origin;
bool preserve_position_changed;
bool expanded;
Gtk::Expander * expander;
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index 1efa8f06b..885deaab7 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -35,6 +35,7 @@
#include "display/drawing.h"
#include "io/sys.h"
#include "sp-root.h"
+#include "sp-namedview.h"
#include "util/units.h"
#include "icon.h"
@@ -1163,6 +1164,19 @@ sp_icon_doc_icon( SPDocument *doc, Inkscape::Drawing &drawing,
CAIRO_FORMAT_ARGB32, psize, psize, stride);
Inkscape::DrawingContext dc(s, ua.min());
+ SPNamedView *nv = sp_document_namedview(doc, NULL);
+ float bg_r = SP_RGBA32_R_F(nv->pagecolor);
+ float bg_g = SP_RGBA32_G_F(nv->pagecolor);
+ float bg_b = SP_RGBA32_B_F(nv->pagecolor);
+ float bg_a = SP_RGBA32_A_F(nv->pagecolor);
+
+ cairo_t *cr = cairo_create(s);
+ cairo_set_source_rgba(cr, bg_r, bg_g, bg_b, bg_a);
+ cairo_rectangle(cr, 0, 0, psize, psize);
+ cairo_fill(cr);
+ cairo_save(cr);
+ cairo_destroy(cr);
+
drawing.render(dc, ua);
cairo_surface_destroy(s);