]> git.draconx.ca Git - liblbx.git/blobdiff - src/gui/lbxgui.c
liblbx: Expose image lead-in in public struct.
[liblbx.git] / src / gui / lbxgui.c
index 7eed44f6c825114e6c4bbfe426f256de24fcbd87..bb9e5e5664459c2ce9b06249f204adf55f80bb44 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  2ooM: The Master of Orion II Reverse Engineering Project
  *  Graphical tool for inspecting LBX archives.
- *  Copyright (C) 2010 Nick Bowler
+ *  Copyright (C) 2010, 2014 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 
 #include "bg.xbm"
 
-extern char lbxgui_xml[];
-
 static GtkTreeStore *archives;
 static GtkBuilder *builder;
 
 static GtkWidget *canvas;
 static GdkGC     *bg_gc;
 
-static LBXimg *image;
+static struct lbx_image *image;
 
 static GdkPixbuf *framebuf;
 
@@ -101,13 +99,13 @@ static void tick(void *p, double delta)
        while (elapsed > seconds_per_frame) {
                elapsed -= seconds_per_frame;
 
-               if (++newframe >= info.nframes) {
-                       if (!info.looping) {
+               if (++newframe >= image->frames) {
+                       if (image->leadin == image->frames - 1) {
                                gtk_toggle_button_set_active(play, FALSE);
                                break;
                        }
 
-                       newframe = info.loopstart;
+                       newframe = image->leadin;
                }
        }
 
@@ -152,24 +150,22 @@ gboolean canvas_expose(GtkWidget *canvas, GdkEventExpose *event, gpointer data)
        return TRUE;
 }
 
-static int alloc_framebuffer(LBXimg *image)
+static int alloc_framebuffer(struct lbx_image *image)
 {
-       struct lbx_imginfo info;
        GtkSpinButton *spin;
 
        if (framebuf)
                g_object_unref(framebuf);
 
-       lbx_img_getinfo(image, &info);
        framebuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8,
-               info.width, info.height);
+               image->width, image->height);
        g_return_val_if_fail(framebuf, -1);
 
        spin = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "framespin"));
-       gtk_spin_button_set_range(spin, 0, info.nframes-1);
+       gtk_spin_button_set_range(spin, 0, image->frames-1);
        gtk_spin_button_set_value(spin, 0);
 
-       gtk_widget_set_size_request(canvas, info.width, info.height);
+       gtk_widget_set_size_request(canvas, image->width, image->height);
        return 0;
 }
 
@@ -179,10 +175,10 @@ static int close_image(void *handle)
        return 0;
 }
 
-static LBXimg *load_lbx_image(LBX *archive, unsigned index)
+static struct lbx_image *load_lbx_image(struct lbx *archive, unsigned index)
 {
        LBXfile *file;
-       LBXimg *image;
+       struct lbx_image *image;
 
        file = lbx_file_open(archive, index);
        g_return_val_if_fail(file, NULL);
@@ -198,7 +194,7 @@ void set_override(GtkComboBox *combo)
        GtkTreeIter iter;
        gpointer lbx;
        guint    index;
-       LBXimg *img;
+       struct lbx_image *img;
 
        memset(palette_override, 0, sizeof palette_override);
        if (!gtk_combo_box_get_active_iter(combo, &iter))
@@ -248,7 +244,7 @@ void set_image(GtkComboBox *combo)
        GtkTreeIter iter;
        gpointer lbx;
        guint    index;
-       LBXimg *img;
+       struct lbx_image *img;
 
        if (image) {
                lbx_img_close(image);
@@ -317,7 +313,7 @@ static int load_archive(const char *path)
        gchar *basename;
        GtkTreeIter iter1, iter2;
        unsigned nfiles;
-       LBX *lbx;
+       struct lbx *lbx;
 
        lbx = lbx_fopen(path);
        if (!lbx)
@@ -331,8 +327,7 @@ static int load_archive(const char *path)
                -1);
        g_free(basename);
 
-       nfiles = lbx_numfiles(lbx);
-       for (unsigned i = 0; i < nfiles; i++) {
+       for (unsigned i = 0; i < lbx->nfiles; i++) {
                struct lbx_statbuf stat;
 
                lbx_file_stat(lbx, i, &stat);
@@ -469,6 +464,7 @@ static void init_background(GdkDrawable *drawable)
 
 int main(int argc, char **argv)
 {
+       extern char lbxgui_glade[];
        GtkWidget *window;
        GError *err = NULL;
 
@@ -483,7 +479,7 @@ int main(int argc, char **argv)
                load_archive(*argv++);
 
        builder = gtk_builder_new();
-       if (!gtk_builder_add_from_string(builder, lbxgui_xml, -1, &err)) {
+       if (!gtk_builder_add_from_string(builder, lbxgui_glade, -1, &err)) {
                fprintf(stderr, "%s\n", err->message);
                return EXIT_FAILURE;
        }