From 087fb435de68b4ba00c4fae105538d6eb341c945 Mon Sep 17 00:00:00 2001 From: John Ellis Date: Sun, 15 Oct 2006 14:49:25 +0000 Subject: [PATCH] Sun Oct 15 10:45:14 2006 John Ellis * pan-view.c: Recalc the size of the layout when popping up new images in the calendar so that all new images can be scrolled into view. * pixbuf-renderer.[ch] (pixbuf_renderer_set_tiles_size): Add ability to resize a tile canvas without the need for a complete reset/render. --- ChangeLog | 7 +++++++ TODO | 2 ++ src/pan-view.c | 44 +++++++++++++++++++++++++++++++++++++++++++ src/pixbuf-renderer.c | 15 +++++++++++++++ src/pixbuf-renderer.h | 1 + 5 files changed, 69 insertions(+) diff --git a/ChangeLog b/ChangeLog index e1ab0743..2194008b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Oct 15 10:45:14 2006 John Ellis + + * pan-view.c: Recalc the size of the layout when popping up new images + in the calendar so that all new images can be scrolled into view. + * pixbuf-renderer.[ch] (pixbuf_renderer_set_tiles_size): Add ability + to resize a tile canvas without the need for a complete reset/render. + Sun Oct 15 04:03:41 2006 John Ellis * main.c: Fix command line parser to work with any combination of files diff --git a/TODO b/TODO index 15011147..f5276535 100644 --- a/TODO +++ b/TODO @@ -90,6 +90,8 @@ Major: > xvpics is now hidden option. > Holding down shift will now scroll more when panning with mouse. + > add blurb about moving images between collections with shift+drag + Minor (non blockers): ---------------------------------------------- diff --git a/src/pan-view.c b/src/pan-view.c index 7c595227..6a5bd0b1 100644 --- a/src/pan-view.c +++ b/src/pan-view.c @@ -288,6 +288,8 @@ static GList *pan_window_layout_list(const gchar *path, SortType sort, gint asce static GList *pan_layout_intersect(PanWindow *pw, gint x, gint y, gint width, gint height); +static void pan_layout_resize(PanWindow *pw, gint border); + static void pan_window_layout_update_idle(PanWindow *pw); static GtkWidget *pan_popup_menu(PanWindow *pw); @@ -1997,6 +1999,8 @@ static void pan_calendar_update(PanWindow *pw, PanItem *pi_day) pan_item_box_shadow(pbox, PAN_SHADOW_OFFSET * 2, PAN_SHADOW_FADE * 2); pan_item_added(pw, pbox); + + pan_layout_resize(pw, 100); } static void pan_window_layout_compute_calendar(PanWindow *pw, const gchar *path, gint *width, gint *height) @@ -2528,6 +2532,46 @@ static GList *pan_layout_intersect(PanWindow *pw, gint x, gint y, gint width, gi return list; } +static void pan_layout_resize(PanWindow *pw, gint border) +{ + gint width = 0; + gint height = 0; + GList *work; + PixbufRenderer *pr; + + work = pw->list; + while (work) + { + PanItem *pi; + + pi = work->data; + work = work->next; + + if (width < pi->x + pi->width) width = pi->x + pi->width; + if (height < pi->y + pi->height) height = pi->y + pi->height; + } + work = pw->list_static; + while (work) + { + PanItem *pi; + + pi = work->data; + work = work->next; + + if (width < pi->x + pi->width) width = pi->x + pi->width; + if (height < pi->y + pi->height) height = pi->y + pi->height; + } + + width += border; + height += border; + + pr = PIXBUF_RENDERER(pw->imd->pr); + if (width < pr->window_width) width = pr->window_width; + if (height < pr->window_width) height = pr->window_height; + + pixbuf_renderer_set_tiles_size(PIXBUF_RENDERER(pw->imd->pr), width, height); +} + /* *----------------------------------------------------------------------------- * tile generation diff --git a/src/pixbuf-renderer.c b/src/pixbuf-renderer.c index f4a92b89..d3365503 100644 --- a/src/pixbuf-renderer.c +++ b/src/pixbuf-renderer.c @@ -1577,6 +1577,21 @@ void pixbuf_renderer_set_tiles(PixbufRenderer *pr, gint width, gint height, pr_redraw(pr, TRUE); } +void pixbuf_renderer_set_tiles_size(PixbufRenderer *pr, gint width, gint height) +{ + g_return_if_fail(IS_PIXBUF_RENDERER(pr)); + g_return_if_fail(width >= 32 && height > 32); + + if (!pr->source_tiles_enabled) return; + if (pr->image_width == width && pr->image_height == height) return; + + pr->image_width = width; + pr->image_height = height; + + pr_zoom_sync(pr, pr->zoom, TRUE, FALSE, TRUE, FALSE, 0, 0); + pr_redraw(pr, TRUE); +} + gint pixbuf_renderer_get_tiles(PixbufRenderer *pr) { g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), FALSE); diff --git a/src/pixbuf-renderer.h b/src/pixbuf-renderer.h index f9ded392..15543db4 100644 --- a/src/pixbuf-renderer.h +++ b/src/pixbuf-renderer.h @@ -163,6 +163,7 @@ void pixbuf_renderer_set_tiles(PixbufRenderer *pr, gint width, gint height, PixbufRendererTileDisposeFunc func_dispose, gpointer user_data, gdouble zoom); +void pixbuf_renderer_set_tiles_size(PixbufRenderer *pr, gint width, gint height); gint pixbuf_renderer_get_tiles(PixbufRenderer *pr); /* move image data from source to pr, source is then set to NULL image */ -- 2.20.1