summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-10-20 14:34:53 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-10-20 14:34:53 +0000
commit27f5f8bd35318ac2025a2f5164ee45c18523ad3b (patch)
treed86dbedecd4142beb0292d196d1d3bf3ddee03a7 /src/display
parentExtensions: catch parameters and translatable values with empty name (diff)
downloadinkscape-27f5f8bd35318ac2025a2f5164ee45c18523ad3b.tar.gz
inkscape-27f5f8bd35318ac2025a2f5164ee45c18523ad3b.zip
Improve isolation
Diffstat (limited to 'src/display')
-rw-r--r--src/display/drawing-group.cpp4
-rw-r--r--src/display/drawing-item.cpp7
2 files changed, 5 insertions, 6 deletions
diff --git a/src/display/drawing-group.cpp b/src/display/drawing-group.cpp
index 6d1218c76..c61aee6ad 100644
--- a/src/display/drawing-group.cpp
+++ b/src/display/drawing-group.cpp
@@ -101,9 +101,7 @@ DrawingGroup::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigne
DrawingSurface intermediate(area, device_scale);
DrawingContext ict(intermediate);
ict.setOperator(CAIRO_OPERATOR_OVER);
- if (parent() && isolated) {
- flags = flags | RENDER_FILTER_BACKGROUND;
- }
+
if (stop_at == nullptr) {
// normal rendering
for (auto &i : _children) {
diff --git a/src/display/drawing-item.cpp b/src/display/drawing-item.cpp
index 52939e301..3a4f5cfc2 100644
--- a/src/display/drawing-item.cpp
+++ b/src/display/drawing-item.cpp
@@ -742,9 +742,6 @@ DrawingItem::render(DrawingContext &dc, Geom::IntRect const &area, unsigned flag
nir |= (_filter != nullptr && render_filters); // 3. it has a filter
nir |= needs_opacity; // 4. it is non-opaque
nir |= (_cache != nullptr); // 5. it is to be cached
- nir |= (_mix_blend_mode != SP_CSS_BLEND_NORMAL); // 6. Blend mode not normal
- // Isolation is handled by the drawing-group
-
/* How the rendering is done.
*
* Clipping, masking and opacity are done by rendering them to a surface
@@ -760,7 +757,11 @@ DrawingItem::render(DrawingContext &dc, Geom::IntRect const &area, unsigned flag
// We also use this path for filter background rendering, because masking, clipping,
// filters and opacity do not apply when rendering the ancestors of the filtered
// element
+
if ((flags & RENDER_FILTER_BACKGROUND) || !needs_intermediate_rendering) {
+ if (_cache) {
+ _cache->markDirty(*carea);
+ }
dc.setOperator(ink_css_blend_to_cairo_operator(_mix_blend_mode));
return _renderItem(dc, *carea, flags & ~RENDER_FILTER_BACKGROUND, stop_at);
}