smallpond

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/smallpond
Log | Files | Refs | README | LICENSE

commit db79ec5a0edde90613d391cbb1b78e1c53a461e4
parent 966dd8b10c7b56ce1c7da416f405dbd087b46e8e
Author: Nihal Jere <nihal@nihaljere.xyz>
Date:   Sat, 24 Dec 2022 00:11:25 -0600

scale

Diffstat:
Mmain.c | 15+++++++++------
Mscore.sp | 2+-
Msmallpond.lua | 25+++++++++++++------------
3 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/main.c b/main.c @@ -17,9 +17,9 @@ #include <lauxlib.h> #include <lualib.h> -#define WIDTH 1280 -#define HEIGHT 720 -#define FRAMERATE 30 +#define WIDTH 3840 +#define HEIGHT 2160 +#define FRAMERATE 60 int luaopen_qmath(lua_State *L); @@ -59,7 +59,8 @@ split_cubic(double t, double x1, double y1, double x2, double y2, double x, doub int draw_curve(lua_State *L) { - double t = lua_tonumber(L, -7); + double t = lua_tonumber(L, -8); + double th = lua_tonumber(L, -7); double x0 = lua_tonumber(L, -6); double y0 = lua_tonumber(L, -5); double x1 = lua_tonumber(L, -4); @@ -73,8 +74,8 @@ draw_curve(lua_State *L) split_cubic(t, 0, 0, x1 - x0, y1 - y0, x2 - x0, y2 - y0, &q0x, &q0y, &r0x, &r0y, &bx, &by); cairo_move_to(cr, x0, y0); cairo_rel_curve_to(cr, q0x, q0y, r0x, r0y, bx, by); - split_cubic(t, 0, 1, x1 - x0, y1 + 3 - y0, x2 - x0, y2 + 1 - y0, &q0x, &q0y, &r0x, &r0y, &bx, &by); - cairo_rel_line_to(cr, 0, 1); + split_cubic(t, 0, th*1, x1 - x0, y1 + th*3 - y0, x2 - x0, y2 + th*1 - y0, &q0x, &q0y, &r0x, &r0y, &bx, &by); + cairo_rel_line_to(cr, 0, th); cairo_rel_curve_to(cr, r0x - bx, r0y - by, q0x - bx, q0y - by, q0x - bx, q0y - by); cairo_line_to(cr, x0, y0); cairo_fill(cr); @@ -245,6 +246,8 @@ main(int argc, char *argv[]) lua_setglobal(L, "draw_quad"); lua_pushcfunction(L, glyph_extents); lua_setglobal(L, "glyph_extents"); + lua_pushnumber(L, HEIGHT); + lua_setglobal(L, "frameheight"); lua_pushnumber(L, WIDTH); lua_setglobal(L, "framewidth"); FT_Library library; diff --git a/score.sp b/score.sp @@ -132,7 +132,7 @@ <103.4e 103.4e'>8[ <103.78fs, 103.78fs'>8 <104.13gs, 104.13gs'>8] <104.63ds 104.63ds'>4 <105.6cs, 105.6cs'>8 | \staff low \clef bass - 106.23cs'8[ 106.82ds8 107.2e8] + 106.23cs'^8[ 106.82ds^8 107.2e^8] \staff high \clef treble 107.7b4 108.85av8 | diff --git a/smallpond.lua b/smallpond.lua @@ -834,6 +834,7 @@ for i, staff in pairs(stafforder) do extent.yoff = yoff yoff = yoff + extent.ymax - extent.ymin end +scale = frameheight / yoff for _, tie in pairs(ties) do local yoff = extents[tie.staff].yoff - extents[tie.staff].ymin @@ -946,11 +947,11 @@ local toff_base = 0 function drawframe(time) if snappoints[snapidx + 1] and snappoints[snapidx] < time then snapidx = snapidx + 1 - toff_base = -rtimings[snappoints[snapidx - 1]] + framewidth / 2 + toff_base = -rtimings[snappoints[snapidx - 1]] end local xdiff = rtimings[snappoints[snapidx]] - rtimings[snappoints[snapidx - 1]] local delta = xdiff * (time - snappoints[snapidx - 1]) / (snappoints[snapidx] - snappoints[snapidx - 1]) - local toff = toff_base - delta + local toff = toff_base - delta + framewidth / (2*scale) if time > lastpoint + 10 then return true @@ -962,7 +963,7 @@ function drawframe(time) if not d.time.start then goto continue end if d.time.start < time then if d.kind == "glyph" then - draw_glyph(d.size, d.glyph, toff + d.x - extent.xmin, d.y - extent.ymin + extent.yoff) + draw_glyph(scale*d.size, d.glyph, scale*(toff + d.x - extent.xmin), scale*(d.y - extent.ymin + extent.yoff)) elseif d.kind == "line" then local delta = (time - d.time.start) / (d.time.stop - d.time.start) local endx, endy @@ -976,9 +977,9 @@ function drawframe(time) else endy = math.max(d.y1 + delta*(d.y2 - d.y1), d.y2) end - draw_line(d.t, toff + d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, toff + endx - extent.xmin, endy - extent.ymin + extent.yoff) + draw_line(scale*d.t, scale*(toff + d.x1 - extent.xmin), scale*(d.y1 - extent.ymin + extent.yoff), scale*(toff + endx - extent.xmin), scale*(endy - extent.ymin + extent.yoff)) elseif d.kind == "circle" then - draw_circle(d.r, toff + d.x - extent.xmin, d.y - extent.ymin + extent.yoff) + draw_circle(scale*d.r, scale*(toff + d.x - extent.xmin), scale*(d.y - extent.ymin + extent.yoff)) elseif d.kind == "vshear" then local delta = (time - d.time.start) / (d.time.stop - d.time.start) local endx, endy @@ -992,9 +993,9 @@ function drawframe(time) else endy = math.max(d.y1 + delta*(d.y2 - d.y1), d.y2) end - draw_quad(toff + d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, toff + endx - extent.xmin, endy - extent.ymin + extent.yoff, toff + endx - extent.xmin, endy + d.h - extent.ymin + extent.yoff, toff + d.x1 - extent.xmin, d.y1 + d.h - extent.ymin + extent.yoff) + draw_quad(scale*(toff + d.x1 - extent.xmin), scale(d.y1 - extent.ymin + extent.yoff), scale(toff + endx - extent.xmin), scale*(endy - extent.ymin + extent.yoff), scale*(toff + endx - extent.xmin), scale*(endy + d.h - extent.ymin + extent.yoff), scale*(toff + d.x1 - extent.xmin), scale*(d.y1 + d.h - extent.ymin + extent.yoff)) elseif d.kind == "quad" then - draw_quad(toff + d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, toff + d.x2 - extent.xmin, d.y2 - extent.ymin + extent.yoff, toff + d.x3 - extent.xmin, d.y3 - extent.ymin + extent.yoff, toff + d.x4 - extent.xmin, d.y4 - extent.ymin + extent.yoff) + draw_quad(scale*(toff + d.x1 - extent.xmin), scale*(d.y1 - extent.ymin + extent.yoff), scale*(toff + d.x2 - extent.xmin), scale*(d.y2 - extent.ymin + extent.yoff), scale*(toff + d.x3 - extent.xmin), scale*(d.y3 - extent.ymin + extent.yoff), scale*(toff + d.x4 - extent.xmin), scale*(d.y4 - extent.ymin + extent.yoff)) end end @@ -1003,7 +1004,7 @@ function drawframe(time) -- draw staff for y=0,em*4,em do - draw_line(1, toff + xmin, y + extent.yoff - extent.ymin, toff + xmax, y + extent.yoff - extent.ymin) + draw_line(scale, scale*(toff + xmin), scale*(y + extent.yoff - extent.ymin), scale*(toff + xmax), scale*(y + extent.yoff - extent.ymin)) end end @@ -1016,9 +1017,9 @@ function drawframe(time) local delta = (time - item.time.start) / (item.time.stop - item.time.start) local endy = math.min(y1 + delta*(y2 - y1), y2) - draw_line(1, toff + item.x, y1, toff + item.x, endy) + draw_line(scale, scale*(toff + item.x), scale*(y1), scale*(toff + item.x), scale*(endy)) if item.last then - draw_line(4, 5 + toff + item.x, y1, 5 + toff + item.x, endy) + draw_line(scale*4, scale*(5 + toff + item.x), scale*(y1), scale*(5 + toff + item.x), scale*(endy)) end elseif item.kind == "curve" then if item.time.start > time then goto continue end @@ -1029,7 +1030,7 @@ function drawframe(time) delta = (time - item.time.start) / (item.time.stop - item.time.start) end local endx = item.x0 + delta*(item.x2 - item.x0) - draw_curve(delta, toff + item.x0, item.y0, toff + (item.x0 + endx) / 2, (item.y0 + item.y2) / 2 + 20, toff + endx, item.y2) + draw_curve(delta, scale, scale*(toff + item.x0), scale*(item.y0), scale*(toff + (item.x0 + endx) / 2), scale*((item.y0 + item.y2) / 2 + 20), scale*(toff + endx), scale*(item.y2)) elseif item.kind == "beamseg" then if item.time.start > time then goto continue end local delta @@ -1049,7 +1050,7 @@ function drawframe(time) else endy = math.max(item.y1 + delta*(item.y2 - item.y1), item.y2) end - draw_quad(toff + item.x1, item.y1, toff + endx, endy, toff + endx, endy + item.h, toff + item.x1, item.y1 + item.h) + draw_quad(scale*(toff + item.x1), scale*(item.y1), scale*(toff + endx), scale*(endy), scale*(toff + endx), scale*(endy + item.h), scale*(toff + item.x1), scale*(item.y1 + item.h)) end ::continue:: end