static int uni_image_view_button_press (GtkWidget * widget, GdkEventButton * ev) { gtk_widget_grab_focus(widget); UniImageView *view = UNI_IMAGE_VIEW (widget); VnrWindow *vnr_win = VNR_WINDOW(gtk_widget_get_toplevel(widget)); g_assert(gtk_widget_is_toplevel(GTK_WIDGET(vnr_win))); if(ev->type == GDK_2BUTTON_PRESS && ev->button == 1 && vnr_win->prefs->behavior_click == VNR_PREFS_CLICK_FULLSCREEN) { vnr_window_toggle_fullscreen(vnr_win); return 1; } else if(ev->type == GDK_2BUTTON_PRESS && ev->button == 1 && vnr_win->prefs->behavior_click == VNR_PREFS_CLICK_NEXT) { int width; gdk_drawable_get_size(GDK_DRAWABLE(widget->window), &width, NULL); if(ev->x/width < 0.5) vnr_window_prev(vnr_win); else vnr_window_next(vnr_win, TRUE); return 1; } else if (ev->type == GDK_BUTTON_PRESS && ev->button == 1) { return uni_dragger_button_press (UNI_DRAGGER(view->tool), ev); } else if (ev->type == GDK_2BUTTON_PRESS && ev->button == 1) { if (view->fitting == UNI_FITTING_FULL || (view->fitting == UNI_FITTING_NORMAL && view->zoom != 1.0)) uni_image_view_set_zoom_with_center (view, 1., ev->x, ev->y, FALSE); else uni_image_view_set_fitting (view, UNI_FITTING_FULL); return 1; } else if(ev->type == GDK_BUTTON_PRESS && ev->button == 3) { gtk_menu_popup(GTK_MENU(VNR_WINDOW(gtk_widget_get_toplevel (widget))->popup_menu), NULL, NULL, NULL, NULL, ev->button, gtk_get_current_event_time()); } else if(ev->type == GDK_BUTTON_PRESS && ev->button == 8) { vnr_window_prev(vnr_win); } else if(ev->type == GDK_BUTTON_PRESS && ev->button == 9) { vnr_window_next(vnr_win, TRUE); } return 0; }
static void toggle_smooth_images_cb (GtkToggleButton *togglebutton, gpointer user_data) { VNR_PREFS(user_data)->smooth_images = gtk_toggle_button_get_active(togglebutton); vnr_prefs_save(VNR_PREFS(user_data)); vnr_window_apply_preferences(VNR_WINDOW(VNR_PREFS(user_data)->vnr_win)); }
static void change_spin_value_cb (GtkSpinButton *spinbutton, gpointer user_data) { int new_value; new_value = gtk_spin_button_get_value_as_int (spinbutton); VNR_PREFS(user_data)->slideshow_timeout = new_value; vnr_prefs_save(VNR_PREFS(user_data)); vnr_window_apply_preferences(VNR_WINDOW(VNR_PREFS(user_data)->vnr_win)); }
static int uni_image_view_scroll_event (GtkWidget * widget, GdkEventScroll * ev) { gdouble zoom; UniImageView *view = UNI_IMAGE_VIEW (widget); VnrWindow *vnr_win = VNR_WINDOW(gtk_widget_get_toplevel(widget)); g_assert(gtk_widget_is_toplevel(GTK_WIDGET(vnr_win))); /* Horizontal scroll left is equivalent to scroll up and right is * like scroll down. No idea if that is correct -- I have no input * device that can do horizontal scrolls. */ if (vnr_win->prefs->behavior_wheel == VNR_PREFS_WHEEL_ZOOM || (ev->state & GDK_CONTROL_MASK) != 0) { if ( ev->direction == GDK_SCROLL_UP || ev->direction == GDK_SCROLL_LEFT ) zoom = CLAMP (view->zoom * UNI_ZOOM_STEP, UNI_ZOOM_MIN, UNI_ZOOM_MAX); else zoom = CLAMP (view->zoom / UNI_ZOOM_STEP, UNI_ZOOM_MIN, UNI_ZOOM_MAX); uni_image_view_set_zoom_with_center (view, zoom, ev->x, ev->y, FALSE); } else if(vnr_win->prefs->behavior_wheel == VNR_PREFS_WHEEL_NAVIGATE) { if (ev->direction == GDK_SCROLL_UP || ev->direction == GDK_SCROLL_LEFT) vnr_window_prev(vnr_win); else vnr_window_next(vnr_win, TRUE); } else { switch (ev->direction) { case GDK_SCROLL_UP: uni_image_view_scroll (view, GTK_SCROLL_NONE, GTK_SCROLL_PAGE_UP); break; case GDK_SCROLL_LEFT: uni_image_view_scroll (view, GTK_SCROLL_PAGE_LEFT, GTK_SCROLL_NONE); break; case GDK_SCROLL_RIGHT: uni_image_view_scroll (view, GTK_SCROLL_PAGE_RIGHT, GTK_SCROLL_NONE); break; default: uni_image_view_scroll (view, GTK_SCROLL_NONE, GTK_SCROLL_PAGE_DOWN); break; } } return TRUE; }
int main (int argc, char *argv[]) { GError *error = NULL; GOptionContext *opt_context; GtkWindow *window; GSList *uri_list = NULL; GList *file_list = NULL; bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); opt_context = g_option_context_new ("- Elegant Image Viewer"); g_option_context_add_main_entries (opt_context, opt_entries, NULL); g_option_context_add_group (opt_context, gtk_get_option_group (TRUE)); g_option_context_parse (opt_context, &argc, &argv, &error); if (error != NULL) { printf ("%s\nRun 'viewnior --help' to see a full list of available command line options.\n", error->message); return 1; } else if(version) { printf("%s\n", PACKAGE_STRING); return 0; } gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), PIXMAP_DIR); window = vnr_window_new (); gtk_window_set_default_size (window, 480, 300); gtk_window_set_position (window, GTK_WIN_POS_CENTER); uri_list = vnr_tools_get_list_from_array (files); if(uri_list != NULL) { if (g_slist_length(uri_list) == 1) { vnr_file_load_single_uri (uri_list->data, &file_list, VNR_WINDOW(window)->prefs->show_hidden, &error); } else { vnr_file_load_uri_list (uri_list, &file_list, VNR_WINDOW(window)->prefs->show_hidden, &error); } if(error != NULL && file_list != NULL) { deny_slideshow(VNR_WINDOW(window)); vnr_message_area_show(VNR_MESSAGE_AREA (VNR_WINDOW(window)->msg_area), TRUE, error->message, TRUE); vnr_window_set_list(VNR_WINDOW(window), file_list, TRUE); } else if(error != NULL) { deny_slideshow(VNR_WINDOW(window)); vnr_message_area_show(VNR_MESSAGE_AREA (VNR_WINDOW(window)->msg_area), TRUE, error->message, TRUE); } else if(file_list == NULL) { deny_slideshow(VNR_WINDOW(window)); vnr_message_area_show(VNR_MESSAGE_AREA (VNR_WINDOW(window)->msg_area), TRUE, _("The given locations contain no images."), TRUE); } else { vnr_window_set_list(VNR_WINDOW(window), file_list, TRUE); } } VNR_WINDOW(window)->prefs->start_slideshow = slideshow; VNR_WINDOW(window)->prefs->start_fullscreen = fullscreen; if ( VNR_WINDOW(window)->prefs->start_maximized ) { gtk_window_maximize(window); } gtk_widget_show (GTK_WIDGET (window)); gtk_main (); return 0; }