Merge pull request #34836 from timothyqiu/maze-of-transform

Fixes scaled scrolling of TextureRegion editor
This commit is contained in:
Rémi Verschelde 2020-01-05 13:57:39 +01:00 committed by GitHub
commit 2299fb8198
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -136,13 +136,19 @@ void TextureRegionEditor::_region_draw() {
Ref<Texture> select_handle = get_icon("EditorHandle", "EditorIcons"); Ref<Texture> select_handle = get_icon("EditorHandle", "EditorIcons");
Rect2 scroll_rect; Rect2 scroll_rect(Point2(), base_tex->get_size());
Vector2 endpoints[4] = { const Vector2 raw_endpoints[4] = {
mtx.basis_xform(rect.position), rect.position,
mtx.basis_xform(rect.position + Vector2(rect.size.x, 0)), rect.position + Vector2(rect.size.x, 0),
mtx.basis_xform(rect.position + rect.size), rect.position + rect.size,
mtx.basis_xform(rect.position + Vector2(0, rect.size.y)) rect.position + Vector2(0, rect.size.y)
};
const Vector2 endpoints[4] = {
mtx.basis_xform(raw_endpoints[0]),
mtx.basis_xform(raw_endpoints[1]),
mtx.basis_xform(raw_endpoints[2]),
mtx.basis_xform(raw_endpoints[3])
}; };
Color color = get_color("mono_color", "Editor"); Color color = get_color("mono_color", "Editor");
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
@ -164,31 +170,32 @@ void TextureRegionEditor::_region_draw() {
if (snap_mode != SNAP_AUTOSLICE) if (snap_mode != SNAP_AUTOSLICE)
edit_draw->draw_texture(select_handle, (endpoints[i] + ofs - (select_handle->get_size() / 2)).floor() - draw_ofs * draw_zoom); edit_draw->draw_texture(select_handle, (endpoints[i] + ofs - (select_handle->get_size() / 2)).floor() - draw_ofs * draw_zoom);
scroll_rect.expand_to(endpoints[i]); scroll_rect.expand_to(raw_endpoints[i]);
} }
scroll_rect.position -= edit_draw->get_size(); const Size2 scroll_margin = edit_draw->get_size() / draw_zoom;
scroll_rect.size += edit_draw->get_size() * 2.0; scroll_rect.position -= scroll_margin;
scroll_rect.size += scroll_margin * 2;
updating_scroll = true; updating_scroll = true;
hscroll->set_min(scroll_rect.position.x); hscroll->set_min(scroll_rect.position.x);
hscroll->set_max(scroll_rect.position.x + scroll_rect.size.x); hscroll->set_max(scroll_rect.position.x + scroll_rect.size.x);
if (ABS(scroll_rect.position.x - (scroll_rect.position.x + scroll_rect.size.x)) <= edit_draw->get_size().x) { if (ABS(scroll_rect.position.x - (scroll_rect.position.x + scroll_rect.size.x)) <= scroll_margin.x) {
hscroll->hide(); hscroll->hide();
} else { } else {
hscroll->show(); hscroll->show();
hscroll->set_page(edit_draw->get_size().x); hscroll->set_page(scroll_margin.x);
hscroll->set_value(draw_ofs.x); hscroll->set_value(draw_ofs.x);
} }
vscroll->set_min(scroll_rect.position.y); vscroll->set_min(scroll_rect.position.y);
vscroll->set_max(scroll_rect.position.y + scroll_rect.size.y); vscroll->set_max(scroll_rect.position.y + scroll_rect.size.y);
if (ABS(scroll_rect.position.y - (scroll_rect.position.y + scroll_rect.size.y)) <= edit_draw->get_size().y) { if (ABS(scroll_rect.position.y - (scroll_rect.position.y + scroll_rect.size.y)) <= scroll_margin.y) {
vscroll->hide(); vscroll->hide();
draw_ofs.y = scroll_rect.position.y; draw_ofs.y = scroll_rect.position.y;
} else { } else {
vscroll->show(); vscroll->show();
vscroll->set_page(edit_draw->get_size().y); vscroll->set_page(scroll_margin.y);
vscroll->set_value(draw_ofs.y); vscroll->set_value(draw_ofs.y);
} }
updating_scroll = false; updating_scroll = false;