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:
M | main.c | | | 21 | ++++++++++++--------- |
M | smallpond.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