Sun Oct 15 10:45:14 2006 John Ellis <johne@verizon.net>
authorJohn Ellis <johne@verizon.net>
Sun, 15 Oct 2006 14:49:25 +0000 (14:49 +0000)
committerJohn Ellis <johne@verizon.net>
Sun, 15 Oct 2006 14:49:25 +0000 (14:49 +0000)
        * 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
TODO
src/pan-view.c
src/pixbuf-renderer.c
src/pixbuf-renderer.h

index e1ab074..2194008 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Oct 15 10:45:14 2006  John Ellis  <johne@verizon.net>
+
+       * 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  <johne@verizon.net>
 
        * main.c: Fix command line parser to work with any combination of files
diff --git a/TODO b/TODO
index 1501114..f527653 100644 (file)
--- 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):
 ----------------------------------------------
index 7c59522..6a5bd0b 100644 (file)
@@ -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
index f4a92b8..d336550 100644 (file)
@@ -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);
index f9ded39..15543db 100644 (file)
@@ -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 */