[Goodies-commits] r3006 - ristretto/trunk/src
Stephan Arts
stephan at xfce.org
Sun Aug 19 15:40:45 CEST 2007
Author: stephan
Date: 2007-08-19 13:40:45 +0000 (Sun, 19 Aug 2007)
New Revision: 3006
Modified:
ristretto/trunk/src/main.c
ristretto/trunk/src/navigator.c
ristretto/trunk/src/navigator.h
ristretto/trunk/src/picture_viewer.c
ristretto/trunk/src/picture_viewer.h
ristretto/trunk/src/thumbnail_viewer.c
ristretto/trunk/src/thumbnail_viewer.h
Log:
Please do not mind the memory-leak, cached pictures are not cleaned up yet.
Stuff should work a bit better now.
Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/main.c 2007-08-19 13:40:45 UTC (rev 3006)
@@ -21,9 +21,9 @@
#include <thunar-vfs/thunar-vfs.h>
+#include "navigator.h"
#include "picture_viewer.h"
#include "thumbnail_viewer.h"
-#include "navigator.h"
static ThunarVfsMimeDatabase *mime_dbase = NULL;
@@ -102,45 +102,45 @@
RsttoNavigator *navigator = NULL;
- #ifdef ENABLE_NLS
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
- #endif
+ #ifdef ENABLE_NLS
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+ #endif
- gtk_init(&argc, &argv);
+ gtk_init(&argc, &argv);
- thunar_vfs_init();
+ thunar_vfs_init();
- mime_dbase = thunar_vfs_mime_database_get_default();
+ mime_dbase = thunar_vfs_mime_database_get_default();
- gtk_window_set_default_icon_name("ristretto");
+ gtk_window_set_default_icon_name("ristretto");
- GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
+ gtk_window_set_title(GTK_WINDOW(window), PACKAGE_STRING);
- if(argc == 2)
+ if(argc == 2)
path = thunar_vfs_path_new(argv[1], NULL);
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
- GtkWidget *viewer = rstto_picture_viewer_new();
- navigator = rstto_navigator_new(RSTTO_PICTURE_VIEWER(viewer));
+ navigator = rstto_navigator_new();
+ GtkWidget *viewer = rstto_picture_viewer_new(navigator);
g_signal_connect(window , "key-press-event", G_CALLBACK(cb_rstto_key_press_event) , navigator);
- g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_nav_file_changed), window);
+ g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_nav_file_changed), window);
- GtkWidget *s_window = gtk_scrolled_window_new(NULL,NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- GtkWidget *main_vbox = gtk_vbox_new(0, FALSE);
- main_hbox = gtk_hbox_new(0, FALSE);
+ GtkWidget *s_window = gtk_scrolled_window_new(NULL,NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ GtkWidget *main_vbox = gtk_vbox_new(0, FALSE);
+ main_hbox = gtk_hbox_new(0, FALSE);
main_vbox1 = gtk_vbox_new(0, FALSE);
thumbnail_viewer = rstto_thumbnail_viewer_new(navigator);
menu_bar = gtk_menu_bar_new();
- image_tool_bar = gtk_toolbar_new();
- app_tool_bar = gtk_toolbar_new();
+ image_tool_bar = gtk_toolbar_new();
+ app_tool_bar = gtk_toolbar_new();
status_bar = gtk_statusbar_new();
GtkWidget *menu_item_file = gtk_menu_item_new_with_mnemonic(_("_File"));
@@ -150,7 +150,7 @@
GtkWidget *menu_item_quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
GtkWidget *menu_file = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_file), menu_file);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_file), menu_file);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_open);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_open_dir);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), menu_item_separator);
@@ -163,7 +163,7 @@
GtkWidget *menu_item_flip_h = gtk_menu_item_new_with_mnemonic(_("Flip _Horizontally"));
GtkWidget *menu_edit = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_edit), menu_edit);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_edit), menu_edit);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_rotate_left);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_rotate_right);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), menu_item_flip_v);
@@ -174,12 +174,12 @@
GtkWidget *menu_item_view_fs = gtk_image_menu_item_new_from_stock(GTK_STOCK_FULLSCREEN, NULL);
GtkWidget *menu_view = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_view), menu_view);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_view), menu_view);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), menu_item_tv);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), menu_item_view_fs);
GtkWidget *menu_tv = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_tv), menu_tv);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_tv), menu_tv);
GtkWidget *menu_item_htv = gtk_radio_menu_item_new_with_mnemonic(NULL, _("Show Horizontally"));
GtkWidget *menu_item_vtv = gtk_radio_menu_item_new_with_mnemonic_from_widget(GTK_RADIO_MENU_ITEM(menu_item_htv), _("Show Vertically"));
GtkWidget *menu_item_ntv = gtk_radio_menu_item_new_with_mnemonic_from_widget(GTK_RADIO_MENU_ITEM(menu_item_htv), _("Hide"));
@@ -201,7 +201,7 @@
menu_item_separator = gtk_separator_menu_item_new();
GtkWidget *menu_go = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_go), menu_go);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_go), menu_go);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_first);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_last);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_go), menu_item_forward);
@@ -214,7 +214,7 @@
GtkWidget *menu_item_help_about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL);
GtkWidget *menu_help = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_help), menu_help);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item_help), menu_help);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_help), menu_item_help_about);
@@ -224,211 +224,221 @@
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item_go);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item_help);
- GtkToolItem *zoom_fit= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
- GtkToolItem *zoom_100= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_100);
- GtkToolItem *zoom_out= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
- GtkToolItem *zoom_in = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
- GtkToolItem *forward = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
- GtkToolItem *previous = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
- GtkToolItem *open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
- GtkToolItem *spacer = gtk_tool_item_new();
- GtkToolItem *separator = gtk_separator_tool_item_new();
+ GtkToolItem *zoom_fit= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
+ GtkToolItem *zoom_100= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_100);
+ GtkToolItem *zoom_out= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
+ GtkToolItem *zoom_in = gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
+ GtkToolItem *forward = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+ GtkToolItem *previous = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
+ GtkToolItem *open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
+ GtkToolItem *spacer = gtk_tool_item_new();
+ GtkToolItem *separator = gtk_separator_tool_item_new();
- gtk_tool_item_set_expand(spacer, TRUE);
- gtk_tool_item_set_homogeneous(spacer, FALSE);
+ gtk_tool_item_set_expand(spacer, TRUE);
+ gtk_tool_item_set_homogeneous(spacer, FALSE);
- gtk_widget_set_size_request(window, 400, 300);
+ gtk_widget_set_size_request(window, 400, 300);
- gtk_container_add(GTK_CONTAINER(s_window), viewer);
+ gtk_container_add(GTK_CONTAINER(s_window), viewer);
gtk_toolbar_set_orientation(GTK_TOOLBAR(image_tool_bar), GTK_ORIENTATION_VERTICAL);
- gtk_box_pack_start(GTK_BOX(main_hbox), image_tool_bar, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_hbox), image_tool_bar, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_hbox), main_vbox1, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox1), s_window, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox1), thumbnail_viewer, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox1), s_window, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox1), thumbnail_viewer, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox), app_tool_bar, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox), main_hbox, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), app_tool_bar, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), main_hbox, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0);
- rstto_picture_viewer_fit_scale(RSTTO_PICTURE_VIEWER(viewer));
+ rstto_picture_viewer_fit_scale(RSTTO_PICTURE_VIEWER(viewer));
- gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_fit, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_100, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_out, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_in, 0);
- //gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), spacer, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), forward, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), previous, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), separator, 0);
- gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), open, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_fit, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_100, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_out, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), zoom_in, 0);
+ //gtk_toolbar_insert(GTK_TOOLBAR(image_tool_bar), spacer, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), forward, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), previous, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), separator, 0);
+ gtk_toolbar_insert(GTK_TOOLBAR(app_tool_bar), open, 0);
- g_signal_connect(G_OBJECT(zoom_fit), "clicked", G_CALLBACK(cb_rstto_zoom_fit), viewer);
- g_signal_connect(G_OBJECT(zoom_100), "clicked", G_CALLBACK(cb_rstto_zoom_100), viewer);
- g_signal_connect(G_OBJECT(zoom_in), "clicked", G_CALLBACK(cb_rstto_zoom_in), viewer);
- g_signal_connect(G_OBJECT(zoom_out), "clicked", G_CALLBACK(cb_rstto_zoom_out), viewer);
- g_signal_connect(G_OBJECT(forward), "clicked", G_CALLBACK(cb_rstto_forward), navigator);
- g_signal_connect(G_OBJECT(previous), "clicked", G_CALLBACK(cb_rstto_previous), navigator);
- g_signal_connect(G_OBJECT(open), "clicked", G_CALLBACK(cb_rstto_open), navigator);
+ g_signal_connect(G_OBJECT(zoom_fit), "clicked", G_CALLBACK(cb_rstto_zoom_fit), viewer);
+ g_signal_connect(G_OBJECT(zoom_100), "clicked", G_CALLBACK(cb_rstto_zoom_100), viewer);
+ g_signal_connect(G_OBJECT(zoom_in), "clicked", G_CALLBACK(cb_rstto_zoom_in), viewer);
+ g_signal_connect(G_OBJECT(zoom_out), "clicked", G_CALLBACK(cb_rstto_zoom_out), viewer);
+ g_signal_connect(G_OBJECT(forward), "clicked", G_CALLBACK(cb_rstto_forward), navigator);
+ g_signal_connect(G_OBJECT(previous), "clicked", G_CALLBACK(cb_rstto_previous), navigator);
+ g_signal_connect(G_OBJECT(open), "clicked", G_CALLBACK(cb_rstto_open), navigator);
- g_signal_connect(G_OBJECT(menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), NULL);
- g_signal_connect(G_OBJECT(menu_item_open), "activate", G_CALLBACK(cb_rstto_open), navigator);
- g_signal_connect(G_OBJECT(menu_item_open_dir), "activate", G_CALLBACK(cb_rstto_open_dir), navigator);
- g_signal_connect(G_OBJECT(menu_item_help_about), "activate", G_CALLBACK(cb_rstto_help_about), window);
+ g_signal_connect(G_OBJECT(menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), NULL);
+ g_signal_connect(G_OBJECT(menu_item_open), "activate", G_CALLBACK(cb_rstto_open), navigator);
+ g_signal_connect(G_OBJECT(menu_item_open_dir), "activate", G_CALLBACK(cb_rstto_open_dir), navigator);
+ g_signal_connect(G_OBJECT(menu_item_help_about), "activate", G_CALLBACK(cb_rstto_help_about), window);
- g_signal_connect(G_OBJECT(menu_item_forward), "activate", G_CALLBACK(cb_rstto_forward), navigator);
- g_signal_connect(G_OBJECT(menu_item_back), "activate", G_CALLBACK(cb_rstto_previous), navigator);
- g_signal_connect(G_OBJECT(menu_item_first), "activate", G_CALLBACK(cb_rstto_first), navigator);
- g_signal_connect(G_OBJECT(menu_item_last), "activate", G_CALLBACK(cb_rstto_last), navigator);
+ g_signal_connect(G_OBJECT(menu_item_forward), "activate", G_CALLBACK(cb_rstto_forward), navigator);
+ g_signal_connect(G_OBJECT(menu_item_back), "activate", G_CALLBACK(cb_rstto_previous), navigator);
+ g_signal_connect(G_OBJECT(menu_item_first), "activate", G_CALLBACK(cb_rstto_first), navigator);
+ g_signal_connect(G_OBJECT(menu_item_last), "activate", G_CALLBACK(cb_rstto_last), navigator);
- g_signal_connect(G_OBJECT(menu_item_rotate_left), "activate", G_CALLBACK(cb_rstto_rotate_ccw), navigator);
- g_signal_connect(G_OBJECT(menu_item_rotate_right), "activate", G_CALLBACK(cb_rstto_rotate_cw), navigator);
- g_signal_connect(G_OBJECT(menu_item_flip_v), "activate", G_CALLBACK(cb_rstto_flip_v), navigator);
- g_signal_connect(G_OBJECT(menu_item_flip_h), "activate", G_CALLBACK(cb_rstto_flip_h), navigator);
+ g_signal_connect(G_OBJECT(menu_item_rotate_left), "activate", G_CALLBACK(cb_rstto_rotate_ccw), navigator);
+ g_signal_connect(G_OBJECT(menu_item_rotate_right), "activate", G_CALLBACK(cb_rstto_rotate_cw), navigator);
+ g_signal_connect(G_OBJECT(menu_item_flip_v), "activate", G_CALLBACK(cb_rstto_flip_v), navigator);
+ g_signal_connect(G_OBJECT(menu_item_flip_h), "activate", G_CALLBACK(cb_rstto_flip_h), navigator);
- g_signal_connect(G_OBJECT(menu_item_vtv), "activate", G_CALLBACK(cb_rstto_show_tv_v), thumbnail_viewer);
- g_signal_connect(G_OBJECT(menu_item_htv), "activate", G_CALLBACK(cb_rstto_show_tv_h), thumbnail_viewer);
- g_signal_connect(G_OBJECT(menu_item_ntv), "activate", G_CALLBACK(cb_rstto_hide_tv), thumbnail_viewer);
+ g_signal_connect(G_OBJECT(menu_item_vtv), "activate", G_CALLBACK(cb_rstto_show_tv_v), thumbnail_viewer);
+ g_signal_connect(G_OBJECT(menu_item_htv), "activate", G_CALLBACK(cb_rstto_show_tv_h), thumbnail_viewer);
+ g_signal_connect(G_OBJECT(menu_item_ntv), "activate", G_CALLBACK(cb_rstto_hide_tv), thumbnail_viewer);
- g_signal_connect(G_OBJECT(menu_item_play), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
- g_signal_connect(G_OBJECT(menu_item_pause), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
- g_signal_connect(G_OBJECT(menu_item_view_fs), "activate", G_CALLBACK(cb_rstto_toggle_fullscreen), window);
+ g_signal_connect(G_OBJECT(menu_item_play), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
+ g_signal_connect(G_OBJECT(menu_item_pause), "activate", G_CALLBACK(cb_rstto_toggle_play), navigator);
+ g_signal_connect(G_OBJECT(menu_item_view_fs), "activate", G_CALLBACK(cb_rstto_toggle_fullscreen), window);
- g_signal_connect(G_OBJECT(window), "window-state-event", G_CALLBACK(cb_rstto_fullscreen), viewer);
+ g_signal_connect(G_OBJECT(window), "window-state-event", G_CALLBACK(cb_rstto_fullscreen), viewer);
- gtk_container_add(GTK_CONTAINER(window), main_vbox);
+ gtk_container_add(GTK_CONTAINER(window), main_vbox);
- gtk_widget_show_all(window);
+ gtk_widget_show_all(window);
gtk_widget_hide(menu_item_pause);
- gtk_widget_show(viewer);
+ gtk_widget_show(viewer);
- gtk_main();
- return 0;
+ gtk_main();
+ return 0;
}
static void
cb_rstto_zoom_fit(GtkToolItem *item, RsttoPictureViewer *viewer)
{
- rstto_picture_viewer_fit_scale(viewer);
+ rstto_picture_viewer_fit_scale(viewer);
}
static void
cb_rstto_zoom_100(GtkToolItem *item, RsttoPictureViewer *viewer)
{
- rstto_picture_viewer_set_scale(viewer, 1);
+ rstto_picture_viewer_set_scale(viewer, 1);
}
static void
cb_rstto_zoom_in(GtkToolItem *item, RsttoPictureViewer *viewer)
{
- gdouble scale = rstto_picture_viewer_get_scale(viewer);
- rstto_picture_viewer_set_scale(viewer, scale*1.2);
+ gdouble scale = rstto_picture_viewer_get_scale(viewer);
+ rstto_picture_viewer_set_scale(viewer, scale*1.2);
}
static void
cb_rstto_zoom_out(GtkToolItem *item, RsttoPictureViewer *viewer)
{
- gdouble scale = rstto_picture_viewer_get_scale(viewer);
- rstto_picture_viewer_set_scale(viewer, scale/1.2);
+ gdouble scale = rstto_picture_viewer_get_scale(viewer);
+ rstto_picture_viewer_set_scale(viewer, scale/1.2);
}
static void
cb_rstto_open(GtkToolItem *item, RsttoNavigator *navigator)
{
- GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
+ GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
- GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open image"),
- GTK_WINDOW(window),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_OK,
- NULL);
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open image"),
+ GTK_WINDOW(window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL);
- gint response = gtk_dialog_run(GTK_DIALOG(dialog));
- if(response == GTK_RESPONSE_OK)
- {
- const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+ if(response == GTK_RESPONSE_OK)
+ {
+ const gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+ ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+ if (path)
+ {
+ ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
+ RsttoNavigatorEntry *entry = rstto_navigator_entry_new(info);
+ rstto_navigator_add (navigator, entry);
+ thunar_vfs_path_unref(path);
+ }
- thunar_vfs_path_unref(path);
- }
+ }
- gtk_widget_destroy(dialog);
+ gtk_widget_destroy(dialog);
}
static void
cb_rstto_open_dir(GtkToolItem *item, RsttoNavigator *navigator)
{
- GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
+ GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(item));
- GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open folder"),
- GTK_WINDOW(window),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_OK,
- NULL);
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(_("Open folder"),
+ GTK_WINDOW(window),
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL);
- gint response = gtk_dialog_run(GTK_DIALOG(dialog));
- if(response == GTK_RESPONSE_OK)
- {
- const gchar *dir_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+ if(response == GTK_RESPONSE_OK)
+ {
+ rstto_navigator_clear(navigator);
+ const gchar *dir_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
GDir *dir = g_dir_open(dir_name, 0, NULL);
if (dir)
{
const gchar *filename = g_dir_read_name(dir);
while (filename)
{
- ThunarVfsPath *path = thunar_vfs_path_new(filename, NULL);
+ gchar *path_name = g_strconcat(dir_name, "/", filename, NULL);
+ ThunarVfsPath *path = thunar_vfs_path_new(path_name, NULL);
if (path)
{
ThunarVfsInfo *info = thunar_vfs_info_new_for_path(path, NULL);
RsttoNavigatorEntry *entry = rstto_navigator_entry_new(info);
rstto_navigator_add (navigator, entry);
+ thunar_vfs_path_unref(path);
}
+ g_free(path_name);
filename = g_dir_read_name(dir);
}
}
- }
+ }
- gtk_widget_destroy(dialog);
+ gtk_widget_destroy(dialog);
}
static void
cb_rstto_help_about(GtkToolItem *item, GtkWindow *window)
{
- const gchar *authors[] = {
- _("Developer:"),
- "Stephan Arts <stephan at xfce.org>",
- NULL};
+ const gchar *authors[] = {
+ _("Developer:"),
+ "Stephan Arts <stephan at xfce.org>",
+ NULL};
- GtkWidget *about_dialog = gtk_about_dialog_new();
+ GtkWidget *about_dialog = gtk_about_dialog_new();
- gtk_about_dialog_set_name((GtkAboutDialog *)about_dialog, PACKAGE_NAME);
- gtk_about_dialog_set_version((GtkAboutDialog *)about_dialog, PACKAGE_VERSION);
+ gtk_about_dialog_set_name((GtkAboutDialog *)about_dialog, PACKAGE_NAME);
+ gtk_about_dialog_set_version((GtkAboutDialog *)about_dialog, PACKAGE_VERSION);
- gtk_about_dialog_set_comments((GtkAboutDialog *)about_dialog, _("Ristretto is a fast and lightweight picture-viewer for the Xfce desktop environment."));
- gtk_about_dialog_set_website((GtkAboutDialog *)about_dialog, "http://goodies.xfce.org/projects/applications/ristretto");
+ gtk_about_dialog_set_comments((GtkAboutDialog *)about_dialog, _("Ristretto is a fast and lightweight picture-viewer for the Xfce desktop environment."));
+ gtk_about_dialog_set_website((GtkAboutDialog *)about_dialog, "http://goodies.xfce.org/projects/applications/ristretto");
- gtk_about_dialog_set_logo_icon_name((GtkAboutDialog *)about_dialog, "ristretto");
+ gtk_about_dialog_set_logo_icon_name((GtkAboutDialog *)about_dialog, "ristretto");
- gtk_about_dialog_set_authors((GtkAboutDialog *)about_dialog, authors);
+ gtk_about_dialog_set_authors((GtkAboutDialog *)about_dialog, authors);
- gtk_about_dialog_set_translator_credits((GtkAboutDialog *)about_dialog, _("translator-credits"));
+ gtk_about_dialog_set_translator_credits((GtkAboutDialog *)about_dialog, _("translator-credits"));
- gtk_about_dialog_set_license((GtkAboutDialog *)about_dialog, xfce_get_license_text(XFCE_LICENSE_TEXT_GPL));
+ gtk_about_dialog_set_license((GtkAboutDialog *)about_dialog, xfce_get_license_text(XFCE_LICENSE_TEXT_GPL));
- gtk_about_dialog_set_copyright((GtkAboutDialog *)about_dialog, "Copyright \302\251 2006-2007 Stephan Arts");
+ gtk_about_dialog_set_copyright((GtkAboutDialog *)about_dialog, "Copyright \302\251 2006-2007 Stephan Arts");
- gtk_dialog_run(GTK_DIALOG(about_dialog));
+ gtk_dialog_run(GTK_DIALOG(about_dialog));
- gtk_widget_destroy(about_dialog);
+ gtk_widget_destroy(about_dialog);
}
static void
@@ -562,7 +572,7 @@
gtk_widget_ref(GTK_WIDGET(viewer));
gtk_container_remove(GTK_CONTAINER(parent), GTK_WIDGET(viewer));
rstto_thumbnail_viewer_set_orientation(viewer, GTK_ORIENTATION_VERTICAL);
- gtk_box_pack_start(GTK_BOX(main_hbox), thumbnail_viewer, FALSE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(main_hbox), thumbnail_viewer, FALSE, TRUE, 0);
gtk_widget_show(GTK_WIDGET(viewer));
}
Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/navigator.c 2007-08-19 13:40:45 UTC (rev 3006)
@@ -21,7 +21,6 @@
#include <thunar-vfs/thunar-vfs.h>
-#include "picture_viewer.h"
#include "navigator.h"
static void
@@ -41,8 +40,8 @@
enum
{
- RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED = 0,
- RSTTO_NAVIGATOR_SIGNAL_COUNT
+ RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED = 0,
+ RSTTO_NAVIGATOR_SIGNAL_COUNT
};
struct _RsttoNavigatorEntry
@@ -51,7 +50,8 @@
GdkPixbufRotation rotation;
gboolean h_flipped;
gboolean v_flipped;
- GdkPixbuf *preview;
+ GdkPixbuf *thumb;
+ GdkPixbuf *pixbuf;
};
@@ -60,33 +60,33 @@
GType
rstto_navigator_get_type ()
{
- static GType rstto_navigator_type = 0;
+ static GType rstto_navigator_type = 0;
- if (!rstto_navigator_type)
- {
- static const GTypeInfo rstto_navigator_info =
- {
- sizeof (RsttoNavigatorClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) rstto_navigator_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (RsttoNavigator),
- 0,
- (GInstanceInitFunc) rstto_navigator_init,
- NULL
- };
+ if (!rstto_navigator_type)
+ {
+ static const GTypeInfo rstto_navigator_info =
+ {
+ sizeof (RsttoNavigatorClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) rstto_navigator_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (RsttoNavigator),
+ 0,
+ (GInstanceInitFunc) rstto_navigator_init,
+ NULL
+ };
- rstto_navigator_type = g_type_register_static (G_TYPE_OBJECT, "RsttoNavigator", &rstto_navigator_info, 0);
- }
- return rstto_navigator_type;
+ rstto_navigator_type = g_type_register_static (G_TYPE_OBJECT, "RsttoNavigator", &rstto_navigator_info, 0);
+ }
+ return rstto_navigator_type;
}
static void
-rstto_navigator_init(RsttoNavigator *viewer)
+rstto_navigator_init(RsttoNavigator *navigator)
{
- viewer->compare_func = (GCompareFunc)rstto_navigator_entry_name_compare_func;
+ navigator->compare_func = (GCompareFunc)rstto_navigator_entry_name_compare_func;
}
static void
@@ -94,26 +94,26 @@
{
GObjectClass *object_class = G_OBJECT_CLASS(nav_class);
- parent_class = g_type_class_peek_parent(nav_class);
+ parent_class = g_type_class_peek_parent(nav_class);
- object_class->dispose = rstto_navigator_dispose;
+ object_class->dispose = rstto_navigator_dispose;
- rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED] = g_signal_new("file_changed",
- G_TYPE_FROM_CLASS(nav_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- 0,
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0,
- NULL);
+ rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED] = g_signal_new("file_changed",
+ G_TYPE_FROM_CLASS(nav_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ 0,
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0,
+ NULL);
}
static void
rstto_navigator_dispose(GObject *object)
{
- RsttoNavigator *navigator = RSTTO_NAVIGATOR(object);
+ RsttoNavigator *navigator = RSTTO_NAVIGATOR(object);
if(navigator->file_list)
{
@@ -123,16 +123,15 @@
}
RsttoNavigator *
-rstto_navigator_new(RsttoPictureViewer *viewer)
+rstto_navigator_new()
{
- RsttoNavigator *navigator;
+ RsttoNavigator *navigator;
- navigator = g_object_new(RSTTO_TYPE_NAVIGATOR, NULL);
+ navigator = g_object_new(RSTTO_TYPE_NAVIGATOR, NULL);
- navigator->viewer = viewer;
navigator->icon_theme = gtk_icon_theme_new();
- return navigator;
+ return navigator;
}
static gint
@@ -241,9 +240,25 @@
rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry)
{
navigator->file_list = g_list_insert_sorted(navigator->file_list, entry, navigator->compare_func);
+ if (!navigator->file_iter)
+ {
+ navigator->file_iter = navigator->file_list;
+ g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_FILE_CHANGED], 0, NULL);
+ }
}
void
+rstto_navigator_clear (RsttoNavigator *navigator)
+{
+ if(navigator->file_list)
+ {
+ g_list_foreach(navigator->file_list, (GFunc)rstto_navigator_entry_free, NULL);
+ navigator->file_list = NULL;
+ navigator->file_iter = NULL;
+ }
+}
+
+void
rstto_navigator_set_file (RsttoNavigator *navigator, gint n)
{
navigator->file_iter = g_list_nth(navigator->file_list, n);
@@ -323,3 +338,36 @@
g_free(nav_entry);
}
+GdkPixbuf *
+rstto_navigator_entry_get_thumb(RsttoNavigatorEntry *entry, gint size)
+{
+ if(entry->thumb)
+ {
+ if(gdk_pixbuf_get_width(entry->thumb) != size || gdk_pixbuf_get_height(entry->thumb) != size)
+ {
+ g_object_unref(entry->thumb);
+ gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+ entry->thumb = gdk_pixbuf_new_from_file_at_size(filename, size, size, NULL);
+ g_free(filename);
+ }
+ }
+ else
+ {
+ gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+ entry->thumb = gdk_pixbuf_new_from_file_at_size(filename, size, size, NULL);
+ g_free(filename);
+ }
+ return entry->thumb;
+}
+
+GdkPixbuf *
+rstto_navigator_entry_get_pixbuf(RsttoNavigatorEntry *entry)
+{
+ if(!entry->pixbuf)
+ {
+ gchar *filename = thunar_vfs_path_dup_string(entry->info->path);
+ entry->pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+ g_free(filename);
+ }
+ return entry->pixbuf;
+}
Modified: ristretto/trunk/src/navigator.h
===================================================================
--- ristretto/trunk/src/navigator.h 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/navigator.h 2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
#define RSTTO_NAVIGATOR(obj)( \
G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RSTTO_TYPE_NAVIGATOR, \
- RsttoNavigator))
+ RSTTO_TYPE_NAVIGATOR, \
+ RsttoNavigator))
#define RSTTO_IS_NAVIGATOR(obj)( \
G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RSTTO_TYPE_NAVIGATOR))
+ RSTTO_TYPE_NAVIGATOR))
#define RSTTO_NAVIGATOR_CLASS(klass)( \
G_TYPE_CHECK_CLASS_CAST ((klass), \
- RSTTO_TYPE_NAVIGATOR, \
- RsttoNavigatorClass))
+ RSTTO_TYPE_NAVIGATOR, \
+ RsttoNavigatorClass))
#define RSTTO_IS_NAVIGATOR_CLASS(klass)( \
G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RSTTO_TYPE_NAVIGATOR()))
+ RSTTO_TYPE_NAVIGATOR()))
typedef struct _RsttoNavigatorEntry RsttoNavigatorEntry;
@@ -46,7 +46,6 @@
struct _RsttoNavigator
{
GObject parent;
- RsttoPictureViewer *viewer;
GtkIconTheme *icon_theme;
ThunarVfsPath *path;
GList *file_list;
@@ -65,7 +64,7 @@
GType rstto_navigator_get_type ();
RsttoNavigator *
-rstto_navigator_new (RsttoPictureViewer *viewer);
+rstto_navigator_new ();
void rstto_navigator_jump_first (RsttoNavigator *navigator);
void rstto_navigator_jump_forward (RsttoNavigator *navigator);
@@ -89,6 +88,8 @@
void
rstto_navigator_set_file (RsttoNavigator *navigator, gint n);
void
+rstto_navigator_clear (RsttoNavigator *navigator);
+void
rstto_navigator_set_entry_rotation (RsttoNavigator *navigator, RsttoNavigatorEntry *entry, GdkPixbufRotation rotation);
RsttoNavigatorEntry *
@@ -96,7 +97,7 @@
void
rstto_navigator_entry_free(RsttoNavigatorEntry *nav_entry);
GdkPixbuf *
-rstto_navigator_entry_get_thumbnail (RsttoNavigatorEntry *entry);
+rstto_navigator_entry_get_pixbuf (RsttoNavigatorEntry *entry);
ThunarVfsInfo *
rstto_navigator_entry_get_info (RsttoNavigatorEntry *entry);
GdkPixbufRotation
@@ -105,6 +106,8 @@
rstto_navigator_entry_get_flip (RsttoNavigatorEntry *entry, gboolean horizontal);
void
rstto_navigator_flip_entry(RsttoNavigator *navigator, RsttoNavigatorEntry *entry, gboolean horizontal);
+GdkPixbuf *
+rstto_navigator_entry_get_thumb(RsttoNavigatorEntry *entry, gint max_size);
G_END_DECLS
Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/picture_viewer.c 2007-08-19 13:40:45 UTC (rev 3006)
@@ -18,17 +18,20 @@
#include <gtk/gtk.h>
#include <gtk/gtkmarshal.h>
#include <string.h>
+#include <thunar-vfs/thunar-vfs.h>
+#include "navigator.h"
#include "picture_viewer.h"
struct _RsttoPictureViewerPriv
{
- GdkPixbuf *src_pixbuf;
- GdkPixbuf *dst_pixbuf; /* The pixbuf which ends up on screen */
- gdouble scale;
- gboolean scale_fts; /* Scale image to fit to screen */
- void (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
+ GdkPixbuf *src_pixbuf;
+ GdkPixbuf *dst_pixbuf; /* The pixbuf which ends up on screen */
+ gdouble scale;
+ gboolean scale_fts; /* Scale image to fit to screen */
+ void (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
gboolean show_border;
+ RsttoNavigator *navigator;
};
static void
@@ -50,6 +53,9 @@
rstto_picture_viewer_expose(GtkWidget *, GdkEventExpose *);
static void
+cb_rstto_picture_viewer_nav_file_changed(RsttoNavigator *nav, RsttoPictureViewer *viewer);
+
+static void
rstto_picture_viewer_paint(GtkWidget *widget);
static void
rstto_picture_viewer_refresh(RsttoPictureViewer *viewer);
@@ -66,27 +72,27 @@
GType
rstto_picture_viewer_get_type ()
{
- static GType rstto_picture_viewer_type = 0;
+ static GType rstto_picture_viewer_type = 0;
- if (!rstto_picture_viewer_type)
- {
- static const GTypeInfo rstto_picture_viewer_info =
- {
- sizeof (RsttoPictureViewerClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) rstto_picture_viewer_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (RsttoPictureViewer),
- 0,
- (GInstanceInitFunc) rstto_picture_viewer_init,
- NULL
- };
+ if (!rstto_picture_viewer_type)
+ {
+ static const GTypeInfo rstto_picture_viewer_info =
+ {
+ sizeof (RsttoPictureViewerClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) rstto_picture_viewer_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (RsttoPictureViewer),
+ 0,
+ (GInstanceInitFunc) rstto_picture_viewer_init,
+ NULL
+ };
- rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
- }
- return rstto_picture_viewer_type;
+ rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
+ }
+ return rstto_picture_viewer_type;
}
static void
@@ -107,94 +113,94 @@
static void
rstto_picture_viewer_class_init(RsttoPictureViewerClass *viewer_class)
{
- GtkWidgetClass *widget_class;
- GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkObjectClass *object_class;
- widget_class = (GtkWidgetClass*)viewer_class;
- object_class = (GtkObjectClass*)viewer_class;
+ widget_class = (GtkWidgetClass*)viewer_class;
+ object_class = (GtkObjectClass*)viewer_class;
- parent_class = g_type_class_peek_parent(viewer_class);
+ parent_class = g_type_class_peek_parent(viewer_class);
- viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
+ viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
- widget_class->realize = rstto_picture_viewer_realize;
- widget_class->unrealize = rstto_picture_viewer_unrealize;
- widget_class->expose_event = rstto_picture_viewer_expose;
+ widget_class->realize = rstto_picture_viewer_realize;
+ widget_class->unrealize = rstto_picture_viewer_unrealize;
+ widget_class->expose_event = rstto_picture_viewer_expose;
- widget_class->size_request = rstto_picture_viewer_size_request;
- widget_class->size_allocate = rstto_picture_viewer_size_allocate;
+ widget_class->size_request = rstto_picture_viewer_size_request;
+ widget_class->size_allocate = rstto_picture_viewer_size_allocate;
- object_class->destroy = rstto_picture_viewer_destroy;
+ object_class->destroy = rstto_picture_viewer_destroy;
- widget_class->set_scroll_adjustments_signal =
- g_signal_new ("set_scroll_adjustments",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
- NULL, NULL,
- gtk_marshal_VOID__POINTER_POINTER,
- G_TYPE_NONE, 2,
- GTK_TYPE_ADJUSTMENT,
- GTK_TYPE_ADJUSTMENT);
+ widget_class->set_scroll_adjustments_signal =
+ g_signal_new ("set_scroll_adjustments",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
+ NULL, NULL,
+ gtk_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2,
+ GTK_TYPE_ADJUSTMENT,
+ GTK_TYPE_ADJUSTMENT);
}
static void
rstto_picture_viewer_size_request(GtkWidget *widget, GtkRequisition *requisition)
{
- requisition->width = 100;
- requisition->height= 500;
+ requisition->width = 100;
+ requisition->height= 500;
}
static void
rstto_picture_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
- gint border_width = 0;
+ RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
+ gint border_width = 0;
widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget))
- {
- gdk_window_move_resize (widget->window,
- allocation->x + border_width,
- allocation->y + border_width,
- allocation->width - border_width * 2,
- allocation->height - border_width * 2);
- }
+ if (GTK_WIDGET_REALIZED (widget))
+ {
+ gdk_window_move_resize (widget->window,
+ allocation->x + border_width,
+ allocation->y + border_width,
+ allocation->width - border_width * 2,
+ allocation->height - border_width * 2);
+ }
- rstto_picture_viewer_refresh(viewer);
+ rstto_picture_viewer_refresh(viewer);
}
static void
rstto_picture_viewer_realize(GtkWidget *widget)
{
- g_return_if_fail (widget != NULL);
- g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
- GdkWindowAttr attributes;
- gint attributes_mask;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events (widget) |
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.event_mask = gtk_widget_get_events (widget) |
+ GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
widget->style = gtk_style_attach (widget->style, widget->window);
- gdk_window_set_user_data (widget->window, widget);
+ gdk_window_set_user_data (widget->window, widget);
- gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+ gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
}
static void
@@ -205,10 +211,10 @@
static gboolean
rstto_picture_viewer_expose(GtkWidget *widget, GdkEventExpose *event)
{
- rstto_picture_viewer_refresh(RSTTO_PICTURE_VIEWER(widget));
- rstto_picture_viewer_paint(widget);
+ rstto_picture_viewer_refresh(RSTTO_PICTURE_VIEWER(widget));
+ rstto_picture_viewer_paint(widget);
- return FALSE;
+ return FALSE;
}
static void
@@ -216,28 +222,28 @@
{
RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
GdkPixbuf *pixbuf = viewer->priv->dst_pixbuf;
- GdkColor color;
- GdkColor line_color;
+ GdkColor color;
+ GdkColor line_color;
- color.pixel = 0x0;
- line_color.pixel = 0x0;
+ color.pixel = 0x0;
+ line_color.pixel = 0x0;
gint i, a, height, width;
- /* required for transparent pixbufs... add double buffering to fix flickering*/
- if(GTK_WIDGET_REALIZED(widget))
- {
- GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
- GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
+ /* required for transparent pixbufs... add double buffering to fix flickering*/
+ if(GTK_WIDGET_REALIZED(widget))
+ {
+ GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
+ GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
- gdk_gc_set_foreground(gc, &color);
- gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
- if(pixbuf)
- {
- gint x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
- gint y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
- gint x2 = gdk_pixbuf_get_width(pixbuf);
- gint y2 = gdk_pixbuf_get_height(pixbuf);
+ gdk_gc_set_foreground(gc, &color);
+ gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
+ if(pixbuf)
+ {
+ gint x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
+ gint y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
+ gint x2 = gdk_pixbuf_get_width(pixbuf);
+ gint y2 = gdk_pixbuf_get_height(pixbuf);
/* We only need to paint a checkered background if the image is transparent */
if(gdk_pixbuf_get_has_alpha(pixbuf))
@@ -278,17 +284,17 @@
}
}
}
- gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
- NULL,
- pixbuf,
- 0,
- 0,
- x1,
- y1,
- x2,
- y2,
- GDK_RGB_DITHER_NONE,
- 0,0);
+ gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
+ NULL,
+ pixbuf,
+ 0,
+ 0,
+ x1,
+ y1,
+ x2,
+ y2,
+ GDK_RGB_DITHER_NONE,
+ 0,0);
if(viewer->priv->show_border)
{
gdk_gc_set_foreground(gc, &line_color);
@@ -298,18 +304,18 @@
gdk_draw_line(GDK_DRAWABLE(buffer), gc, x1+x2, y1, x1+x2, y1+y2);
}
- }
- gdk_draw_drawable(GDK_DRAWABLE(widget->window),
- gdk_gc_new(widget->window),
- buffer,
- 0,
- 0,
- 0,
- 0,
- widget->allocation.width,
- widget->allocation.height);
- g_object_unref(buffer);
- }
+ }
+ gdk_draw_drawable(GDK_DRAWABLE(widget->window),
+ gdk_gc_new(widget->window),
+ buffer,
+ 0,
+ 0,
+ 0,
+ 0,
+ widget->allocation.width,
+ widget->allocation.height);
+ g_object_unref(buffer);
+ }
}
static void
@@ -321,30 +327,30 @@
static void
rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *viewer, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
{
- if(viewer->hadjustment)
- {
- g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
- g_object_unref(viewer->hadjustment);
- }
- if(viewer->vadjustment)
- {
- g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
- g_object_unref(viewer->vadjustment);
- }
+ if(viewer->hadjustment)
+ {
+ g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
+ g_object_unref(viewer->hadjustment);
+ }
+ if(viewer->vadjustment)
+ {
+ g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
+ g_object_unref(viewer->vadjustment);
+ }
- viewer->hadjustment = hadjustment;
- viewer->vadjustment = vadjustment;
+ viewer->hadjustment = hadjustment;
+ viewer->vadjustment = vadjustment;
- if(viewer->hadjustment)
- {
- g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
- g_object_ref(viewer->hadjustment);
- }
- if(viewer->vadjustment)
- {
- g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
- g_object_ref(viewer->vadjustment);
- }
+ if(viewer->hadjustment)
+ {
+ g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
+ g_object_ref(viewer->hadjustment);
+ }
+ if(viewer->vadjustment)
+ {
+ g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
+ g_object_ref(viewer->vadjustment);
+ }
}
static void
@@ -379,24 +385,26 @@
}
GtkWidget *
-rstto_picture_viewer_new()
+rstto_picture_viewer_new(RsttoNavigator *navigator)
{
- GtkWidget *widget;
+ GtkWidget *widget;
- widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
+ widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
+ RSTTO_PICTURE_VIEWER(widget)->priv->navigator = navigator;
+ g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_picture_viewer_nav_file_changed), widget);
- return widget;
+ return widget;
}
void
rstto_picture_viewer_set_scale(RsttoPictureViewer *viewer, gdouble scale)
{
- g_return_if_fail(scale > 0);
+ g_return_if_fail(scale > 0);
viewer->priv->scale_fts = FALSE;
- viewer->priv->scale = scale;
+ viewer->priv->scale = scale;
- rstto_picture_viewer_refresh(viewer);
- rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+ rstto_picture_viewer_refresh(viewer);
+ rstto_picture_viewer_paint(GTK_WIDGET(viewer));
}
@@ -405,40 +413,40 @@
{
viewer->priv->scale_fts = TRUE;
- rstto_picture_viewer_refresh(viewer);
- rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+ rstto_picture_viewer_refresh(viewer);
+ rstto_picture_viewer_paint(GTK_WIDGET(viewer));
- return viewer->priv->scale;
+ return viewer->priv->scale;
}
gdouble
rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer)
{
- return viewer->priv->scale;
+ return viewer->priv->scale;
}
void
rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf)
{
- if(viewer->priv->src_pixbuf)
- g_object_unref(viewer->priv->src_pixbuf);
+ if(viewer->priv->src_pixbuf)
+ g_object_unref(viewer->priv->src_pixbuf);
- viewer->priv->src_pixbuf = pixbuf;
+ viewer->priv->src_pixbuf = pixbuf;
- if(viewer->priv->src_pixbuf)
- {
- g_object_ref(viewer->priv->src_pixbuf);
- rstto_picture_viewer_refresh(viewer);
- rstto_picture_viewer_paint(GTK_WIDGET(viewer));
- }
+ if(viewer->priv->src_pixbuf)
+ {
+ g_object_ref(viewer->priv->src_pixbuf);
+ rstto_picture_viewer_refresh(viewer);
+ rstto_picture_viewer_paint(GTK_WIDGET(viewer));
+ }
}
static void
rstto_picture_viewer_refresh(RsttoPictureViewer *viewer)
{
- GtkWidget *widget = GTK_WIDGET(viewer);
- if(viewer->priv->src_pixbuf)
- {
+ GtkWidget *widget = GTK_WIDGET(viewer);
+ if(viewer->priv->src_pixbuf)
+ {
if(viewer->priv->scale_fts)
{
@@ -451,67 +459,76 @@
else
viewer->priv->scale = v_scale;
}
- if(GTK_WIDGET_REALIZED(widget))
- {
- gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
- gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->priv->src_pixbuf);
-
- if(viewer->hadjustment)
- {
- viewer->hadjustment->page_size = widget->allocation.width;
- viewer->hadjustment->upper = width * viewer->priv->scale;
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->step_increment = 1;
- viewer->hadjustment->page_increment = 100;
- }
- if(viewer->vadjustment)
- {
- viewer->vadjustment->page_size = widget->allocation.height;
- viewer->vadjustment->upper = height * viewer->priv->scale;
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->step_increment = 1;
- viewer->vadjustment->page_increment = 100;
- }
+ if(GTK_WIDGET_REALIZED(widget))
+ {
+ gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
+ gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->priv->src_pixbuf);
+
+ if(viewer->hadjustment)
+ {
+ viewer->hadjustment->page_size = widget->allocation.width;
+ viewer->hadjustment->upper = width * viewer->priv->scale;
+ viewer->hadjustment->lower = 0;
+ viewer->hadjustment->step_increment = 1;
+ viewer->hadjustment->page_increment = 100;
+ }
+ if(viewer->vadjustment)
+ {
+ viewer->vadjustment->page_size = widget->allocation.height;
+ viewer->vadjustment->upper = height * viewer->priv->scale;
+ viewer->vadjustment->lower = 0;
+ viewer->vadjustment->step_increment = 1;
+ viewer->vadjustment->page_increment = 100;
+ }
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- gtk_adjustment_value_changed(viewer->hadjustment);
- }
+ if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+ {
+ viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+ gtk_adjustment_value_changed(viewer->vadjustment);
+ }
+ if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+ {
+ viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+ gtk_adjustment_value_changed(viewer->hadjustment);
+ }
- GdkPixbuf *tmp_pixbuf = NULL;
- tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->priv->src_pixbuf,
- viewer->hadjustment->value / viewer->priv->scale >= 0?
+ GdkPixbuf *tmp_pixbuf = NULL;
+ tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->priv->src_pixbuf,
+ viewer->hadjustment->value / viewer->priv->scale >= 0?
viewer->hadjustment->value / viewer->priv->scale : 0,
- viewer->vadjustment->value / viewer->priv->scale >= 0?
+ viewer->vadjustment->value / viewer->priv->scale >= 0?
viewer->vadjustment->value / viewer->priv->scale : 0,
- ((widget->allocation.width/viewer->priv->scale)) < width?
+ ((widget->allocation.width/viewer->priv->scale)) < width?
widget->allocation.width/viewer->priv->scale:width,
- ((widget->allocation.height/viewer->priv->scale))< height?
+ ((widget->allocation.height/viewer->priv->scale))< height?
widget->allocation.height/viewer->priv->scale:height);
- if(viewer->priv->dst_pixbuf)
- {
- g_object_unref(viewer->priv->dst_pixbuf);
- viewer->priv->dst_pixbuf = NULL;
- }
- viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->priv->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->priv->scale, GDK_INTERP_BILINEAR);
+ if(viewer->priv->dst_pixbuf)
+ {
+ g_object_unref(viewer->priv->dst_pixbuf);
+ viewer->priv->dst_pixbuf = NULL;
+ }
+ viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->priv->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->priv->scale, GDK_INTERP_BILINEAR);
- if(tmp_pixbuf)
- {
- g_object_unref(tmp_pixbuf);
- tmp_pixbuf = NULL;
- }
+ if(tmp_pixbuf)
+ {
+ g_object_unref(tmp_pixbuf);
+ tmp_pixbuf = NULL;
+ }
- gtk_adjustment_changed(viewer->hadjustment);
- gtk_adjustment_changed(viewer->vadjustment);
- }
- }
+ gtk_adjustment_changed(viewer->hadjustment);
+ gtk_adjustment_changed(viewer->vadjustment);
+ }
+ }
}
+
+static void
+cb_rstto_picture_viewer_nav_file_changed(RsttoNavigator *nav, RsttoPictureViewer *viewer)
+{
+ RsttoNavigatorEntry *entry = rstto_navigator_get_file(nav);
+ GdkPixbuf *pixbuf = rstto_navigator_entry_get_pixbuf(entry);
+
+ rstto_picture_viewer_set_pixbuf(viewer, pixbuf);
+}
Modified: ristretto/trunk/src/picture_viewer.h
===================================================================
--- ristretto/trunk/src/picture_viewer.h 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/picture_viewer.h 2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
#define RSTTO_PICTURE_VIEWER(obj)( \
G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RSTTO_TYPE_PICTURE_VIEWER, \
- RsttoPictureViewer))
+ RSTTO_TYPE_PICTURE_VIEWER, \
+ RsttoPictureViewer))
#define RSTTO_IS_PICTURE_VIEWER(obj)( \
G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RSTTO_TYPE_PICTURE_VIEWER))
+ RSTTO_TYPE_PICTURE_VIEWER))
#define RSTTO_PICTURE_VIEWER_CLASS(klass)( \
G_TYPE_CHECK_CLASS_CAST ((klass), \
- RSTTO_TYPE_PICTURE_VIEWER, \
- RsttoPictureViewerClass))
+ RSTTO_TYPE_PICTURE_VIEWER, \
+ RsttoPictureViewerClass))
#define RSTTO_IS_PICTURE_VIEWER_CLASS(klass)( \
G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RSTTO_TYPE_PICTURE_VIEWER()))
+ RSTTO_TYPE_PICTURE_VIEWER()))
typedef struct _RsttoPictureViewerPriv RsttoPictureViewerPriv;
@@ -45,27 +45,27 @@
struct _RsttoPictureViewer
{
- GtkWidget parent;
+ GtkWidget parent;
RsttoPictureViewerPriv *priv;
- GtkAdjustment *vadjustment;
- GtkAdjustment *hadjustment;
+ GtkAdjustment *vadjustment;
+ GtkAdjustment *hadjustment;
};
typedef struct _RsttoPictureViewerClass RsttoPictureViewerClass;
struct _RsttoPictureViewerClass
{
- GtkWidgetClass parent_class;
+ GtkWidgetClass parent_class;
void (* set_scroll_adjustments) (RsttoPictureViewer *viewer,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
};
GType rstto_picture_viewer_get_type();
-GtkWidget *rstto_picture_viewer_new();
+GtkWidget *rstto_picture_viewer_new(RsttoNavigator *navigator);
void rstto_picture_viewer_set_scale(RsttoPictureViewer *viewer, gdouble scale);
gdouble rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer);
gdouble rstto_picture_viewer_fit_scale(RsttoPictureViewer *viewer);
Modified: ristretto/trunk/src/thumbnail_viewer.c
===================================================================
--- ristretto/trunk/src/thumbnail_viewer.c 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/thumbnail_viewer.c 2007-08-19 13:40:45 UTC (rev 3006)
@@ -24,26 +24,10 @@
#include <pango/pango.h>
#include <pango/pangoxft.h>
-#include "picture_viewer.h"
#include "navigator.h"
+#include "picture_viewer.h"
#include "thumbnail_viewer.h"
-typedef struct _RsttoThumbnailViewerCache RsttoThumbnailViewerCache;
-
-struct _RsttoThumbnailViewerCache
-{
- gint begin;
- gint end;
- GSList *pixmaps;
-};
-
-static gboolean
-rstto_thumbnail_viewer_cache_add (RsttoThumbnailViewerCache *cache, GdkPixbuf *pixbuf, gint nr);
-static gboolean
-rstto_thumbnail_viewer_cache_remove (RsttoThumbnailViewerCache *cache, gint nr);
-static GdkPixbuf *
-rstto_thumbnail_viewer_cache_get_pixbuf (RsttoThumbnailViewerCache *cache, gint nr);
-
struct _RsttoThumbnailViewerPriv
{
GtkOrientation orientation;
@@ -51,7 +35,6 @@
gint dimension;
gint offset;
gboolean auto_center;
- RsttoThumbnailViewerCache *cache;
};
static void
@@ -83,27 +66,27 @@
GType
rstto_thumbnail_viewer_get_type ()
{
- static GType rstto_thumbnail_viewer_type = 0;
+ static GType rstto_thumbnail_viewer_type = 0;
- if (!rstto_thumbnail_viewer_type)
- {
- static const GTypeInfo rstto_thumbnail_viewer_info =
- {
- sizeof (RsttoThumbnailViewerClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) rstto_thumbnail_viewer_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (RsttoThumbnailViewer),
- 0,
- (GInstanceInitFunc) rstto_thumbnail_viewer_init,
- NULL
- };
+ if (!rstto_thumbnail_viewer_type)
+ {
+ static const GTypeInfo rstto_thumbnail_viewer_info =
+ {
+ sizeof (RsttoThumbnailViewerClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) rstto_thumbnail_viewer_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (RsttoThumbnailViewer),
+ 0,
+ (GInstanceInitFunc) rstto_thumbnail_viewer_init,
+ NULL
+ };
- rstto_thumbnail_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoThumbnailViewer", &rstto_thumbnail_viewer_info, 0);
- }
- return rstto_thumbnail_viewer_type;
+ rstto_thumbnail_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoThumbnailViewer", &rstto_thumbnail_viewer_info, 0);
+ }
+ return rstto_thumbnail_viewer_type;
}
@@ -111,11 +94,7 @@
rstto_thumbnail_viewer_init(RsttoThumbnailViewer *viewer)
{
viewer->priv = g_new0(RsttoThumbnailViewerPriv, 1);
- viewer->priv->cache = g_new0(RsttoThumbnailViewerCache, 1);
- viewer->priv->cache->begin = -1;
- viewer->priv->cache->end = -1;
-
viewer->priv->auto_center = TRUE;
gtk_widget_set_redraw_on_allocate(GTK_WIDGET(viewer), TRUE);
@@ -129,21 +108,21 @@
static void
rstto_thumbnail_viewer_class_init(RsttoThumbnailViewerClass *viewer_class)
{
- GtkWidgetClass *widget_class;
- GtkObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkObjectClass *object_class;
- widget_class = (GtkWidgetClass*)viewer_class;
- object_class = (GtkObjectClass*)viewer_class;
+ widget_class = (GtkWidgetClass*)viewer_class;
+ object_class = (GtkObjectClass*)viewer_class;
- parent_class = g_type_class_peek_parent(viewer_class);
+ parent_class = g_type_class_peek_parent(viewer_class);
- widget_class->realize = rstto_thumbnail_viewer_realize;
- widget_class->expose_event = rstto_thumbnail_viewer_expose;
+ widget_class->realize = rstto_thumbnail_viewer_realize;
+ widget_class->expose_event = rstto_thumbnail_viewer_expose;
- widget_class->size_request = rstto_thumbnail_viewer_size_request;
- widget_class->size_allocate = rstto_thumbnail_viewer_size_allocate;
+ widget_class->size_request = rstto_thumbnail_viewer_size_request;
+ widget_class->size_allocate = rstto_thumbnail_viewer_size_allocate;
- object_class->destroy = rstto_thumbnail_viewer_destroy;
+ object_class->destroy = rstto_thumbnail_viewer_destroy;
}
static void
@@ -165,7 +144,7 @@
rstto_thumbnail_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
{
RsttoThumbnailViewer *viewer = RSTTO_THUMBNAIL_VIEWER(widget);
- gint border_width = 0;
+ gint border_width = 0;
widget->allocation = *allocation;
switch(viewer->priv->orientation)
@@ -179,46 +158,46 @@
}
- if (GTK_WIDGET_REALIZED (widget))
- {
- gdk_window_move_resize (widget->window,
- allocation->x + border_width,
- allocation->y + border_width,
- allocation->width - border_width * 2,
- allocation->height - border_width * 2);
+ if (GTK_WIDGET_REALIZED (widget))
+ {
+ gdk_window_move_resize (widget->window,
+ allocation->x + border_width,
+ allocation->y + border_width,
+ allocation->width - border_width * 2,
+ allocation->height - border_width * 2);
- }
+ }
}
static void
rstto_thumbnail_viewer_realize(GtkWidget *widget)
{
- g_return_if_fail (widget != NULL);
- g_return_if_fail (RSTTO_IS_THUMBNAIL_VIEWER(widget));
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (RSTTO_IS_THUMBNAIL_VIEWER(widget));
- GdkWindowAttr attributes;
- gint attributes_mask;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+ GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events (widget) |
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.event_mask = gtk_widget_get_events (widget) |
+ GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
+ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+ widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
widget->style = gtk_style_attach (widget->style, widget->window);
- gdk_window_set_user_data (widget->window, widget);
+ gdk_window_set_user_data (widget->window, widget);
- gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
+ gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
}
static gboolean
@@ -226,31 +205,31 @@
{
RsttoThumbnailViewer *viewer = RSTTO_THUMBNAIL_VIEWER(widget);
- if (GTK_WIDGET_REALIZED (viewer))
- {
+ if (GTK_WIDGET_REALIZED (viewer))
+ {
rstto_thumbnail_viewer_paint(viewer);
}
- return FALSE;
+ return FALSE;
}
static void
rstto_thumbnail_viewer_paint(RsttoThumbnailViewer *viewer)
{
GtkWidget *widget = GTK_WIDGET(viewer);
- GdkColor color;
+ GdkColor color;
RsttoNavigatorEntry *current_entry = rstto_navigator_get_file(viewer->priv->navigator);
color.pixel = 0xffffffff;
- GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
- GdkGC *gc_bg_normal = gdk_gc_new(GDK_DRAWABLE(widget->window));
- GdkGC *gc_bg_selected = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ GdkGC *gc_bg_normal = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ GdkGC *gc_bg_selected = gdk_gc_new(GDK_DRAWABLE(widget->window));
- gdk_gc_set_foreground(gc, &color);
- gdk_gc_set_foreground(gc_bg_selected,
+ gdk_gc_set_foreground(gc, &color);
+ gdk_gc_set_foreground(gc_bg_selected,
&(widget->style->bg[GTK_STATE_SELECTED]));
- gdk_gc_set_foreground(gc_bg_normal,
+ gdk_gc_set_foreground(gc_bg_normal,
&(widget->style->bg[GTK_STATE_NORMAL]));
gint i;
@@ -287,29 +266,12 @@
}
GdkPixmap *pixmap = NULL;
- /* Cleanup_cache */
- for (i = viewer->priv->cache->begin; i < begin; i++)
- {
- rstto_thumbnail_viewer_cache_remove(viewer->priv->cache, i);
- }
- for (i = end; i < viewer->priv->cache->end; i++)
- {
- rstto_thumbnail_viewer_cache_remove(viewer->priv->cache, i);
- }
-
for(i = begin; i <= end; ++i)
{
RsttoNavigatorEntry *entry = rstto_navigator_get_nth_file(viewer->priv->navigator, i);
if (entry)
{
- ThunarVfsInfo *info = rstto_navigator_entry_get_info(entry);
- gchar *filename = thunar_vfs_path_dup_string(info->path);
- GdkPixbuf *pixbuf = rstto_thumbnail_viewer_cache_get_pixbuf(viewer->priv->cache, i);
- if(!pixbuf)
- {
- pixbuf = gdk_pixbuf_new_from_file_at_size(filename, viewer->priv->dimension - 8, viewer->priv->dimension - 8, NULL);
- rstto_thumbnail_viewer_cache_add(viewer->priv->cache, pixbuf, i);
- }
+ GdkPixbuf *pixbuf = rstto_navigator_entry_get_thumb(entry, viewer->priv->dimension - 8);
pixmap = gdk_pixmap_new(widget->window, viewer->priv->dimension, viewer->priv->dimension, -1);
gdk_draw_rectangle(GDK_DRAWABLE(pixmap),
@@ -452,23 +414,23 @@
GtkWidget *
rstto_thumbnail_viewer_new(RsttoNavigator *navigator)
{
- RsttoThumbnailViewer *viewer;
+ RsttoThumbnailViewer *viewer;
- viewer = g_object_new(RSTTO_TYPE_THUMBNAIL_VIEWER, NULL);
+ viewer = g_object_new(RSTTO_TYPE_THUMBNAIL_VIEWER, NULL);
viewer->priv->navigator = navigator;
- g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_thumbnailer_nav_file_changed), viewer);
+ g_signal_connect(G_OBJECT(navigator), "file_changed", G_CALLBACK(cb_rstto_thumbnailer_nav_file_changed), viewer);
- return (GtkWidget *)viewer;
+ return (GtkWidget *)viewer;
}
static void
cb_rstto_thumbnailer_nav_file_changed(RsttoNavigator *nav, RsttoThumbnailViewer *viewer)
{
GtkWidget *widget = GTK_WIDGET(viewer);
- if (GTK_WIDGET_REALIZED (viewer))
- {
+ if (GTK_WIDGET_REALIZED (viewer))
+ {
if(viewer->priv->auto_center)
{
gint nr = rstto_navigator_get_position(nav);
@@ -572,69 +534,3 @@
{
return viewer->priv->orientation;
}
-
-static gboolean
-rstto_thumbnail_viewer_cache_add (RsttoThumbnailViewerCache *cache, GdkPixbuf *pixbuf, gint nr)
-{
- if (cache->begin == -1)
- {
- cache->begin = nr;
- cache->end = nr;
-
- cache->pixmaps = g_slist_prepend(cache->pixmaps, pixbuf);
- return TRUE;
- }
- else
- {
- if (nr == cache->begin-1)
- {
- cache->pixmaps = g_slist_prepend(cache->pixmaps, pixbuf);
- cache->begin--;
- return TRUE;
- }
- if (nr == cache->end+1)
- {
- cache->pixmaps = g_slist_append(cache->pixmaps, pixbuf);
- cache->end++;
- return TRUE;
- }
- }
- g_print("aargh: %d\n", nr);
- return FALSE;
-}
-
-static gboolean
-rstto_thumbnail_viewer_cache_remove (RsttoThumbnailViewerCache *cache, gint nr)
-{
- g_return_val_if_fail(nr >= 0, FALSE);
- if (nr == cache->begin)
- {
- g_object_unref(cache->pixmaps->data);
- cache->pixmaps = g_slist_delete_link(cache->pixmaps, cache->pixmaps);
- cache->begin++;
- }
- else
- {
- if (nr == cache->end)
- {
- GSList *element = g_slist_last(cache->pixmaps);
- g_object_unref(cache->pixmaps->data);
- cache->pixmaps = g_slist_delete_link(cache->pixmaps, element);
- cache->end--;
- }
- }
- if (!g_slist_length(cache->pixmaps))
- {
- cache->begin = -1;
- cache->end = -1;
- }
- return TRUE;
-}
-
-static GdkPixbuf *
-rstto_thumbnail_viewer_cache_get_pixbuf (RsttoThumbnailViewerCache *cache, gint nr)
-{
- if ((nr >= cache->begin) && (nr <= cache->end))
- return g_slist_nth_data(cache->pixmaps, nr - cache->begin);
- return NULL;
-}
Modified: ristretto/trunk/src/thumbnail_viewer.h
===================================================================
--- ristretto/trunk/src/thumbnail_viewer.h 2007-08-19 12:39:15 UTC (rev 3005)
+++ ristretto/trunk/src/thumbnail_viewer.h 2007-08-19 13:40:45 UTC (rev 3006)
@@ -23,21 +23,21 @@
#define RSTTO_THUMBNAIL_VIEWER(obj)( \
G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RSTTO_TYPE_THUMBNAIL_VIEWER, \
- RsttoThumbnailViewer))
+ RSTTO_TYPE_THUMBNAIL_VIEWER, \
+ RsttoThumbnailViewer))
#define RSTTO_IS_THUMBNAIL_VIEWER(obj)( \
G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RSTTO_TYPE_THUMBNAIL_VIEWER))
+ RSTTO_TYPE_THUMBNAIL_VIEWER))
#define RSTTO_THUMBNAIL_VIEWER_CLASS(klass)( \
G_TYPE_CHECK_CLASS_CAST ((klass), \
- RSTTO_TYPE_THUMBNAIL_VIEWER, \
- RsttoThumbnailViewerClass))
+ RSTTO_TYPE_THUMBNAIL_VIEWER, \
+ RsttoThumbnailViewerClass))
#define RSTTO_IS_THUMBNAIL_VIEWER_CLASS(klass)( \
G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RSTTO_TYPE_THUMBNAIL_VIEWER()))
+ RSTTO_TYPE_THUMBNAIL_VIEWER()))
typedef struct _RsttoThumbnailViewerPriv RsttoThumbnailViewerPriv;
@@ -45,7 +45,7 @@
struct _RsttoThumbnailViewer
{
- GtkWidget parent;
+ GtkWidget parent;
RsttoThumbnailViewerPriv *priv;
};
@@ -53,7 +53,7 @@
struct _RsttoThumbnailViewerClass
{
- GtkWidgetClass parent_class;
+ GtkWidgetClass parent_class;
};
GType rstto_thumbnail_viewer_get_type();
More information about the Goodies-commits
mailing list