summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Locurcio <hugo.locurcio@hugo.pro>2022-07-02 18:45:42 +0200
committerHugo Locurcio <hugo.locurcio@hugo.pro>2022-07-02 18:45:42 +0200
commitcf1ce8494dbba21b41a7963cf19aed6338a64145 (patch)
tree0fc94f2fa0536cf4abb996e9c81b6a7926fd0dad
parent73812c70f2b14ac76245e0754197878b27f85338 (diff)
Improve antialiased line drawing sharpness and respect of original width
Antialiased lines with a width of 2 pixels or more now use a smaller feather width of 1.25 instead of 2.0. This makes them look sharper and better preserves their original shape while still having good antialiasing quality. This also improves the appearance of thin antialiased lines by slightly increasing their feather size (from 1.0 to 1.25). It makes them appear a tad thicker, but the antialiasing quality is much improved by doing this.
-rw-r--r--servers/rendering/renderer_canvas_cull.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp
index bc1e8eb348..774c133e86 100644
--- a/servers/rendering/renderer_canvas_cull.cpp
+++ b/servers/rendering/renderer_canvas_cull.cpp
@@ -594,9 +594,13 @@ void RendererCanvasCull::canvas_item_add_line(RID p_item, const Point2 &p_from,
}
if (p_antialiased) {
- float border_size = 2.0;
- if (p_width < border_size) {
- border_size = p_width;
+ // Use the same antialiasing feather size as StyleBoxFlat's default
+ // (but doubled, as it's specified for both sides here).
+ // This value is empirically determined to provide good antialiasing quality
+ // while not making lines appear too soft.
+ float border_size = 1.25f;
+ if (p_width < 1.0f) {
+ border_size *= p_width;
}
Vector2 dir2 = diff.normalized();
@@ -763,9 +767,13 @@ void RendererCanvasCull::canvas_item_add_polyline(RID p_item, const Vector<Point
Color *colors_ptr = colors.ptrw();
if (p_antialiased) {
- float border_size = 2.0;
- if (p_width < border_size) {
- border_size = p_width;
+ // Use the same antialiasing feather size as StyleBoxFlat's default
+ // (but doubled, as it's specified for both sides here).
+ // This value is empirically determined to provide good antialiasing quality
+ // while not making lines appear too soft.
+ float border_size = 1.25f;
+ if (p_width < 1.0f) {
+ border_size *= p_width;
}
Color color2 = Color(1, 1, 1, 0);