|
Packit |
93f41a |
/*
|
|
Packit |
93f41a |
* Very simple program, that has been used by us
|
|
Packit |
93f41a |
* (V. Babin <babin :at: users.sourceforge.net> and
|
|
Packit |
93f41a |
* S. Kondrat <valiska :at: users.sourceforge.net>)
|
|
Packit |
93f41a |
* during toying with libmng (http://www.libmng.com)
|
|
Packit |
93f41a |
*
|
|
Packit |
93f41a |
* License: GPL :-))
|
|
Packit |
93f41a |
*
|
|
Packit |
93f41a |
* 7 July 2001: added key-press/button-press handling to exit viewer without
|
|
Packit |
93f41a |
* window-manager help; added libmng version info [Greg Roelofs]
|
|
Packit |
93f41a |
*/
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
#include <unistd.h>
|
|
Packit |
93f41a |
#include <sys/types.h>
|
|
Packit |
93f41a |
#include <sys/stat.h>
|
|
Packit |
93f41a |
#include <fcntl.h>
|
|
Packit |
93f41a |
#include <errno.h>
|
|
Packit |
93f41a |
#include <gtk/gtk.h>
|
|
Packit |
93f41a |
#include "gtk-mng-view.h"
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
#define BLOCK_SIZE 4096
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
static guint
|
|
Packit |
93f41a |
read_file (const gchar* file_name, guchar ** ptr)
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
gint fd;
|
|
Packit |
93f41a |
guint size = 0;
|
|
Packit |
93f41a |
guint bytes_read = 0;
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
if ((fd = open (file_name, O_RDONLY)) == -1)
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
perror (file_name);
|
|
Packit |
93f41a |
* ptr = NULL;
|
|
Packit |
93f41a |
return 0;
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
* ptr = g_new (guchar, BLOCK_SIZE);
|
|
Packit |
93f41a |
while ((bytes_read = read (fd, * ptr + size, BLOCK_SIZE)))
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
size += bytes_read;
|
|
Packit |
93f41a |
* ptr = (guchar *) g_realloc (* ptr, size + BLOCK_SIZE);
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
close (fd);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
* ptr = (guchar *) g_realloc (* ptr, size);
|
|
Packit |
93f41a |
return size;
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
int
|
|
Packit |
93f41a |
main (int argc, char ** argv)
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
GtkMngView * mng_view;
|
|
Packit |
93f41a |
GtkWidget * window;
|
|
Packit |
93f41a |
GtkWidget * align;
|
|
Packit |
93f41a |
GtkWidget * frame;
|
|
Packit |
93f41a |
guchar * mng_data = NULL;
|
|
Packit |
93f41a |
guint mng_data_size;
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
if (argc < 2)
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
g_print ("Usage: %s <file.mng>\n\n", argv[0]);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
g_print (" Compiled with GTK+ %d.%d.%d; using GTK+ %d.%d.%d.\n",
|
|
Packit |
93f41a |
GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
|
|
Packit |
93f41a |
gtk_major_version, gtk_minor_version, gtk_micro_version);
|
|
Packit |
93f41a |
#ifdef GDK_PIXBUF_VERSION
|
|
Packit |
93f41a |
g_print (" Compiled with gdk-pixbuf %s; using gdk-pixbuf %s.\n",
|
|
Packit |
93f41a |
GDK_PIXBUF_VERSION, gdk_pixbuf_version);
|
|
Packit |
93f41a |
#endif
|
|
Packit |
93f41a |
g_print (" Compiled with libmng %s; using libmng %s.\n",
|
|
Packit |
93f41a |
MNG_VERSION_TEXT, mng_version_text());
|
|
Packit |
93f41a |
g_print (" Compiled with zlib %s; using zlib %s.\n",
|
|
Packit |
93f41a |
ZLIB_VERSION, zlib_version);
|
|
Packit |
93f41a |
#ifdef JPEG_LIB_VERSION
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
int major = JPEG_LIB_VERSION / 10;
|
|
Packit |
93f41a |
int minor = JPEG_LIB_VERSION % 10;
|
|
Packit |
93f41a |
char minoralpha[2];
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
if (minor)
|
|
Packit |
93f41a |
{
|
|
Packit |
93f41a |
minoralpha[0] = (char)(minor - 1 + 'a');
|
|
Packit |
93f41a |
minoralpha[1] = '\0';
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
else
|
|
Packit |
93f41a |
minoralpha[0] = '\0';
|
|
Packit |
93f41a |
g_print (" Compiled with libjpeg %d%s.\n", major, minoralpha);
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
#endif
|
|
Packit |
93f41a |
g_print ("\nPress Esc or Q, or click mouse button, to quit.\n");
|
|
Packit |
93f41a |
return 1;
|
|
Packit |
93f41a |
}
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
mng_data_size = read_file (* (argv + 1), &mng_data);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
if (mng_data == NULL)
|
|
Packit |
93f41a |
return 1;
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
gtk_init (&argc, &argv);
|
|
Packit |
93f41a |
gdk_rgb_init ();
|
|
Packit |
93f41a |
gdk_rgb_set_verbose (TRUE);
|
|
Packit |
93f41a |
gtk_widget_set_default_visual (gdk_rgb_get_visual ());
|
|
Packit |
93f41a |
gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
window = gtk_widget_new (GTK_TYPE_WINDOW,
|
|
Packit |
93f41a |
"GtkWindow::type", GTK_WINDOW_TOPLEVEL,
|
|
Packit |
93f41a |
"GtkWindow::title", "MNG animation",
|
|
Packit |
93f41a |
"GtkContainer::border_width", 5,
|
|
Packit |
93f41a |
NULL);
|
|
Packit |
93f41a |
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
|
|
Packit |
93f41a |
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
|
Packit |
93f41a |
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
|
Packit |
93f41a |
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
/* any keypress (e.g., Esc or Q) or mouse-button click will quit viewer */
|
|
Packit |
93f41a |
gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
|
|
Packit |
93f41a |
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
|
Packit |
93f41a |
gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
|
|
Packit |
93f41a |
gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
|
|
Packit |
93f41a |
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
|
|
Packit |
93f41a |
gtk_container_add (GTK_CONTAINER (window), align);
|
|
Packit |
93f41a |
frame = gtk_frame_new (NULL);
|
|
Packit |
93f41a |
gtk_container_add (GTK_CONTAINER (align), frame);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
/* actually it */
|
|
Packit |
93f41a |
mng_view = GTK_MNG_VIEW (gtk_mng_view_new ());
|
|
Packit |
93f41a |
gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET (mng_view));
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
gtk_mng_view_load_mng_from_memory (mng_view, mng_data, mng_data_size);
|
|
Packit |
93f41a |
g_free (mng_data);
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
/* rest in piece */
|
|
Packit |
93f41a |
gtk_widget_show_all (window);
|
|
Packit |
93f41a |
gtk_main ();
|
|
Packit |
93f41a |
|
|
Packit |
93f41a |
return 0;
|
|
Packit |
93f41a |
}
|