summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-10-20 21:51:17 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-10-20 21:51:17 +0000
commitc600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3 (patch)
tree42fc9a2082d29377cff595a9673fe93bdfda125d /src
parentUpdate inkscape.pot (diff)
downloadinkscape-c600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3.tar.gz
inkscape-c600fbef1f09a29fd7ae8f660ab2d12dff2fa1b3.zip
Improvements to blending and tooltip
Diffstat (limited to 'src')
-rw-r--r--src/display/drawing-group.cpp6
-rw-r--r--src/ui/dialog/objects.cpp20
-rw-r--r--src/ui/widget/filter-effect-chooser.cpp4
-rw-r--r--src/ui/widget/filter-effect-chooser.h4
-rw-r--r--src/ui/widget/object-composite-settings.cpp10
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);
}