diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-20 21:51:17 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-10-20 21:51:17 +0000 |
| commit | c600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3 (patch) | |
| tree | 42fc9a2082d29377cff595a9673fe93bdfda125d /src | |
| parent | Update inkscape.pot (diff) | |
| download | inkscape-c600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3.tar.gz inkscape-c600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3.zip | |
Improvements to blending and tooltip
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/drawing-group.cpp | 6 | ||||
| -rw-r--r-- | src/ui/dialog/objects.cpp | 20 | ||||
| -rw-r--r-- | src/ui/widget/filter-effect-chooser.cpp | 4 | ||||
| -rw-r--r-- | src/ui/widget/filter-effect-chooser.h | 4 | ||||
| -rw-r--r-- | src/ui/widget/object-composite-settings.cpp | 10 |
5 files changed, 35 insertions, 9 deletions
diff --git a/src/display/drawing-group.cpp b/src/display/drawing-group.cpp index c61aee6ad..337a6bcd9 100644 --- a/src/display/drawing-group.cpp +++ b/src/display/drawing-group.cpp @@ -94,9 +94,9 @@ 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)) { + if (!parent() || _isolation == SP_CSS_ISOLATION_ISOLATE || _mix_blend_mode) { isolated = true; - } + } int device_scale = dc.surface()->device_scale(); DrawingSurface intermediate(area, device_scale); DrawingContext ict(intermediate); @@ -127,7 +127,7 @@ DrawingGroup::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigne if (isolated) { dc.rectangle(area); dc.setSource(&intermediate); - dc.setOperator(CAIRO_OPERATOR_OVER); + dc.setOperator(ink_css_blend_to_cairo_operator(_mix_blend_mode)); dc.fill(); } return RENDER_OK; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index ede3590de..13e6c97bc 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -508,7 +508,11 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) opacity *= 100; // Display in percent. _filter_modifier.set_opacity_value(opacity); // Set the blend mode - _filter_modifier.set_blend_mode(item->style->mix_blend_mode.value, true); + if (item->style->isolation.value == SP_CSS_ISOLATION_ISOLATE) { + _filter_modifier.set_blend_mode(SP_CSS_BLEND_NORMAL, true); + } else { + _filter_modifier.set_blend_mode(item->style->mix_blend_mode.value, true); + } SPGaussianBlur *spblur = nullptr; if (item->style->getFilter()) { for (auto& primitive_obj: item->style->getFilter()->children) { @@ -1567,6 +1571,11 @@ void ObjectsPanel::_isolationChangedIter(const Gtk::TreeIter &iter) if (item) { item->style->isolation.set = TRUE; item->style->isolation.value = _filter_modifier.get_isolation_mode(); + if (item->style->isolation.value == SP_CSS_ISOLATION_ISOLATE) { + item->style->mix_blend_mode.set = TRUE; + item->style->mix_blend_mode.value = SP_CSS_BLEND_NORMAL; + _filter_modifier.set_blend_mode(0, false); + } item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); } } @@ -1594,7 +1603,14 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter &iter) if (item) { item->style->mix_blend_mode.set = TRUE; - item->style->mix_blend_mode.value = _filter_modifier.get_blend_mode(); + if (_filter_modifier.get_blend_mode() && + item->style->isolation.value == SP_CSS_ISOLATION_ISOLATE) + { + item->style->mix_blend_mode.value = SP_CSS_BLEND_NORMAL; + _filter_modifier.set_blend_mode(0, false); + } else { + item->style->mix_blend_mode.value = _filter_modifier.get_blend_mode(); + } item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); } } diff --git a/src/ui/widget/filter-effect-chooser.cpp b/src/ui/widget/filter-effect-chooser.cpp index 08a3a3750..fc5adbb59 100644 --- a/src/ui/widget/filter-effect-chooser.cpp +++ b/src/ui/widget/filter-effect-chooser.cpp @@ -78,10 +78,12 @@ SimpleFilterModifier::SimpleFilterModifier(int flags) _isolation.property_active() = false; _hb_blend.pack_start(_isolation, false, false, 5); _hb_blend.pack_start(_lb_isolation, false, false, 5); + _isolation.set_tooltip_text("Don't blend childrens with objects behind"); + _lb_isolation.set_tooltip_text("Don't blend childrens with objects behind"); } _hb_blend.pack_start(_lb_blend, false, false, 5); _hb_blend.pack_start(_blend, false, false, 5); - Gtk::Separator *separator = Gtk::manage(new Gtk::Separator()); + Gtk::Separator *separator = Gtk::manage(new Gtk::Separator()); separator->set_margin_top(8); separator->set_margin_bottom(8); add(*separator); diff --git a/src/ui/widget/filter-effect-chooser.h b/src/ui/widget/filter-effect-chooser.h index 21b8e7c7f..1892ba463 100644 --- a/src/ui/widget/filter-effect-chooser.h +++ b/src/ui/widget/filter-effect-chooser.h @@ -43,10 +43,10 @@ public: sigc::signal<void> &signal_isolation_changed(); int get_isolation_mode(); - void set_isolation_mode(const int, bool notifi); + void set_isolation_mode(const int, bool notify); int get_blend_mode(); - void set_blend_mode(const int, bool notifi); + void set_blend_mode(const int, bool notify); double get_blur_value() const; void set_blur_value(const double); diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp index 785cb589a..974c46b18 100644 --- a/src/ui/widget/object-composite-settings.cpp +++ b/src/ui/widget/object-composite-settings.cpp @@ -114,7 +114,11 @@ ObjectCompositeSettings::_blendBlurValueChanged() SPStyle *style = item->style; g_assert(style != nullptr); item->style->mix_blend_mode.set = TRUE; - item->style->mix_blend_mode.value = _filter_modifier.get_blend_mode(); + if (item->style->isolation.value == SP_CSS_ISOLATION_ISOLATE) { + item->style->mix_blend_mode.value = SP_CSS_BLEND_NORMAL; + } else { + item->style->mix_blend_mode.value = _filter_modifier.get_blend_mode(); + } item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); if (radius == 0 && item->style->filter.set @@ -193,6 +197,10 @@ void ObjectCompositeSettings::_isolationValueChanged() for (auto item : _subject->list()) { item->style->isolation.set = TRUE; item->style->isolation.value = _filter_modifier.get_isolation_mode(); + if (item->style->isolation.value == SP_CSS_ISOLATION_ISOLATE) { + item->style->mix_blend_mode.set = TRUE; + item->style->mix_blend_mode.value = SP_CSS_BLEND_NORMAL; + } item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); } |
