/** * uni_image_view_set_pixbuf: * @view: A #UniImageView. * @pixbuf: The pixbuf to display. * @reset_fit: Whether to reset fitting or not. * * Sets the @pixbuf to display, or %NULL to not display any pixbuf. * Normally, @reset_fit should be %TRUE which enables fitting. Which * means that, initially, the whole pixbuf will be shown. * * Sometimes, the fit mode should not be reset. For example, if * UniImageView is showing an animation, it would be bad to reset the * fit mode for each new frame. The parameter should then be %FALSE * which leaves the fit mode of the view untouched. * * This method should not be used if merely the contents of the pixbuf * has changed. See uni_image_view_damage_pixels() for that. * * If @reset_fit is %TRUE, the ::zoom-changed signal is emitted, * otherwise not. The ::pixbuf-changed signal is also emitted. * * The default pixbuf is %NULL. **/ void uni_image_view_set_pixbuf (UniImageView * view, GdkPixbuf * pixbuf, gboolean reset_fit) { if (view->pixbuf != pixbuf) { if (view->pixbuf) g_object_unref (view->pixbuf); view->pixbuf = pixbuf; if (view->pixbuf) g_object_ref (pixbuf); } if (reset_fit) uni_image_view_set_fitting (view, UNI_FITTING_NORMAL); else { /* If the size of the pixbuf changes, the offset might point to pixels outside it so we use uni_image_view_scroll_to() to make it valid again. And if the size is different, naturally we must also update the adjustments. */ uni_image_view_scroll_to (view, view->offset_x, view->offset_y, FALSE, FALSE); uni_image_view_update_adjustments (view); gtk_widget_queue_draw (GTK_WIDGET (view)); } g_signal_emit (G_OBJECT (view), uni_image_view_signals[PIXBUF_CHANGED], 0); uni_dragger_pixbuf_changed (UNI_DRAGGER(view->tool), reset_fit, NULL); }
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; }
void uni_image_view_set_zoom_mode (UniImageView * view, VnrPrefsZoom mode) { switch(mode) { case VNR_PREFS_ZOOM_NORMAL: uni_image_view_set_fitting(view, UNI_FITTING_NONE); //view->zoom = 1.0; uni_image_view_set_zoom (view, 1.0); break; case VNR_PREFS_ZOOM_FIT: uni_image_view_set_fitting(view, UNI_FITTING_FULL); break; case VNR_PREFS_ZOOM_SMART: uni_image_view_set_fitting(view, UNI_FITTING_NORMAL); break; default: break; } }