From cedd07a05e3ec50d266e9ad09aff996dd496933e Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Mon, 8 Jan 2024 20:07:49 -0500 Subject: [PATCH] Feature: Group Translucency When entering a group that is not a layer, we turn the opacity down for all objects outside of that group to make it clear that we are inside a group and which one and which objects we're working with. --- src/desktop.cpp | 16 ++++++++++++++++ src/desktop.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/src/desktop.cpp b/src/desktop.cpp index 7abd51c830..846202fb2d 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -182,6 +182,11 @@ void SPDesktop::_setupCanvasItems() _canvas_drawing->connect_drawing_event(sigc::mem_fun(*this, &SPDesktop::drawing_handler)); canvas->set_drawing(_canvas_drawing->get_drawing()); + + _layer_changed_connection = _layer_manager->connectCurrentLayerChanged([this](SPGroup *group) { + updateTranslucenyGroups(); + }); + } SPDesktop::~SPDesktop() @@ -1395,6 +1400,17 @@ void SPDesktop::on_zoom_end(Gdk::EventSequence * /*sequence*/) _begin_zoom.reset(); } +/** + * Set or unset the translucency group if needed. + */ +void SPDesktop::updateTranslucenyGroups() +{ + auto group = _layer_manager->currentLayer(); + bool enabled = !group->isLayer(); + // TODO: Add preference to control this here? + _translucency_group->setSolidItem(enabled ? group : nullptr); +} + /* Local Variables: mode:c++ diff --git a/src/desktop.h b/src/desktop.h index 63c4c01064..39a66eaa14 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -550,6 +550,7 @@ private: sigc::scoped_connection _reconstruction_finish_connection; sigc::scoped_connection _schedule_zoom_from_document_connection; sigc::scoped_connection _y_axis_flipped; + sigc::scoped_connection _layer_changed_connection; bool drawing_handler(Inkscape::CanvasEvent const &event, Inkscape::DrawingItem *item); void reconstruction_start(); @@ -563,6 +564,8 @@ private: void on_zoom_end(Gdk::EventSequence *sequence); void onStatusMessage(Inkscape::MessageType type, char const *message); + + void updateTranslucenyGroups(); }; #endif // INKSCAPE_DESKTOP_H -- GitLab