diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-19 18:09:39 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-19 18:09:39 +0000 |
| commit | d73d8b49808d00a3be3f4f7bf87c58182a7ed5d9 (patch) | |
| tree | c261c99af9ae65ee89fdee41fe8969e66baa2102 | |
| parent | Fix bug in sh comparsion (diff) | |
| download | inkscape-d73d8b49808d00a3be3f4f7bf87c58182a7ed5d9.tar.gz inkscape-d73d8b49808d00a3be3f4f7bf87c58182a7ed5d9.zip | |
Improve function readibility in previous blend commit
| -rw-r--r-- | src/display/drawing-group.cpp | 84 |
1 files changed, 30 insertions, 54 deletions
diff --git a/src/display/drawing-group.cpp b/src/display/drawing-group.cpp index 4fe84d7eb..6d1218c76 100644 --- a/src/display/drawing-group.cpp +++ b/src/display/drawing-group.cpp @@ -93,70 +93,46 @@ DrawingGroup::_updateItem(Geom::IntRect const &area, UpdateContext const &ctx, u unsigned DrawingGroup::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at) { + bool isolated = false; if (!parent() || (_isolation == SP_CSS_ISOLATION_ISOLATE && !_mix_blend_mode)) { - int device_scale = dc.surface()->device_scale(); - DrawingSurface intermediate(area, device_scale); - DrawingContext ict(intermediate); - ict.setOperator(CAIRO_OPERATOR_OVER); - if (parent()) { - flags = flags | RENDER_FILTER_BACKGROUND; + isolated = true; + } + int device_scale = dc.surface()->device_scale(); + 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) { + i.setAntialiasing(_antialias); + i.render(isolated ? ict : dc, area, flags, stop_at); } - if (stop_at == nullptr) { - // normal rendering - for (auto &i : _children) { + } else { + // background rendering + for (auto &i : _children) { + if (&i == stop_at) + return RENDER_OK; // do not render the stop_at item at all + if (i.isAncestorOf(stop_at)) { + // render its ancestors without masks, opacity or filters i.setAntialiasing(_antialias); - i.render(ict, area, flags, stop_at); - } - } else { - // background rendering - for (auto &i : _children) { - if (&i == stop_at) - return RENDER_OK; // do not render the stop_at item at all - if (i.isAncestorOf(stop_at)) { - // render its ancestors without masks, opacity or filters - i.setAntialiasing(_antialias); - i.render(ict, area, flags | RENDER_FILTER_BACKGROUND, stop_at); - break; - } else { - i.setAntialiasing(_antialias); - i.render(ict, area, flags, stop_at); - } + i.render(isolated ? ict : dc, area, flags | RENDER_FILTER_BACKGROUND, stop_at); + break; + } else { + i.setAntialiasing(_antialias); + i.render(isolated ? ict : dc, area, flags, stop_at); } } + } + if (isolated) { dc.rectangle(area); dc.setSource(&intermediate); dc.setOperator(CAIRO_OPERATOR_OVER); dc.fill(); - return RENDER_OK; - } else { - /* cairo_operator_t current_op = CAIRO_OPERATOR_OVER; - if (parent()->_isolation == SP_CSS_ISOLATION_ISOLATE && !parent()->_mix_blend_mode) { - dc.setOperator(CAIRO_OPERATOR_OVER); - } */ - if (stop_at == nullptr) { - // normal rendering - for (auto &i : _children) { - i.setAntialiasing(_antialias); - i.render(dc, area, flags, stop_at); - } - } else { - // background rendering - for (auto &i : _children) { - if (&i == stop_at) - return RENDER_OK; // do not render the stop_at item at all - if (i.isAncestorOf(stop_at)) { - // render its ancestors without masks, opacity or filters - i.setAntialiasing(_antialias); - i.render(dc, area, flags | RENDER_FILTER_BACKGROUND, stop_at); - break; - } else { - i.setAntialiasing(_antialias); - i.render(dc, area, flags, stop_at); - } - } - } - return RENDER_OK; } + return RENDER_OK; } void |
