|
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 |
|