From adecef80feba338d2657eebc733f904fcb5e007d Mon Sep 17 00:00:00 2001 From: Sofia Piteira Date: Tue, 20 May 2025 19:40:31 +0100 Subject: [PATCH 1/3] Fixes #517 - Add a button with the ability to hide/single layers The Supertux level editor did not have a button to hide individual layers. Now this button is at the end of each layer menu. The button does not appear on the selected layer, as it does not make sense to hide the selected layer. When someone decides to hide a layer other than the selected one and then switches to it, that layer is shown again. In addition, after hiding a layer, if the hidden layer menu is opened again, instead of the hide layer button, a show layer button appears. The default opacity of 0.5 was kept as the default, so that users do not find it strange or have to press this implemented button. Closes #517 Co-authored-by: Filipe Oleacu --- src/editor/editor.hpp | 1 + src/editor/layers_widget.cpp | 4 ++++ src/editor/object_menu.cpp | 33 +++++++++++++++++++++++++++++++++ src/editor/object_menu.hpp | 1 + 4 files changed, 39 insertions(+) diff --git a/src/editor/editor.hpp b/src/editor/editor.hpp index c15dd124dfe..74c2d43f87e 100644 --- a/src/editor/editor.hpp +++ b/src/editor/editor.hpp @@ -51,6 +51,7 @@ class Editor final : public Screen, { public: static bool is_active(); + inline EditorLayersWidget* get_layers_widget() const { return m_layers_widget; } private: static bool is_autosave_file(const std::string& filename) { diff --git a/src/editor/layers_widget.cpp b/src/editor/layers_widget.cpp index a7685fc661d..ef5e1a49da4 100644 --- a/src/editor/layers_widget.cpp +++ b/src/editor/layers_widget.cpp @@ -495,10 +495,14 @@ EditorLayersWidget::set_selected_tilemap(TileMap* tilemap) { TileMap* selected_tilemap = get_selected_tilemap(); if (selected_tilemap) + { selected_tilemap->m_editor_active = false; + selected_tilemap->set_alpha(0.5f); + } m_selected_tilemap = tilemap->get_uid(); tilemap->m_editor_active = true; + tilemap->set_alpha(1.0f); } Vector diff --git a/src/editor/object_menu.cpp b/src/editor/object_menu.cpp index 6d24c84083d..e1bd5293fb7 100644 --- a/src/editor/object_menu.cpp +++ b/src/editor/object_menu.cpp @@ -54,6 +54,20 @@ ObjectMenu::refresh() } } + TileMap* selected_tilemap = m_editor.get_layers_widget()->get_selected_tilemap(); + if (m_object != selected_tilemap) + { + float current_alpha = static_cast(m_object)->get_alpha(); + if (current_alpha > 0.0f) + { + add_entry(MNID_HIDE_LAYER, _("Hide Layer")); + } + else + { + add_entry(MNID_HIDE_LAYER, _("Show Layer")); + } + } + if (!m_object->is_up_to_date()) { add_hl(); @@ -86,6 +100,25 @@ ObjectMenu::menu_action(MenuItem& item) refresh(); }); break; + + case MNID_HIDE_LAYER: + if (m_object) + { + TileMap* tilemap = static_cast(m_object); + float current_alpha = tilemap->get_alpha(); + if (current_alpha > 0.0f) + { + tilemap->set_alpha(0.0f); + } + else + { + tilemap->set_alpha(1.0f); + } + m_editor.m_reactivate_request = true; + refresh(); + } + MenuManager::instance().pop_menu(); + break; case MNID_PATCH_NOTES: { diff --git a/src/editor/object_menu.hpp b/src/editor/object_menu.hpp index b6d780edd53..0fbc073eb14 100644 --- a/src/editor/object_menu.hpp +++ b/src/editor/object_menu.hpp @@ -29,6 +29,7 @@ class ObjectMenu final : public Menu public: enum { MNID_UPDATE, + MNID_HIDE_LAYER, MNID_PATCH_NOTES, MNID_REMOVE, MNID_REMOVEFUNCTION, From aed7683623d9df774f79146a74176f2d0573103b Mon Sep 17 00:00:00 2001 From: Sofia Piteira Date: Wed, 4 Jun 2025 13:40:39 +0100 Subject: [PATCH 2/3] fix: make current_alpha a constant --- src/editor/object_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/object_menu.cpp b/src/editor/object_menu.cpp index e1bd5293fb7..17f95caffb2 100644 --- a/src/editor/object_menu.cpp +++ b/src/editor/object_menu.cpp @@ -105,7 +105,7 @@ ObjectMenu::menu_action(MenuItem& item) if (m_object) { TileMap* tilemap = static_cast(m_object); - float current_alpha = tilemap->get_alpha(); + const float current_alpha = static_cast(m_object)->get_alpha(); if (current_alpha > 0.0f) { tilemap->set_alpha(0.0f); From c716b23e22a92862f864363801ba59ca23350c74 Mon Sep 17 00:00:00 2001 From: xornamed <69918580+bruhmoent@users.noreply.github.com> Date: Wed, 4 Jun 2025 17:41:26 +0200 Subject: [PATCH 3/3] Missing `const` declaration --- src/editor/object_menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/object_menu.cpp b/src/editor/object_menu.cpp index 17f95caffb2..9bbad828416 100644 --- a/src/editor/object_menu.cpp +++ b/src/editor/object_menu.cpp @@ -57,7 +57,7 @@ ObjectMenu::refresh() TileMap* selected_tilemap = m_editor.get_layers_widget()->get_selected_tilemap(); if (m_object != selected_tilemap) { - float current_alpha = static_cast(m_object)->get_alpha(); + const float current_alpha = static_cast(m_object)->get_alpha(); if (current_alpha > 0.0f) { add_entry(MNID_HIDE_LAYER, _("Hide Layer"));