Mercurial > geeqie.yaz
diff src/pan-grid.c @ 105:de64a683d5d0
Thu Nov 9 17:43:06 2006 John Ellis <johne@verizon.net>
* pan-view.c: Break this monstrosity of code into smaller files.
* pan-calendar.c, pan-folder.c, pan-grid.c, pan-timeline.c: Move the
layout types into their own files (for now flower is with folder tree).
* pan-item.c: PanItem creation, drawing, actions, and maintenance.
* pan-types.h: Defines, data types, function prototypes.
* pan-util.c: Various utilities.
* src/Makefile.am: Add new files above.
author | gqview |
---|---|
date | Thu, 09 Nov 2006 22:53:11 +0000 |
parents | |
children | f6e307c7bad6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pan-grid.c Thu Nov 09 22:53:11 2006 +0000 @@ -0,0 +1,83 @@ +/* + * GQview + * (C) 2006 John Ellis + * + * Author: John Ellis + * + * This software is released under the GNU General Public License (GNU GPL). + * Please read the included file COPYING for more information. + * This software comes with no warranty of any kind, use at your own risk! + */ + + +#include "gqview.h" +#include "pan-types.h" + +#include <math.h> + + +void pan_grid_compute(PanWindow *pw, const gchar *path, gint *width, gint *height) +{ + GList *list; + GList *work; + gint x, y; + gint grid_size; + gint next_y; + + list = pan_list_tree(path, SORT_NAME, TRUE, pw->ignore_symlinks); + + grid_size = (gint)sqrt((double)g_list_length(list)); + if (pw->size > PAN_IMAGE_SIZE_THUMB_LARGE) + { + grid_size = grid_size * (512 + PAN_THUMB_GAP) * pw->image_size / 100; + } + else + { + grid_size = grid_size * (PAN_THUMB_SIZE + PAN_THUMB_GAP); + } + + next_y = 0; + + *width = PAN_BOX_BORDER * 2; + *height = PAN_BOX_BORDER * 2; + + x = PAN_THUMB_GAP; + y = PAN_THUMB_GAP; + work = list; + while (work) + { + FileData *fd; + PanItem *pi; + + fd = work->data; + work = work->next; + + if (pw->size > PAN_IMAGE_SIZE_THUMB_LARGE) + { + pi = pan_item_image_new(pw, fd, x, y, 10, 10); + + x += pi->width + PAN_THUMB_GAP; + if (y + pi->height + PAN_THUMB_GAP > next_y) next_y = y + pi->height + PAN_THUMB_GAP; + if (x > grid_size) + { + x = PAN_THUMB_GAP; + y = next_y; + } + } + else + { + pi = pan_item_thumb_new(pw, fd, x, y); + + x += PAN_THUMB_SIZE + PAN_THUMB_GAP; + if (x > grid_size) + { + x = PAN_THUMB_GAP; + y += PAN_THUMB_SIZE + PAN_THUMB_GAP; + } + } + pan_item_size_coordinates(pi, PAN_THUMB_GAP, width, height); + } + + g_list_free(list); +} +