dummy.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * Very simple program, that has been used by us
  3. * (V. Babin <babin :at: users.sourceforge.net> and
  4. * S. Kondrat <valiska :at: users.sourceforge.net>)
  5. * during toying with libmng (http://www.libmng.com)
  6. *
  7. * License: GPL :-))
  8. *
  9. * 7 July 2001: added key-press/button-press handling to exit viewer without
  10. * window-manager help; added libmng version info [Greg Roelofs]
  11. */
  12. #include <unistd.h>
  13. #include <sys/types.h>
  14. #include <sys/stat.h>
  15. #include <fcntl.h>
  16. #include <errno.h>
  17. #include <gtk/gtk.h>
  18. #include "gtk-mng-view.h"
  19. #define BLOCK_SIZE 4096
  20. static guint
  21. read_file (const gchar* file_name, guchar ** ptr)
  22. {
  23. gint fd;
  24. guint size = 0;
  25. guint bytes_read = 0;
  26. if ((fd = open (file_name, O_RDONLY)) == -1)
  27. {
  28. perror (file_name);
  29. * ptr = NULL;
  30. return 0;
  31. }
  32. * ptr = g_new (guchar, BLOCK_SIZE);
  33. while ((bytes_read = read (fd, * ptr + size, BLOCK_SIZE)))
  34. {
  35. size += bytes_read;
  36. * ptr = (guchar *) g_realloc (* ptr, size + BLOCK_SIZE);
  37. }
  38. close (fd);
  39. * ptr = (guchar *) g_realloc (* ptr, size);
  40. return size;
  41. }
  42. int
  43. main (int argc, char ** argv)
  44. {
  45. GtkMngView * mng_view;
  46. GtkWidget * window;
  47. GtkWidget * align;
  48. GtkWidget * frame;
  49. guchar * mng_data = NULL;
  50. guint mng_data_size;
  51. if (argc < 2)
  52. {
  53. g_print ("Usage: %s <file.mng>\n\n", argv[0]);
  54. g_print (" Compiled with GTK+ %d.%d.%d; using GTK+ %d.%d.%d.\n",
  55. GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
  56. gtk_major_version, gtk_minor_version, gtk_micro_version);
  57. #ifdef GDK_PIXBUF_VERSION
  58. g_print (" Compiled with gdk-pixbuf %s; using gdk-pixbuf %s.\n",
  59. GDK_PIXBUF_VERSION, gdk_pixbuf_version);
  60. #endif
  61. g_print (" Compiled with libmng %s; using libmng %s.\n",
  62. MNG_VERSION_TEXT, mng_version_text());
  63. g_print (" Compiled with zlib %s; using zlib %s.\n",
  64. ZLIB_VERSION, zlib_version);
  65. #ifdef JPEG_LIB_VERSION
  66. {
  67. int major = JPEG_LIB_VERSION / 10;
  68. int minor = JPEG_LIB_VERSION % 10;
  69. char minoralpha[2];
  70. if (minor)
  71. {
  72. minoralpha[0] = (char)(minor - 1 + 'a');
  73. minoralpha[1] = '\0';
  74. }
  75. else
  76. minoralpha[0] = '\0';
  77. g_print (" Compiled with libjpeg %d%s.\n", major, minoralpha);
  78. }
  79. #endif
  80. g_print ("\nPress Esc or Q, or click mouse button, to quit.\n");
  81. return 1;
  82. }
  83. mng_data_size = read_file (* (argv + 1), &mng_data);
  84. if (mng_data == NULL)
  85. return 1;
  86. gtk_init (&argc, &argv);
  87. gdk_rgb_init ();
  88. gdk_rgb_set_verbose (TRUE);
  89. gtk_widget_set_default_visual (gdk_rgb_get_visual ());
  90. gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
  91. window = gtk_widget_new (GTK_TYPE_WINDOW,
  92. "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
  93. "GtkWindow::title", "MNG animation",
  94. "GtkContainer::border_width", 5,
  95. NULL);
  96. gtk_signal_connect (GTK_OBJECT (window), "delete_event",
  97. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  98. gtk_signal_connect (GTK_OBJECT (window), "destroy",
  99. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  100. /* any keypress (e.g., Esc or Q) or mouse-button click will quit viewer */
  101. gtk_signal_connect (GTK_OBJECT (window), "key_press_event",
  102. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  103. gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
  104. gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
  105. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  106. align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
  107. gtk_container_add (GTK_CONTAINER (window), align);
  108. frame = gtk_frame_new (NULL);
  109. gtk_container_add (GTK_CONTAINER (align), frame);
  110. /* actually it */
  111. mng_view = GTK_MNG_VIEW (gtk_mng_view_new ());
  112. gtk_container_add (GTK_CONTAINER (frame), GTK_WIDGET (mng_view));
  113. gtk_mng_view_load_mng_from_memory (mng_view, mng_data, mng_data_size);
  114. g_free (mng_data);
  115. /* rest in piece */
  116. gtk_widget_show_all (window);
  117. gtk_main ();
  118. return 0;
  119. }