Mercurial > geeqie.yaz
diff src/pan-view.c @ 23:17acca639a86
##### Note: GQview CVS on sourceforge is not always up to date, please use #####
##### an offical release when making enhancements and translation updates. #####
Fri Mar 18 19:52:38 2005 John Ellis <johne@verizon.net>
* pixbuf-renderer.c: Fix broken 2pass queueing so it merges a single
queue item for each tile, and now that a tile holds a queue pointer
there is no need to walk the tile list to find a possible merge victim.
Thu Mar 17 19:23:56 2005 John Ellis <johne@verizon.net>
* image.c, pixbuf-renderer.[ch]: More progress, and 2 pass zoom now
works again (mostly).
Tue Mar 15 23:17:41 2005 John Ellis <johne@verizon.net>
* image.[ch]: Start conversion to use of PixbufRenderer.
* pixbuf-renderer.[ch]: Additions and fixes for use by ImageWindow.
* fullscreen.c, image-overlay.c, img-view.c, info.c, layout.c,
layout_image.c, print.c: Changes for above ImageWindow conversion.
* typedefs.h: Remove unused ImageWindow variables.
Mon Mar 14 20:45:50 2005 John Ellis <johne@verizon.net>
* pan-view.c: Convert to using new PixbufRenderer.
* pixbuf-renderer.[ch]: Clean up and fixes.
Sun Mar 13 10:21:35 2005 John Ellis <johne@verizon.net>
* image.c (image_scroller_start): Unref scroller pixbuf after adding it
as an overlay to avoid leaking it.
* pixbuf-renderer.[ch]: All functions defined in header file are now
implemented.
Fri Mar 11 17:05:36 2005 John Ellis <johne@verizon.net>
* pixbuf-renderer.[ch]: Set up object properties and additional.
Mar 10 19:22:18 2005 John Ellis <johne@verizon.net>
* pixbuf-renderer.[ch]: FIx scrolling to use old method of gdk_draw and
not gdk_scroll, as scroll often invalidates the entire window (!). Also
merged in source tiles code from image.c.
* pan-view.c: Change picked up when testing PixbufRender zoom.
Tue Mar 8 23:26:00 2005 John Ellis <johne@verizon.net>
* pixbuf-renderer.[ch]: Start of turning image drawing portion of
ImageWindow into an actual GtkWidget.
* src/Makefile.am: Add pixbuf-renderer.[ch].
* pan-view.c: Added temporary hack button and callback for testing
PixbufRenderer widget.
author | gqview |
---|---|
date | Sat, 19 Mar 2005 01:15:17 +0000 |
parents | b542e45eb053 |
children | 104e34f9ab1f |
line wrap: on
line diff
--- a/src/pan-view.c Sat Mar 05 21:40:46 2005 +0000 +++ b/src/pan-view.c Sat Mar 19 01:15:17 2005 +0000 @@ -18,11 +18,11 @@ #include "editors.h" #include "filelist.h" #include "fullscreen.h" -#include "image.h" #include "image-load.h" #include "img-view.h" #include "info.h" #include "menu.h" +#include "pixbuf-renderer.h" #include "pixbuf_util.h" #include "thumb.h" #include "utilops.h" @@ -180,8 +180,8 @@ struct _PanWindow { GtkWidget *window; - ImageWindow *imd; - ImageWindow *imd_normal; + PixbufRenderer *pr; + PixbufRenderer *pr_normal; FullScreenData *fs; GtkWidget *path_entry; @@ -242,7 +242,6 @@ static GtkWidget *pan_popup_menu(PanWindow *pw); static void pan_fullscreen_toggle(PanWindow *pw, gint force_off); -static void pan_overlay_toggle(PanWindow *pw); static void pan_window_close(PanWindow *pw); @@ -1079,7 +1078,7 @@ pi->color_b = b; pi->color_a = a; - pan_item_text_compute_size(pi, pw->imd->widget); + pan_item_text_compute_size(pi, (GtkWidget *)pw->pr); pw->list = g_list_prepend(pw->list, pi); @@ -1100,7 +1099,7 @@ static void pan_item_added(PanWindow *pw, PanItem *pi) { if (!pi) return; - image_area_changed(pw->imd, pi->x, pi->y, pi->width, pi->height); + pixbuf_renderer_area_changed(pw->pr, pi->x, pi->y, pi->width, pi->height); } static void pan_item_remove(PanWindow *pw, PanItem *pi) @@ -1113,7 +1112,7 @@ pw->queue = g_list_remove(pw->queue, pi); pw->list = g_list_remove(pw->list, pi); - image_area_changed(pw->imd, pi->x, pi->y, pi->width, pi->height); + pixbuf_renderer_area_changed(pw->pr, pi->x, pi->y, pi->width, pi->height); pan_item_free(pi); } @@ -1273,9 +1272,6 @@ { GList *work; - if (x < 0 || x >= pw->imd->image_width || - y < 0 || y >= pw->imd->image_height) return NULL; - work = pw->list; while (work) { @@ -1893,9 +1889,9 @@ y = pi_day->y; #if 0 - if (y + grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_FOLDER_BOX_BORDER * 4 > pw->imd->image_height) + if (y + grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_FOLDER_BOX_BORDER * 4 > pw->pr->image_height) { - y = pw->imd->image_height - (grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_FOLDER_BOX_BORDER * 4); + y = pw->pr->image_height - (grid * (PAN_THUMB_SIZE + PAN_THUMB_GAP) + PAN_FOLDER_BOX_BORDER * 4); } #endif @@ -2486,7 +2482,7 @@ pi->pixbuf = thumb_loader_get_pixbuf(tl, TRUE); rc = pi->refcount; - image_area_changed(pw->imd, pi->x, pi->y, pi->width, pi->height); + pixbuf_renderer_area_changed(pw->pr, pi->x, pi->y, pi->width, pi->height); pi->refcount = rc; } @@ -2527,7 +2523,7 @@ } rc = pi->refcount; - image_area_changed(pw->imd, pi->x, pi->y, pi->width, pi->height); + pixbuf_renderer_area_changed(pw->pr, pi->x, pi->y, pi->width, pi->height); pi->refcount = rc; } @@ -2557,7 +2553,7 @@ } rc = pi->refcount; - image_area_changed(pw->imd, pi->x + x, pi->y + y, width, height); + pixbuf_renderer_area_changed(pw->pr, pi->x + x, pi->y + y, width, height); pi->refcount = rc; } } @@ -2644,8 +2640,8 @@ if (!pw->tl && !pw->il) while(pan_layout_queue_step(pw)); } -static gint pan_window_request_tile_cb(ImageWindow *imd, gint x, gint y, gint width, gint height, - GdkPixbuf *pixbuf, gpointer data) +static gint pan_window_request_tile_cb(PixbufRenderer *pr, gint x, gint y, + gint width, gint height, GdkPixbuf *pixbuf, gpointer data) { PanWindow *pw = data; GList *list; @@ -2959,8 +2955,8 @@ { PangoLayout *layout; - layout = pan_item_text_layout(pi, imd->image); - pixbuf_draw_layout(pixbuf, layout, imd->image, + layout = pan_item_text_layout(pi, (GtkWidget *)pr); + pixbuf_draw_layout(pixbuf, layout, (GtkWidget *)pr, pi->x - x + PAN_TEXT_BORDER_SIZE, pi->y - y + PAN_TEXT_BORDER_SIZE, pi->color_r, pi->color_g, pi->color_b, pi->color_a); g_object_unref(G_OBJECT(layout)); @@ -2972,42 +2968,28 @@ { static gint count = 0; PangoLayout *layout; - gint lx, ly; - gint lw, lh; - GdkPixmap *pixmap; gchar *buf; - layout = gtk_widget_create_pango_layout(imd->image, NULL); + layout = gtk_widget_create_pango_layout((GtkWidget *)pr, NULL); buf = g_strdup_printf("%d,%d\n(#%d)", x, y, - (x / imd->source_tile_width) + - (y / imd->source_tile_height * (imd->image_width/imd->source_tile_width + 1))); + (x / pr->source_tile_width) + + (y / pr->source_tile_height * (pr->image_width/pr->source_tile_width + 1))); pango_layout_set_text(layout, buf, -1); g_free(buf); - pango_layout_get_pixel_size(layout, &lw, &lh); - - pixmap = gdk_pixmap_new(imd->widget->window, lw, lh, -1); - gdk_draw_rectangle(pixmap, imd->widget->style->black_gc, TRUE, 0, 0, lw, lh); - gdk_draw_layout(pixmap, imd->widget->style->white_gc, 0, 0, layout); + pixbuf_draw_layout(pixbuf, layout, (GtkWidget *)pr, 0, 0, 0, 0, 0, 255); + g_object_unref(G_OBJECT(layout)); - lx = MAX(0, width / 2 - lw / 2); - ly = MAX(0, height / 2 - lh / 2); - lw = MIN(lw, width - lx); - lh = MIN(lh, height - ly); - gdk_pixbuf_get_from_drawable(pixbuf, pixmap, gdk_drawable_get_colormap(imd->image->window), - 0, 0, lx, ly, lw, lh); - g_object_unref(pixmap); - count++; } return TRUE; } -static void pan_window_dispose_tile_cb(ImageWindow *imd, gint x, gint y, gint width, gint height, - GdkPixbuf *pixbuf, gpointer data) +static void pan_window_dispose_tile_cb(PixbufRenderer *pr, gint x, gint y, + gint width, gint height, GdkPixbuf *pixbuf, gpointer data) { PanWindow *pw = data; GList *list; @@ -3112,11 +3094,13 @@ g_free(buf); } -static ImageWindow *pan_window_active_image(PanWindow *pw) +static PixbufRenderer *pan_window_active_image(PanWindow *pw) { +#if 0 if (pw->fs) return pw->fs->imd; - - return pw->imd; +#endif + + return pw->pr; } static void pan_window_zoom_limit(PanWindow *pw) @@ -3149,7 +3133,7 @@ break; } - image_zoom_set_limits(pw->imd, min, 32.0); + pixbuf_renderer_zoom_set_limits(pw->pr, min, 32.0); } static gint pan_window_layout_update_idle_cb(gpointer data) @@ -3203,10 +3187,10 @@ { gdouble align; - image_set_image_as_tiles(pw->imd, width, height, - PAN_TILE_SIZE, PAN_TILE_SIZE, 8, - pan_window_request_tile_cb, - pan_window_dispose_tile_cb, pw, 1.0); + pixbuf_renderer_set_tiles(pw->pr, width, height, + PAN_TILE_SIZE, PAN_TILE_SIZE, 10, + pan_window_request_tile_cb, + pan_window_dispose_tile_cb, pw, 1.0); if (scroll_x == 0 && scroll_y == 0) { @@ -3216,7 +3200,7 @@ { align = 0.5; } - image_scroll_to_point(pw->imd, scroll_x, scroll_y, align, align); + pixbuf_renderer_scroll_to_point(pw->pr, scroll_x, scroll_y, align, align); } pan_window_message(pw, NULL); @@ -3250,17 +3234,17 @@ static void pan_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer data) { PanWindow *pw = data; - ImageWindow *imd; - - imd = pan_window_active_image(pw); - gdk_window_get_origin(imd->image->window, x, y); + PixbufRenderer *pr; + + pr = pan_window_active_image(pw); + gdk_window_get_origin(GTK_WIDGET(pr)->window, x, y); popup_menu_position_clamp(menu, x, y, 0); } static gint pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) { PanWindow *pw = data; - ImageWindow *imd; + PixbufRenderer *pr; const gchar *path; gint stop_signal = FALSE; GtkWidget *menu; @@ -3268,11 +3252,11 @@ gint y = 0; gint focused; - focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(pw->imd->widget)); - - imd = pan_window_active_image(pw); + pr = pan_window_active_image(pw); path = pan_menu_click_path(pw); + focused = (pw->fs || GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(pr))); + if (focused) { switch (event->keyval) @@ -3294,16 +3278,16 @@ stop_signal = TRUE; break; case GDK_Page_Up: case GDK_KP_Page_Up: - image_scroll(imd, 0, 0-imd->vis_height / 2); + pixbuf_renderer_scroll(pr, 0, 0 - pr->vis_height / 2); break; case GDK_Page_Down: case GDK_KP_Page_Down: - image_scroll(imd, 0, imd->vis_height / 2); + pixbuf_renderer_scroll(pr, 0, pr->vis_height / 2); break; case GDK_Home: case GDK_KP_Home: - image_scroll(imd, 0-imd->vis_width / 2, 0); + pixbuf_renderer_scroll(pr, 0 - pr->vis_width / 2, 0); break; case GDK_End: case GDK_KP_End: - image_scroll(imd, imd->vis_width / 2, 0); + pixbuf_renderer_scroll(pr, pr->vis_width / 2, 0); break; } } @@ -3312,31 +3296,31 @@ switch (event->keyval) { case '+': case '=': case GDK_KP_Add: - image_zoom_adjust(imd, ZOOM_INCREMENT); + pixbuf_renderer_zoom_adjust(pr, ZOOM_INCREMENT); break; case '-': case GDK_KP_Subtract: - image_zoom_adjust(imd, -ZOOM_INCREMENT); + pixbuf_renderer_zoom_adjust(pr, -ZOOM_INCREMENT); break; case 'Z': case 'z': case GDK_KP_Divide: case '1': - image_zoom_set(imd, 1.0); + pixbuf_renderer_zoom_set(pr, 1.0); break; case '2': - image_zoom_set(imd, 2.0); + pixbuf_renderer_zoom_set(pr, 2.0); break; case '3': - image_zoom_set(imd, 3.0); + pixbuf_renderer_zoom_set(pr, 3.0); break; case '4': - image_zoom_set(imd, 4.0); + pixbuf_renderer_zoom_set(pr, 4.0); break; case '7': - image_zoom_set(imd, -4.0); + pixbuf_renderer_zoom_set(pr, -4.0); break; case '8': - image_zoom_set(imd, -3.0); + pixbuf_renderer_zoom_set(pr, -3.0); break; case '9': - image_zoom_set(imd, -2.0); + pixbuf_renderer_zoom_set(pr, -2.0); break; case 'F': case 'f': case 'V': case 'v': @@ -3344,7 +3328,9 @@ stop_signal = TRUE; break; case 'I': case 'i': +#if 0 pan_overlay_toggle(pw); +#endif break; case GDK_Delete: case GDK_KP_Delete: break; @@ -3418,16 +3404,16 @@ n = 9; break; case 'C': case 'c': - if (path) file_util_copy(path, NULL, NULL, imd->widget); + if (path) file_util_copy(path, NULL, NULL, GTK_WIDGET(pr)); break; case 'M': case 'm': - if (path) file_util_move(path, NULL, NULL, imd->widget); + if (path) file_util_move(path, NULL, NULL, GTK_WIDGET(pr)); break; case 'R': case 'r': - if (path) file_util_rename(path, NULL, imd->widget); + if (path) file_util_rename(path, NULL, GTK_WIDGET(pr)); break; case 'D': case 'd': - if (path) file_util_delete(path, NULL, imd->widget); + if (path) file_util_delete(path, NULL, GTK_WIDGET(pr)); break; case 'P': case 'p': if (path) info_window_new(path, NULL); @@ -3460,7 +3446,7 @@ } else if (GTK_WIDGET_HAS_FOCUS(pw->search_entry)) { - gtk_widget_grab_focus(pw->imd->widget); + gtk_widget_grab_focus(GTK_WIDGET(pw->pr)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pw->search_button), FALSE); stop_signal = TRUE; } @@ -3473,7 +3459,7 @@ if (x != 0 || y!= 0) { keyboard_scroll_calc(&x, &y, event); - image_scroll(imd, x, y); + pixbuf_renderer_scroll(pr, x, y); } return stop_signal; @@ -3611,7 +3597,7 @@ } pan_info_update(pw, pi); - image_scroll_to_point(pw->imd, pi->x + pi->width / 2, pi->y + pi->height / 2, 0.5, 0.5); + pixbuf_renderer_scroll_to_point(pw->pr, pi->x + pi->width / 2, pi->y + pi->height / 2, 0.5, 0.5); buf = g_strdup_printf("%s ( %d / %d )", (path[0] == '/') ? _("path found") : _("filename found"), @@ -3659,7 +3645,7 @@ } pan_info_update(pw, pi); - image_scroll_to_point(pw->imd, pi->x + pi->width / 2, pi->y + pi->height / 2, 0.5, 0.5); + pixbuf_renderer_scroll_to_point(pw->pr, pi->x + pi->width / 2, pi->y + pi->height / 2, 0.5, 0.5); buf = g_strdup_printf("%s ( %d / %d )", _("partial match"), @@ -3837,16 +3823,16 @@ { pan_info_update(pw, NULL); pan_calendar_update(pw, pi); - image_scroll_to_point(pw->imd, - pi->x + pi->width / 2, - pi->y + pi->height / 2, 0.5, 0.5); + pixbuf_renderer_scroll_to_point(pw->pr, + pi->x + pi->width / 2, + pi->y + pi->height / 2, 0.5, 0.5); } else if (pi) { pan_info_update(pw, pi); - image_scroll_to_point(pw->imd, - pi->x - PAN_FOLDER_BOX_BORDER * 5 / 2, - pi->y, 0.0, 0.5); + pixbuf_renderer_scroll_to_point(pw->pr, + pi->x - PAN_FOLDER_BOX_BORDER * 5 / 2, + pi->y, 0.0, 0.5); } if (month > 0) @@ -3937,8 +3923,7 @@ *----------------------------------------------------------------------------- */ -static void button_cb(ImageWindow *imd, gint button, guint32 time, - gdouble x, gdouble y, guint state, gpointer data) +static void button_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data) { PanWindow *pw = data; PanItem *pi = NULL; @@ -3946,16 +3931,16 @@ gint rx, ry; rx = ry = 0; - if (pw->imd->scale) + if (pr->scale) { - rx = (double)(pw->imd->x_scroll + x - pw->imd->x_offset) / pw->imd->scale; - ry = (double)(pw->imd->y_scroll + y - pw->imd->y_offset) / pw->imd->scale; + rx = (double)(pr->x_scroll + event->x - pr->x_offset) / pr->scale; + ry = (double)(pr->y_scroll + event->y - pr->y_offset) / pr->scale; } pi = pan_item_find_by_coord(pw, (pw->size > LAYOUT_SIZE_THUMB_LARGE) ? ITEM_IMAGE : ITEM_THUMB, rx, ry, NULL); - switch (button) + switch (event->button) { case 1: pan_info_update(pw, pi); @@ -3971,39 +3956,40 @@ case 3: pan_info_update(pw, pi); menu = pan_popup_menu(pw); - gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, time); + gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); break; default: break; } } -static void scroll_cb(ImageWindow *imd, GdkScrollDirection direction, guint32 time, - gdouble x, gdouble y, guint state, gpointer data) +static void scroll_cb(PixbufRenderer *pr, GdkEventScroll *event, gpointer data) { #if 0 PanWindow *pw = data; #endif gint w, h; - w = imd->vis_width; - h = imd->vis_height; - - if (!(state & GDK_SHIFT_MASK)) + w = pr->vis_width; + h = pr->vis_height; + + if (!(event->state & GDK_SHIFT_MASK)) { w /= 3; h /= 3; } - if (state & GDK_CONTROL_MASK) + if (event->state & GDK_CONTROL_MASK) { - switch (direction) + switch (event->direction) { case GDK_SCROLL_UP: - image_zoom_adjust_at_point(imd, ZOOM_INCREMENT, x, y); + pixbuf_renderer_zoom_adjust_at_point(pr, ZOOM_INCREMENT, + (gint)event->x, (gint)event->y); break; case GDK_SCROLL_DOWN: - image_zoom_adjust_at_point(imd, -ZOOM_INCREMENT, x, y); + pixbuf_renderer_zoom_adjust_at_point(pr, -ZOOM_INCREMENT, + (gint)event->x, (gint)event->y); break; default: break; @@ -4011,19 +3997,19 @@ } else { - switch (direction) + switch (event->direction) { case GDK_SCROLL_UP: - image_scroll(imd, 0, -h); + pixbuf_renderer_scroll(pr, 0, -h); break; case GDK_SCROLL_DOWN: - image_scroll(imd, 0, h); + pixbuf_renderer_scroll(pr, 0, h); break; case GDK_SCROLL_LEFT: - image_scroll(imd, -w, 0); + pixbuf_renderer_scroll(pr, -w, 0); break; case GDK_SCROLL_RIGHT: - image_scroll(imd, w, 0); + pixbuf_renderer_scroll(pr, w, 0); break; default: break; @@ -4031,18 +4017,22 @@ } } -static void pan_image_set_buttons(PanWindow *pw, ImageWindow *imd) +static void pan_image_set_buttons(PanWindow *pw, PixbufRenderer *pr) { - image_set_button_func(imd, button_cb, pw); - image_set_scroll_func(imd, scroll_cb, pw); + g_signal_connect(G_OBJECT(pr), "clicked", + G_CALLBACK(button_cb), pw); + g_signal_connect(G_OBJECT(pr), "scroll_event", + G_CALLBACK(scroll_cb), pw); } +#if 0 static void pan_fullscreen_stop_func(FullScreenData *fs, gpointer data) { PanWindow *pw = data; pw->fs = NULL; } +#endif static void pan_fullscreen_toggle(PanWindow *pw, gint force_off) { @@ -4051,10 +4041,12 @@ if (pw->fs) { fullscreen_stop(pw->fs); - pw->imd = pw->imd_normal; + pw->pr = pw->pr_normal; } else { + printf("FIXME: fullscreen\n"); +#if 0 pw->fs = fullscreen_start(pw->window, pw->imd, pan_fullscreen_stop_func, pw); pan_image_set_buttons(pw, pw->fs->imd); @@ -4062,62 +4054,52 @@ G_CALLBACK(pan_window_key_press_cb), pw); pw->imd = pw->fs->imd; +#endif } } -static void pan_overlay_toggle(PanWindow *pw) -{ - ImageWindow *imd; - - imd = pan_window_active_image(pw); -#if 0 - if (pw->overlay_id == -1) - { - pw->overlay_id = image_overlay_info_enable(imd); - } - else - { - image_overlay_info_disable(imd, pw->overlay_id); - pw->overlay_id = -1; - } -#endif -} - -static void pan_window_image_update_cb(ImageWindow *imd, gpointer data) +static void pan_window_image_zoom_cb(PixbufRenderer *pr, gdouble zoom, gpointer data) { PanWindow *pw = data; gchar *text; +#if 0 text = image_zoom_get_as_text(imd); +#endif + text = g_strdup_printf("%.2f", zoom); gtk_label_set_text(GTK_LABEL(pw->label_zoom), text); g_free(text); } -static void pan_window_image_scroll_notify_cb(ImageWindow *imd, gint x, gint y, - gint width, gint height, gpointer data) +static void pan_window_image_scroll_notify_cb(PixbufRenderer *pr, gpointer data) { PanWindow *pw = data; GtkAdjustment *adj; + GdkRectangle rect; + gint width, height; + + pixbuf_renderer_get_visible_rect(pr, &rect); + pixbuf_renderer_get_image_size(pr, &width, &height); adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_h)); - adj->page_size = (gdouble)imd->vis_width / imd->scale; + adj->page_size = (gdouble)rect.width; adj->page_increment = adj->page_size / 2.0; - adj->step_increment = 48.0 / imd->scale; + adj->step_increment = 48.0 / pr->scale; adj->lower = 0.0; - adj->upper = MAX((gdouble)width + adj->page_size, 1.0); - adj->value = (gdouble)x; + adj->upper = MAX((gdouble)width, 1.0); + adj->value = (gdouble)rect.x; pref_signal_block_data(pw->scrollbar_h, pw); gtk_adjustment_changed(adj); pref_signal_unblock_data(pw->scrollbar_h, pw); adj = gtk_range_get_adjustment(GTK_RANGE(pw->scrollbar_v)); - adj->page_size = (gdouble)imd->vis_height / imd->scale; + adj->page_size = (gdouble)rect.height; adj->page_increment = adj->page_size / 2.0; - adj->step_increment = 48.0 / imd->scale; + adj->step_increment = 48.0 / pr->scale; adj->lower = 0.0; - adj->upper = MAX((gdouble)height + adj->page_size, 1.0); - adj->value = (gdouble)y; + adj->upper = MAX((gdouble)height, 1.0); + adj->value = (gdouble)rect.y; pref_signal_block_data(pw->scrollbar_v, pw); gtk_adjustment_changed(adj); @@ -4131,11 +4113,11 @@ PanWindow *pw = data; gint x; - if (!pw->imd->scale) return; + if (!pw->pr->scale) return; x = (gint)gtk_range_get_value(range); - image_scroll_to_point(pw->imd, x, (gint)((gdouble)pw->imd->y_scroll / pw->imd->scale), 0.0, 0.0); + pixbuf_renderer_scroll_to_point(pw->pr, x, (gint)((gdouble)pw->pr->y_scroll / pw->pr->scale), 0.0, 0.0); } static void pan_window_scrollbar_v_value_cb(GtkRange *range, gpointer data) @@ -4143,11 +4125,11 @@ PanWindow *pw = data; gint y; - if (!pw->imd->scale) return; + if (!pw->pr->scale) return; y = (gint)gtk_range_get_value(range); - image_scroll_to_point(pw->imd, (gint)((gdouble)pw->imd->x_scroll / pw->imd->scale), y, 0.0, 0.0); + pixbuf_renderer_scroll_to_point(pw->pr, (gint)((gdouble)pw->pr->x_scroll / pw->pr->scale), y, 0.0, 0.0); } static void pan_window_layout_change_cb(GtkWidget *combo, gpointer data) @@ -4316,24 +4298,25 @@ gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 2); - pw->imd = image_new(TRUE); - pw->imd_normal = pw->imd; - - if (black_window_background) image_background_set_black(pw->imd, TRUE); - image_set_update_func(pw->imd, pan_window_image_update_cb, pw); - - image_set_scroll_notify_func(pw->imd, pan_window_image_scroll_notify_cb, pw); - -#if 0 - gtk_box_pack_start(GTK_BOX(vbox), pw->imd->widget, TRUE, TRUE, 0); -#endif - gtk_table_attach(GTK_TABLE(table), pw->imd->widget, 0, 1, 0, 1, + pw->pr = pixbuf_renderer_new(); + pw->pr_normal = pw->pr; + + if (black_window_background) pixbuf_renderer_set_black(pw->pr, TRUE); + + g_object_set(G_OBJECT(pw->pr), "zoom_2pass", TRUE, NULL); + + g_signal_connect(G_OBJECT(pw->pr), "zoom", + G_CALLBACK(pan_window_image_zoom_cb), pw); + g_signal_connect(G_OBJECT(pw->pr), "scroll_notify", + G_CALLBACK(pan_window_image_scroll_notify_cb), pw); + + gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(pw->pr), 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0); - gtk_widget_show(pw->imd->widget); + gtk_widget_show(GTK_WIDGET(pw->pr)); pan_window_dnd_init(pw); - pan_image_set_buttons(pw, pw->imd); + pan_image_set_buttons(pw, pw->pr); pw->scrollbar_h = gtk_hscrollbar_new(NULL); g_signal_connect(G_OBJECT(pw->scrollbar_h), "value_changed", @@ -4422,7 +4405,9 @@ pan_window_layout_update_idle(pw); - gtk_widget_grab_focus(pw->imd->widget); +#if 0 + gtk_widget_grab_focus(GTK_WIDGET(pw->pr)); +#endif gtk_widget_show(pw->window); pan_window_list = g_list_append(pan_window_list, pw); @@ -4563,21 +4548,21 @@ { PanWindow *pw = data; - image_zoom_adjust(pan_window_active_image(pw), ZOOM_INCREMENT); + pixbuf_renderer_zoom_adjust(pan_window_active_image(pw), ZOOM_INCREMENT); } static void pan_zoom_out_cb(GtkWidget *widget, gpointer data) { PanWindow *pw = data; - image_zoom_adjust(pan_window_active_image(pw), -ZOOM_INCREMENT); + pixbuf_renderer_zoom_adjust(pan_window_active_image(pw), -ZOOM_INCREMENT); } static void pan_zoom_1_1_cb(GtkWidget *widget, gpointer data) { PanWindow *pw = data; - image_zoom_set(pan_window_active_image(pw), 1.0); + pixbuf_renderer_zoom_set(pan_window_active_image(pw), 1.0); } static void pan_copy_cb(GtkWidget *widget, gpointer data) @@ -4586,7 +4571,7 @@ const gchar *path; path = pan_menu_click_path(pw); - if (path) file_util_copy(path, NULL, NULL, pw->imd->widget); + if (path) file_util_copy(path, NULL, NULL, GTK_WIDGET(pw->pr)); } static void pan_move_cb(GtkWidget *widget, gpointer data) @@ -4595,7 +4580,7 @@ const gchar *path; path = pan_menu_click_path(pw); - if (path) file_util_move(path, NULL, NULL, pw->imd->widget); + if (path) file_util_move(path, NULL, NULL, GTK_WIDGET(pw->pr)); } static void pan_rename_cb(GtkWidget *widget, gpointer data) @@ -4604,7 +4589,7 @@ const gchar *path; path = pan_menu_click_path(pw); - if (path) file_util_rename(path, NULL, pw->imd->widget); + if (path) file_util_rename(path, NULL, GTK_WIDGET(pw->pr)); } static void pan_delete_cb(GtkWidget *widget, gpointer data) @@ -4613,7 +4598,7 @@ const gchar *path; path = pan_menu_click_path(pw); - if (path) file_util_delete(path, NULL, pw->imd->widget); + if (path) file_util_delete(path, NULL, GTK_WIDGET(pw->pr)); } static void pan_fullscreen_cb(GtkWidget *widget, gpointer data) @@ -4696,11 +4681,8 @@ guint time, gpointer data) { PanWindow *pw = data; - ImageWindow *imd; - - if (gtk_drag_get_source_widget(context) == pw->imd->image) return; - - imd = pw->imd; + + if (gtk_drag_get_source_widget(context) == GTK_WIDGET(pw->pr)) return; if (info == TARGET_URI_LIST) { @@ -4765,21 +4747,21 @@ static void pan_window_dnd_init(PanWindow *pw) { - ImageWindow *imd; - - imd = pw->imd; - - gtk_drag_source_set(imd->image, GDK_BUTTON2_MASK, + GtkWidget *widget; + + widget = GTK_WIDGET(pw->pr); + + gtk_drag_source_set(widget, GDK_BUTTON2_MASK, dnd_file_drag_types, dnd_file_drag_types_count, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); - g_signal_connect(G_OBJECT(imd->image), "drag_data_get", + g_signal_connect(G_OBJECT(widget), "drag_data_get", G_CALLBACK(pan_window_set_dnd_data), pw); - gtk_drag_dest_set(imd->image, + gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, dnd_file_drop_types, dnd_file_drop_types_count, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); - g_signal_connect(G_OBJECT(imd->image), "drag_data_received", + g_signal_connect(G_OBJECT(widget), "drag_data_received", G_CALLBACK(pan_window_get_dnd_data), pw); }