Merge pull request #34975 from YeldhamDev/tileseteditor_region_workspace_size

Fix TileSet editor's workspace size sometimes not changing correctly on region change
This commit is contained in:
Rémi Verschelde 2020-01-10 07:52:33 +01:00 committed by GitHub
commit 9cae13b103
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1303,12 +1303,14 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) {
Size2 tile_workspace_size = edited_region.position + edited_region.size + WORKSPACE_MARGIN * 2;
Size2 workspace_minsize = workspace->get_custom_minimum_size();
if (tile_workspace_size.x > workspace_minsize.x && tile_workspace_size.y > workspace_minsize.y) {
undo_redo->add_do_method(workspace, "set_custom_minimum_size", tile_workspace_size);
// If the new region is bigger, just directly change the workspace size to avoid checking all other tiles.
if (tile_workspace_size.x > workspace_minsize.x || tile_workspace_size.y > workspace_minsize.y) {
Size2 max_workspace_size = Size2(MAX(tile_workspace_size.x, workspace_minsize.x), MAX(tile_workspace_size.y, workspace_minsize.y));
undo_redo->add_do_method(workspace, "set_custom_minimum_size", max_workspace_size);
undo_redo->add_undo_method(workspace, "set_custom_minimum_size", workspace_minsize);
undo_redo->add_do_method(workspace_container, "set_custom_minimum_size", tile_workspace_size);
undo_redo->add_do_method(workspace_container, "set_custom_minimum_size", max_workspace_size);
undo_redo->add_undo_method(workspace_container, "set_custom_minimum_size", workspace_minsize);
undo_redo->add_do_method(workspace_overlay, "set_custom_minimum_size", tile_workspace_size);
undo_redo->add_do_method(workspace_overlay, "set_custom_minimum_size", max_workspace_size);
undo_redo->add_undo_method(workspace_overlay, "set_custom_minimum_size", workspace_minsize);
} else if (workspace_minsize.x > get_current_texture()->get_size().x + WORKSPACE_MARGIN.x * 2 || workspace_minsize.y > get_current_texture()->get_size().y + WORKSPACE_MARGIN.y * 2) {
undo_redo->add_do_method(this, "update_workspace_minsize");
@ -1803,8 +1805,6 @@ void TileSetEditor::_on_tool_clicked(int p_tool) {
Ref<ConvexPolygonShape2D> _convex = memnew(ConvexPolygonShape2D);
edited_collision_shape = _convex;
_set_edited_shape_points(_get_collision_shape_points(concave));
} else {
// Shouldn't happen
}
for (int i = 0; i < sd.size(); i++) {
if (sd[i].get("shape") == previous_shape) {
@ -3267,12 +3267,16 @@ void TileSetEditor::update_workspace_minsize() {
List<int> *tiles = new List<int>();
tileset->get_tile_list(tiles);
for (List<int>::Element *E = tiles->front(); E; E = E->next()) {
if (tileset->tile_get_texture(E->get())->get_rid() == current_texture_rid) {
Rect2i region = tileset->tile_get_region(E->get());
if (region.position.x + region.size.x > workspace_min_size.x)
workspace_min_size.x = region.position.x + region.size.x;
if (region.position.y + region.size.y > workspace_min_size.y)
workspace_min_size.y = region.position.y + region.size.y;
if (tileset->tile_get_texture(E->get())->get_rid() != current_texture_rid) {
continue;
}
Rect2i region = tileset->tile_get_region(E->get());
if (region.position.x + region.size.x > workspace_min_size.x) {
workspace_min_size.x = region.position.x + region.size.x;
}
if (region.position.y + region.size.y > workspace_min_size.y) {
workspace_min_size.y = region.position.y + region.size.y;
}
}
delete tiles;