summaryrefslogtreecommitdiffstats
path: root/src/display/drawing-group.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-10-19 18:09:39 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-10-19 18:09:39 +0000
commitd73d8b49808d00a3be3f4f7bf87c58182a7ed5d9 (patch)
treec261c99af9ae65ee89fdee41fe8969e66baa2102 /src/display/drawing-group.cpp
parentFix bug in sh comparsion (diff)
downloadinkscape-d73d8b49808d00a3be3f4f7bf87c58182a7ed5d9.tar.gz
inkscape-d73d8b49808d00a3be3f4f7bf87c58182a7ed5d9.zip
Improve function readibility in previous blend commit
Diffstat (limited to 'src/display/drawing-group.cpp')
-rw-r--r--src/display/drawing-group.cpp84
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