summaryrefslogtreecommitdiffstats
path: root/player/lua
diff options
context:
space:
mode:
authorChrisK2 <spam@kalania.de>2014-12-05 18:20:37 +0100
committerChrisK2 <spam@kalania.de>2014-12-05 19:37:31 +0100
commite883c48caa39db72574642b61e3cbc1f206069c1 (patch)
tree3316518ccb6e4781bf819ed8e42a9248ab7f8f90 /player/lua
parent020897b5d3e50d69c6ae3da9cf7370b46250f169 (diff)
downloadmpv-e883c48caa39db72574642b61e3cbc1f206069c1.tar.bz2
mpv-e883c48caa39db72574642b61e3cbc1f206069c1.tar.xz
assdraw: Properly approximate circle for rounded box
source: http://spencermortensen.com/articles/bezier-circle/
Diffstat (limited to 'player/lua')
-rw-r--r--player/lua/assdraw.lua9
1 files changed, 5 insertions, 4 deletions
diff --git a/player/lua/assdraw.lua b/player/lua/assdraw.lua
index fc3b727f57..7252826d9b 100644
--- a/player/lua/assdraw.lua
+++ b/player/lua/assdraw.lua
@@ -76,22 +76,23 @@ function ass_mt.rect_cw(ass, x0, y0, x1, y1)
end
function ass_mt.round_rect_cw(ass, x0, y0, x1, y1, r)
+ local c = 0.551915024494 * r -- circle approximation
ass:move_to(x0 + r, y0)
ass:line_to(x1 - r, y0) -- top line
if r > 0 then
- ass:bezier_curve(x1, y0, x1, y0, x1, y0 + r) -- top right corner
+ ass:bezier_curve(x1 - r + c, y0, x1, y0 + r - c, x1, y0 + r) -- top right corner
end
ass:line_to(x1, y1 - r) -- right line
if r > 0 then
- ass:bezier_curve(x1, y1, x1, y1, x1 - r, y1) -- bottom right corner
+ ass:bezier_curve(x1, y1 - r + c, x1 - r + c, y1, x1 - r, y1) -- bottom right corner
end
ass:line_to(x0 + r, y1) -- bottom line
if r > 0 then
- ass:bezier_curve(x0, y1, x0, y1, x0, y1 - r) -- bottom left corner
+ ass:bezier_curve(x0 + r - c, y1, x0, y1 - r + c, x0, y1 - r) -- bottom left corner
end
ass:line_to(x0, y0 + r) -- left line
if r > 0 then
- ass:bezier_curve(x0, y0, x0, y0, x0 + r, y0) -- top left corner
+ ass:bezier_curve(x0, y0 + r - c, x0 + r - c, y0, x0 + r, y0) -- top left corner
end
end