From c6346c6ef55614e0a3471634acdf80c09a601071 Mon Sep 17 00:00:00 2001 From: Zach DeCook Date: Sat, 26 Aug 2023 09:33:20 -0400 Subject: File Load: create svg from file with verovio and dump into stdout --- Makefile | 2 ++ README.md | 6 +++++- main.c | 34 +++++++++++++++++++++++----------- 3 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..de13188 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +shemuvi: main.c + gcc $$( pkg-config --cflags gtk4 ) -o shemuvi main.c $$( pkg-config --libs gtk4 ) -lverovio diff --git a/README.md b/README.md index c2a6786..e181979 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # SheMuVi - Sheet Music Viewer -SheMuVi is a [GTK4](https://docs.gtk.org/gtk4/) application. +SheMuVi is a [GTK4](https://docs.gtk.org/gtk4/) application powered by [Verovio](https://www.verovio.org/index.xhtml). + +Dependencies +* gtk4.0-dev +* verovio-dev diff --git a/main.c b/main.c index 0b31738..8a86f6f 100644 --- a/main.c +++ b/main.c @@ -1,8 +1,15 @@ #include +#include +#include + +// Largest file we want to read +#define BUF_SIZE 200000 /* Called when a file is chosen by the open menu. */ static void set_file (GFile *file, gpointer data) { char *name; + char buf[BUF_SIZE]; + const char *output; if (!file) { return; @@ -10,7 +17,21 @@ static void set_file (GFile *file, gpointer data) { name = g_file_get_path (file); puts(name); - /* TODO: load this into verovio */ + // Porting Note: By Default verovio installs this to "/usr/local/share/verovio" + void *pointer = vrvToolkit_constructorResourcePath("/usr/share/verovio"); + FILE *cfile = fopen(name, "r"); + size_t read = fread(buf, 1, BUF_SIZE-1, cfile); + // If the file is longer than the buffer, truncate it (which may be okay for some formats...) + buf[read] = '\0'; + fclose(cfile); + + vrvToolkit_loadData(pointer, buf); + output = vrvToolkit_renderToSVG(pointer, 1, FALSE); + puts(output); + + // TODO: keep this around + free(pointer); + g_free (name); } @@ -33,16 +54,7 @@ file_opened (GObject *source, set_file (file, data); } -static gboolean -abort_mission (gpointer data) -{ - GCancellable *cancellable = data; - - g_cancellable_cancel (cancellable); - - return G_SOURCE_REMOVE; -} - +/* Called when the "Open" button is clicked */ static void open_file (GtkButton *picker, GtkLabel *label) { GtkWindow *parent = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (picker))); GtkFileDialog *dialog; -- cgit 1.4.1