smallpond

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

commit d8add7f12f7fdae3c146067cfa420cbed2097a1d
parent e8e7cd69e60a4464dbc77ab698bee9acfbd72d8f
Author: Nihal Jere <nihal@nihaljere.xyz>
Date:   Tue, 25 Oct 2022 13:03:52 -0500

move drawing into function of time, called by c

Diffstat:
Mmain.c | 21++++++++++++---------
Msmallpond.lua | 42+++++++++++++++++++++++-------------------
2 files changed, 35 insertions(+), 28 deletions(-)

diff --git a/main.c b/main.c @@ -234,21 +234,24 @@ main(int argc, char *argv[]) fprintf(stderr, "couldn't make frame writeable\n"); return 1; } - /* fill with white */ - cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); - cairo_rectangle(cr, 0, 0, 854, 480); - cairo_fill(cr); + if (luaL_dofile(L, "smallpond.lua")) { fprintf(stderr, "lua error: %s\n", lua_tostring(L, -1)); return 1; } - cairo_surface_flush(surface); - uint8_t *image_data = cairo_image_surface_get_data(surface); - - cairo_surface_write_to_png(surface, "out.png"); - for (int i = 0; i < 30; i++) { + /* fill with white */ + cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); + cairo_rectangle(cr, 0, 0, 854, 480); + cairo_fill(cr); + // draw frame + lua_getglobal(L, "drawframe"); + lua_pushnumber(L, i); + lua_call(L, 1, 0); + + cairo_surface_flush(surface); + uint8_t *image_data = cairo_image_surface_get_data(surface); if (av_frame_make_writable(frame) < 0) { fprintf(stderr, "couldn't make frame writeable\n"); return 1; diff --git a/smallpond.lua b/smallpond.lua @@ -713,29 +713,33 @@ for staff, item in ipairs(extra3) do end end -create_surface(xmax - xmin, yoff) +local height = yoff +local width = xmax - xmin -for _, staff in ipairs(stafforder) do - local extent = extents[staff] - for i, d in ipairs(staff3[staff]) do - if d.kind == "glyph" then - draw_glyph(d.glyph, d.x - extent.xmin, d.y - extent.ymin + extent.yoff) - elseif d.kind == "line" then - draw_line(d.t, d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, d.x2 - extent.xmin, d.y2 - extent.ymin + extent.yoff) - elseif d.kind == "quad" then - draw_quad(d.t, d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, d.x2 - extent.xmin, d.y2 - extent.ymin + extent.yoff, d.x3 - extent.xmin, d.y3 - extent.ymin + extent.yoff, d.x4 - extent.xmin, d.y4 - extent.ymin + extent.yoff) +function drawframe(time) + local toff = -time * 10 + for _, staff in ipairs(stafforder) do + local extent = extents[staff] + for i, d in ipairs(staff3[staff]) do + if d.kind == "glyph" then + draw_glyph(d.glyph, toff + d.x - extent.xmin, d.y - extent.ymin + extent.yoff) + elseif d.kind == "line" then + draw_line(d.t, toff + d.x1 - extent.xmin, d.y1 - extent.ymin + extent.yoff, toff + d.x2 - extent.xmin, d.y2 - extent.ymin + extent.yoff) + elseif d.kind == "quad" then + draw_quad(d.t, 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) + end end - end - -- draw staff - for y=0,em*4,em do - draw_line(1, xmin, y + extent.yoff - extent.ymin, xmax, y + extent.yoff - extent.ymin) + -- 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) + end end -end --- draw barlines -for staff, item in ipairs(extra3) do - if item.kind == 'barline' then - draw_line(1, item.x, -firstymin, item.x, lastymin + 4*em) + -- draw barlines + for staff, item in ipairs(extra3) do + if item.kind == 'barline' then + draw_line(1, toff + item.x, -firstymin, toff + item.x, lastymin + 4*em) + end end end