Use new dock system for TileMap and TileSet

This commit is contained in:
Logan Detrick
2025-11-21 16:59:41 -08:00
parent ccf414ecb4
commit da8817a4e8
7 changed files with 37 additions and 35 deletions

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 2 6.25 3.375 8 4.75l1.75-1.375zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375Zm2.626 2.063L11.5 7.5l1.75 1.375L15 7.5ZM5.376 4.062l-1.75 1.375 1.75 1.375 1.75-1.375zM8 6.124 6.25 7.499 8 8.874l1.75-1.375zm2.626 2.063-1.75 1.375 1.75 1.375 1.75-1.375ZM2.75 6.125 1 7.5l1.75 1.375L4.5 7.5Zm2.624 2.062-1.75 1.375 1.75 1.375 1.75-1.375ZM8 10.25l-1.75 1.375L8 13l1.75-1.375z"/></svg>

After

Width:  |  Height:  |  Size: 469 B

View File

@ -37,6 +37,7 @@
#include "editor/inspector/editor_resource_preview.h"
#include "editor/inspector/multi_node_edit.h"
#include "editor/scene/canvas_item_editor_plugin.h"
#include "editor/settings/editor_command_palette.h"
#include "editor/settings/editor_settings.h"
#include "editor/themes/editor_scale.h"
#include "scene/2d/tile_map.h"
@ -4397,6 +4398,16 @@ void TileMapLayerEditor::set_show_layer_selector(bool p_show_layer_selector) {
TileMapLayerEditor::TileMapLayerEditor() {
set_process_internal(true);
set_name(TTRC("TileMap"));
set_icon_name("TileMapDock");
set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_map_bottom_panel", TTRC("Open TileMap Dock")));
set_default_slot(DockConstants::DOCK_SLOT_BOTTOM);
set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING);
set_global(false);
set_transient(true);
VBoxContainer *main_box_container = memnew(VBoxContainer);
add_child(main_box_container);
// Shortcuts.
ED_SHORTCUT("tiles_editor/select_next_layer", TTRC("Select Next Tile Map Layer"), Key::PAGEDOWN);
@ -4422,7 +4433,7 @@ TileMapLayerEditor::TileMapLayerEditor() {
// --- TileMap toolbar ---
tile_map_toolbar = memnew(HFlowContainer);
tile_map_toolbar->set_h_size_flags(SIZE_EXPAND_FILL);
add_child(tile_map_toolbar);
main_box_container->add_child(tile_map_toolbar);
// Tabs.
tile_map_toolbar->add_child(tabs_bar);
@ -4509,10 +4520,10 @@ TileMapLayerEditor::TileMapLayerEditor() {
cant_edit_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
cant_edit_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
cant_edit_label->hide();
add_child(cant_edit_label);
main_box_container->add_child(cant_edit_label);
for (unsigned int tab_index = 0; tab_index < tabs_data.size(); tab_index++) {
add_child(tabs_data[tab_index].panel);
main_box_container->add_child(tabs_data[tab_index].panel);
tabs_data[tab_index].panel->set_v_size_flags(SIZE_EXPAND_FILL);
tabs_data[tab_index].panel->set_visible(tab_index == 0);
tabs_data[tab_index].panel->set_h_size_flags(SIZE_EXPAND_FILL);

View File

@ -33,6 +33,7 @@
#include "tile_atlas_view.h"
#include "core/os/thread.h"
#include "editor/docks/editor_dock.h"
#include "scene/gui/box_container.h"
#include "scene/gui/check_box.h"
#include "scene/gui/flow_container.h"
@ -337,8 +338,8 @@ public:
TileMapLayerEditorTerrainsPlugin();
};
class TileMapLayerEditor : public VBoxContainer {
GDCLASS(TileMapLayerEditor, VBoxContainer);
class TileMapLayerEditor : public EditorDock {
GDCLASS(TileMapLayerEditor, EditorDock);
private:
bool tile_map_layer_changed_needs_update = false;

View File

@ -38,6 +38,7 @@
#include "editor/file_system/editor_file_system.h"
#include "editor/gui/editor_file_dialog.h"
#include "editor/inspector/editor_inspector.h"
#include "editor/settings/editor_command_palette.h"
#include "editor/settings/editor_settings.h"
#include "editor/themes/editor_scale.h"
@ -807,6 +808,13 @@ void TileSetEditor::register_split(SplitContainer *p_split) {
TileSetEditor::TileSetEditor() {
singleton = this;
set_name(TTRC("TileSet"));
set_icon_name("TileSet");
set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_set_bottom_panel", TTRC("Open TileSet Dock")));
set_default_slot(DockConstants::DOCK_SLOT_BOTTOM);
set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING);
set_global(false);
set_transient(true);
set_process_internal(true);

View File

@ -31,6 +31,7 @@
#pragma once
#include "atlas_merging_dialog.h"
#include "editor/docks/editor_dock.h"
#include "scene/gui/tab_bar.h"
#include "scene/resources/2d/tile_set.h"
#include "tile_proxies_manager_dialog.h"
@ -45,8 +46,8 @@ class EditorFileDialog;
class EditorInspectorPlugin;
class TileSetSourceItemList;
class TileSetEditor : public MarginContainer {
GDCLASS(TileSetEditor, MarginContainer);
class TileSetEditor : public EditorDock {
GDCLASS(TileSetEditor, EditorDock);
static TileSetEditor *singleton;

View File

@ -280,7 +280,6 @@ bool TilesEditorUtils::SourceNameComparator::operator()(const int &p_a, const in
}
void TilesEditorUtils::display_tile_set_editor_panel() {
tile_map_plugin_singleton->hide_editor();
tile_set_plugin_singleton->make_visible(true);
}
@ -481,13 +480,9 @@ bool TileMapEditorPlugin::handles(Object *p_object) const {
void TileMapEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
button->show();
EditorNode::get_bottom_panel()->make_item_visible(editor);
editor->open();
} else {
button->hide();
if (editor->is_visible_in_tree()) {
EditorNode::get_bottom_panel()->hide_bottom_panel();
}
editor->close();
}
}
@ -499,12 +494,6 @@ void TileMapEditorPlugin::forward_canvas_draw_over_viewport(Control *p_overlay)
editor->forward_canvas_draw_over_viewport(p_overlay);
}
void TileMapEditorPlugin::hide_editor() {
if (editor->is_visible_in_tree()) {
EditorNode::get_bottom_panel()->hide_bottom_panel();
}
}
bool TileMapEditorPlugin::is_editor_visible() const {
return editor->is_visible_in_tree();
}
@ -521,8 +510,8 @@ TileMapEditorPlugin::TileMapEditorPlugin() {
editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE);
editor->hide();
button = EditorNode::get_bottom_panel()->add_item(TTRC("TileMap"), editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_map_bottom_panel", TTRC("Toggle TileMap Bottom Panel")));
button->hide();
EditorDockManager::get_singleton()->add_dock(editor);
editor->close();
}
TileMapEditorPlugin::~TileMapEditorPlugin() {
@ -544,15 +533,9 @@ bool TileSetEditorPlugin::handles(Object *p_object) const {
void TileSetEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
button->show();
if (!tile_map_plugin_singleton->is_editor_visible()) {
EditorNode::get_bottom_panel()->make_item_visible(editor);
}
editor->open();
} else {
button->hide();
if (editor->is_visible_in_tree()) {
EditorNode::get_bottom_panel()->hide_bottom_panel();
}
editor->close();
}
}
@ -572,8 +555,8 @@ TileSetEditorPlugin::TileSetEditorPlugin() {
editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE);
editor->hide();
button = EditorNode::get_bottom_panel()->add_item(TTRC("TileSet"), editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_set_bottom_panel", TTRC("Toggle TileSet Bottom Panel")));
button->hide();
EditorDockManager::get_singleton()->add_dock(editor);
editor->close();
}
TileSetEditorPlugin::~TileSetEditorPlugin() {

View File

@ -122,7 +122,6 @@ class TileMapEditorPlugin : public EditorPlugin {
GDCLASS(TileMapEditorPlugin, EditorPlugin);
TileMapLayerEditor *editor = nullptr;
Button *button = nullptr;
ObjectID tile_map_layer_id;
ObjectID tile_map_group_id; // Allow keeping the layer selector up to date.
@ -148,7 +147,6 @@ public:
virtual bool forward_canvas_gui_input(const Ref<InputEvent> &p_event) override;
virtual void forward_canvas_draw_over_viewport(Control *p_overlay) override;
void hide_editor();
bool is_editor_visible() const;
TileMapEditorPlugin();
@ -159,7 +157,6 @@ class TileSetEditorPlugin : public EditorPlugin {
GDCLASS(TileSetEditorPlugin, EditorPlugin);
TileSetEditor *editor = nullptr;
Button *button = nullptr;
ObjectID edited_tileset;