summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTan Wang Leng <tanwangleng@outlook.com>2020-01-24 23:33:01 +0800
committerTan Wang Leng <tanwangleng@outlook.com>2020-01-24 23:52:43 +0800
commitee2f406c73c6a49ce80f54e3bfe30477bc9cda95 (patch)
treec2f4d572d253c0a2db6b9eb5ed6076d6084a9155
parent97cc2e53f6fbba7e85a2cbb79f38e077a6e511f7 (diff)
Fix wrong guideline values shown during dragging
Suppose that the user wants to use some guidelines in 2D mode. The user has enabled "Use Pixel Snap", and configured the "Grid Step" to 1px. On some zoom levels, when dragging the guidelines step by step, some offsets shows the wrong value. The offsets that are wrong vary - it is affected by the zoom level, so some zoom levels do not display this problem. For example, a user may see this while dragging the guideline: 0px 1px 1px 3px 4px 5px 5px 7px 8px whereby 2px and 6px are missing. This is due to a floating-point error. The values are printed as (truncated) integers, but they are actually decimals, so they were actually 1.9999 and 5.9999 for the missing cases. Let's fix that by rounding up the values before printing them to get rid of the errors. This fixes #35010.
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index d3cbf2947e..1d8f3a2bbd 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -2599,14 +2599,14 @@ void CanvasItemEditor::_draw_guides() {
Color text_color = get_color("font_color", "Editor");
text_color.a = 0.5;
if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_V_GUIDE) {
- String str = vformat("%d px", xform.affine_inverse().xform(dragged_guide_pos).x);
+ String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).x));
Ref<Font> font = get_font("font", "Label");
Size2 text_size = font->get_string_size(str);
viewport->draw_string(font, Point2(dragged_guide_pos.x + 10, RULER_WIDTH + text_size.y / 2 + 10), str, text_color);
viewport->draw_line(Point2(dragged_guide_pos.x, 0), Point2(dragged_guide_pos.x, viewport->get_size().y), guide_color, Math::round(EDSCALE));
}
if (drag_type == DRAG_DOUBLE_GUIDE || drag_type == DRAG_H_GUIDE) {
- String str = vformat("%d px", xform.affine_inverse().xform(dragged_guide_pos).y);
+ String str = vformat("%d px", Math::round(xform.affine_inverse().xform(dragged_guide_pos).y));
Ref<Font> font = get_font("font", "Label");
Size2 text_size = font->get_string_size(str);
viewport->draw_string(font, Point2(RULER_WIDTH + 10, dragged_guide_pos.y + text_size.y / 2 + 10), str, text_color);