找回密码
 注册
查看: 759|回复: 0

show gif file 得工具 - src

[复制链接]
发表于 2003-6-30 23:40:10 | 显示全部楼层 |阅读模式
file - showimg.c
[code:1]
#include <gtk/gtk.h>
#include "showimg.h"

# define  NOFILE                -1

static gchar **filename = NULL;
static GtkWidget *win = NULL;

static void
usage (void)
{
  g_print ("Usage: showimg filename ...\n\n"
           "Released under The GPL (Gnu Public License)!\n\n");
}

static void
parse_cmdline_and_do (gint argc, gchar ** argv)
{
  if (argc == 1)
    {
      usage ();
      gtk_exit (NOFILE);
    }

  filename = ++argv;
  create_win ();
  load_image (filename);
}

static void
load_image (char **fname)
{
  GtkWidget *image;

  image = gtk_image_new_from_file (fname[0]);
  show_image (image);
  filename++;
}

static void
show_image (GtkWidget * img)
{
  char *f = g_malloc (sizeof filename[0] + 15);

  g_return_if_fail (f != NULL);
  g_assert (img != NULL);

  f = g_strconcat ("file:  ", filename[0], NULL);

  if (GTK_BIN (win)->child != NULL)
    {
      gtk_widget_destroy (GTK_BIN (win)->child);
    }

  gtk_window_set_title (GTK_WINDOW (win), f);
  gtk_window_set_policy (GTK_WINDOW (win), FALSE, FALSE, TRUE);
  gtk_container_add (GTK_CONTAINER (win), img);

  gtk_widget_show_all (win);
  g_free (f);

}

static gboolean
check (GtkWidget * widget, GdkEvent * e, gpointer data)
{
  /* find file */
  if (e->type == GDK_BUTTON_RELEASE)
    {
      if (*filename != NULL)
        {
          load_image (filename);
        }
      else
        {
          gtk_main_quit ();
        }
    }
  return FALSE;
}

static void
create_win (void)
{

  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  g_signal_connect (G_OBJECT (win), "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);
  g_signal_connect (G_OBJECT (win), "delete_event",
                    G_CALLBACK(gtk_main_quit), NULL);
  g_signal_connect (G_OBJECT (win), "event",
                    G_CALLBACK (check), NULL);
  gtk_widget_add_events (win,
                         GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
}

gint
main (gint argc, gchar ** argv)
{
  gtk_init (&argc, &argv);

  parse_cmdline_and_do (argc, argv);

  gtk_main ();

  return 0;
}

/* End Of showimg.c */

[/code:1]

file - showimg.h
[code:1]
#ifndef _SHOWIMG_H_
#define _SHOWIMG_H_
static void load_image (char **fname);
static void show_image (GtkWidget * img);
static void create_win (void);
#endif
[/code:1]

file - makefile
[code:1]
app: showimg

TARGET=showimg
CC=gcc
CFLAGS=-Wall -o
OPTIONS=`pkg-config gtk+-2.0 --cflags --libs`
INSTALL_PATH=/usr/local/bin

$(TARGET): $(TARGET).c
        $(CC) $(CFLAGS) $(TARGET) $(TARGET).c $(OPTIONS)
install:
        @if [ -d  $(INSTALL_PATH) ]; \
          then \
            mv -v $(TARGET) $(INSTALL_PATH) && \
            chmod a+x $(INSTALL_PATH)/$(TARGET) && \
            echo " *** Success: install $(TARGET) on your system $(INSTALL_PATH) ***";\
          else \
           echo "*** Error: can not found directory $(INSTALL_PATH) on your system ***";\
         fi

clean:
        @rm -f *.o $(TARGET)

uninstall:
        @if [ -f ./$(TARGET) ]; \
          then \
            rm -vf $(TARGET) ;\
          else \
            if [ -f $(INSTALL_PATH)/$(TARGET) ] ; \
              then \
                rm -vf $(INSTALL_PATH)/$(TARGET); \
                 else \
                echo "*** Error: can not found file $(TARGET) ***"; \
           fi \
        fi
[/code:1]

//
如果有人和我一样在 Gnome下不想用 浏览器看 gif 文件, 那么你可以:
1: 拷贝上面得三个文件 分别为 showimg.c showimg.h Makefile
2:   你得pkg-config --modversion gtk >= 1.4.1.2
3:    make
4:    make install
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-7-20 06:50 , Processed in 0.067274 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表