diff options
-rw-r--r-- | editor/plugins/tiles/tile_map_editor.cpp | 33 | ||||
-rw-r--r-- | editor/plugins/tiles/tile_map_editor.h | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp index 8b58a45ea5..5815c85718 100644 --- a/editor/plugins/tiles/tile_map_editor.cpp +++ b/editor/plugins/tiles/tile_map_editor.cpp @@ -562,6 +562,16 @@ bool TileMapEditorTilesPlugin::forward_canvas_gui_input(const Ref<InputEvent> &p return true; } + Ref<InputEventKey> k = p_event; + if (k.is_valid() && k->is_pressed() && !k->is_echo()) { + for (BaseButton *b : viewport_shortcut_buttons) { + if (b->get_shortcut().is_valid() && b->get_shortcut()->matches_event(p_event)) { + b->set_pressed(b->get_button_group().is_valid() || !b->is_pressed()); + return true; + } + } + } + Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { has_mouse = true; @@ -2075,6 +2085,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { select_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/selection_tool", TTR("Selection"), Key::S)); select_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(select_tool_button); + viewport_shortcut_buttons.push_back(select_tool_button); paint_tool_button = memnew(Button); paint_tool_button->set_flat(true); @@ -2084,6 +2095,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { paint_tool_button->set_tooltip_text(TTR("Shift: Draw line.") + "\n" + TTR("Shift+Ctrl: Draw rectangle.")); paint_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(paint_tool_button); + viewport_shortcut_buttons.push_back(paint_tool_button); line_tool_button = memnew(Button); line_tool_button->set_flat(true); @@ -2093,6 +2105,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { line_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/line_tool", TTR("Line", "Tool"), Key::L)); line_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(line_tool_button); + viewport_shortcut_buttons.push_back(line_tool_button); rect_tool_button = memnew(Button); rect_tool_button->set_flat(true); @@ -2101,6 +2114,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { rect_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/rect_tool", TTR("Rect"), Key::R)); rect_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(rect_tool_button); + viewport_shortcut_buttons.push_back(rect_tool_button); bucket_tool_button = memnew(Button); bucket_tool_button->set_flat(true); @@ -2110,6 +2124,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { bucket_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTilesPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(bucket_tool_button); toolbar->add_child(tilemap_tiles_tools_buttons); + viewport_shortcut_buttons.push_back(bucket_tool_button); // -- TileMap tool settings -- tools_settings = memnew(HBoxContainer); @@ -2126,6 +2141,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { picker_button->set_tooltip_text(TTR("Alternatively hold Ctrl with other tools to pick tile.")); picker_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport)); tools_settings->add_child(picker_button); + viewport_shortcut_buttons.push_back(picker_button); // Erase button. erase_button = memnew(Button); @@ -2135,6 +2151,7 @@ TileMapEditorTilesPlugin::TileMapEditorTilesPlugin() { erase_button->set_tooltip_text(TTR("Alternatively use RMB to erase tiles.")); erase_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport)); tools_settings->add_child(erase_button); + viewport_shortcut_buttons.push_back(erase_button); // Separator 2. tools_settings_vsep_2 = memnew(VSeparator); @@ -2860,6 +2877,16 @@ bool TileMapEditorTerrainsPlugin::forward_canvas_gui_input(const Ref<InputEvent> _update_selection(); + Ref<InputEventKey> k = p_event; + if (k.is_valid() && k->is_pressed() && !k->is_echo()) { + for (BaseButton *b : viewport_shortcut_buttons) { + if (b->get_shortcut().is_valid() && b->get_shortcut()->matches_event(p_event)) { + b->set_pressed(b->get_button_group().is_valid() || !b->is_pressed()); + return true; + } + } + } + Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { has_mouse = true; @@ -3388,6 +3415,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { paint_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/paint_tool", TTR("Paint"), Key::D)); paint_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(paint_tool_button); + viewport_shortcut_buttons.push_back(paint_tool_button); line_tool_button = memnew(Button); line_tool_button->set_flat(true); @@ -3396,6 +3424,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { line_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/line_tool", TTR("Line"), Key::L)); line_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(line_tool_button); + viewport_shortcut_buttons.push_back(line_tool_button); rect_tool_button = memnew(Button); rect_tool_button->set_flat(true); @@ -3404,6 +3433,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { rect_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/rect_tool", TTR("Rect"), Key::R)); rect_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(rect_tool_button); + viewport_shortcut_buttons.push_back(rect_tool_button); bucket_tool_button = memnew(Button); bucket_tool_button->set_flat(true); @@ -3412,6 +3442,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { bucket_tool_button->set_shortcut(ED_SHORTCUT("tiles_editor/bucket_tool", TTR("Bucket"), Key::B)); bucket_tool_button->connect("pressed", callable_mp(this, &TileMapEditorTerrainsPlugin::_update_toolbar)); tilemap_tiles_tools_buttons->add_child(bucket_tool_button); + viewport_shortcut_buttons.push_back(bucket_tool_button); toolbar->add_child(tilemap_tiles_tools_buttons); @@ -3429,6 +3460,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", TTR("Picker"), Key::P)); picker_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport)); tools_settings->add_child(picker_button); + viewport_shortcut_buttons.push_back(picker_button); // Erase button. erase_button = memnew(Button); @@ -3437,6 +3469,7 @@ TileMapEditorTerrainsPlugin::TileMapEditorTerrainsPlugin() { erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", TTR("Eraser"), Key::E)); erase_button->connect("pressed", callable_mp(CanvasItemEditor::get_singleton(), &CanvasItemEditor::update_viewport)); tools_settings->add_child(erase_button); + viewport_shortcut_buttons.push_back(erase_button); // Separator 2. tools_settings_vsep_2 = memnew(VSeparator); diff --git a/editor/plugins/tiles/tile_map_editor.h b/editor/plugins/tiles/tile_map_editor.h index eb8c3937a0..ab5787b78f 100644 --- a/editor/plugins/tiles/tile_map_editor.h +++ b/editor/plugins/tiles/tile_map_editor.h @@ -203,6 +203,7 @@ private: // General void _update_theme(); + List<BaseButton *> viewport_shortcut_buttons; // Update callback virtual void tile_set_changed() override; @@ -293,6 +294,7 @@ private: // Cache. LocalVector<LocalVector<RBSet<TileSet::TerrainsPattern>>> per_terrain_terrains_patterns; + List<BaseButton *> viewport_shortcut_buttons; // Update functions. void _update_terrains_cache(); |