[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19224] branches/blender2.5/blender/source /blender: 2.5 filebrowser
Andrea Weikert
elubie at gmx.net
Sun Mar 8 14:14:12 CET 2009
Revision: 19224
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19224
Author: elubie
Date: 2009-03-08 14:14:12 +0100 (Sun, 08 Mar 2009)
Log Message:
-----------
2.5 filebrowser
still WIP commit, so Matt can do UI design
- cleaned up filebrowser drawing and selection
- selection bugfix
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h
branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
branches/blender2.5/blender/source/blender/editors/space_file/file_header.c
branches/blender2.5/blender/source/blender/editors/space_file/file_intern.h
branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
branches/blender2.5/blender/source/blender/editors/space_file/filelist.h
branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
branches/blender2.5/blender/source/blender/editors/space_file/space_file.c
branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h 2009-03-08 12:02:23 UTC (rev 19223)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_fileselect.h 2009-03-08 13:14:12 UTC (rev 19224)
@@ -59,6 +59,28 @@
/* XXX --- end unused -- */
} FileSelectParams;
+#define FILE_LAYOUT_HOR 1
+#define FILE_LAYOUT_VER 2
+
+typedef struct FileLayout
+{
+ /* view settings - XXX - move into own struct */
+ short prv_w;
+ short prv_h;
+ short tile_w;
+ short tile_h;
+ short tile_border_x;
+ short tile_border_y;
+ short prv_border_x;
+ short prv_border_y;
+ short rows;
+ short columns;
+ short width;
+ short height;
+ short flag;
+
+} FileLayout;
+
FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile);
short ED_fileselect_set_params(struct SpaceFile *sfile, int type, const char *title, const char *path,
@@ -66,5 +88,16 @@
void ED_fileselect_reset_params(struct SpaceFile *sfile);
+
+void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar);
+
+
+FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar);
+
+int ED_fileselect_layout_offset(FileLayout* layout, int x, int y);
+
+void ED_fileselect_layout_tilepos(FileLayout* layout, int tile, short *x, short *y);
+
+
#endif /* ED_FILES_H */
Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c 2009-03-08 12:02:23 UTC (rev 19223)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c 2009-03-08 13:14:12 UTC (rev 19224)
@@ -240,70 +240,21 @@
}
-/* returns max number of rows in view */
-static int file_view_rows(SpaceFile* sfile, View2D *v2d)
-{
- int height= (v2d->cur.ymax - v2d->cur.ymin - 2*sfile->tile_border_y);
- return height / (sfile->tile_h + 2*sfile->tile_border_y);
-}
-
-/* returns max number of columns in view */
-static int file_view_columns(SpaceFile* sfile, View2D *v2d)
-{
- int width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->tile_border_x);
- return width / (sfile->tile_w + 2*sfile->tile_border_x);
-}
-
void file_calc_previews(const bContext *C, ARegion *ar)
{
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
- FileSelectParams* params = ED_fileselect_get_params(sfile);
View2D *v2d= &ar->v2d;
- int width=0, height=0;
- int rows, columns;
-
- if (params->display == FILE_IMGDISPLAY) {
- sfile->prv_w = 96;
- sfile->prv_h = 96;
- sfile->tile_border_x = 4;
- sfile->tile_border_y = 4;
- sfile->prv_border_x = 4;
- sfile->prv_border_y = 4;
- sfile->tile_w = sfile->prv_w + 2*sfile->prv_border_x;
- sfile->tile_h = sfile->prv_h + 4*sfile->prv_border_y + U.fontsize*3/2;
- width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->tile_border_x);
- columns= file_view_columns(sfile, v2d);
- if(columns)
- rows= filelist_numfiles(sfile->files)/columns + 1; // XXX dirty, modulo is zero
- else
- rows= filelist_numfiles(sfile->files) + 1; // XXX dirty, modulo is zero
- height= rows*(sfile->tile_h+2*sfile->tile_border_y) + sfile->tile_border_y*2;
- } else {
- sfile->prv_w = 0;
- sfile->prv_h = 0;
- sfile->tile_border_x = 8;
- sfile->tile_border_y = 2;
- sfile->prv_border_x = 0;
- sfile->prv_border_y = 0;
- sfile->tile_w = 240;
- sfile->tile_h = U.fontsize*3/2;
- height= v2d->cur.ymax - v2d->cur.ymin;
- rows = file_view_rows(sfile, v2d);
- if(rows)
- columns = filelist_numfiles(sfile->files)/rows + 1; // XXX dirty, modulo is zero
- else
- columns = filelist_numfiles(sfile->files) + 1; // XXX dirty, modulo is zero
-
- width = columns * (sfile->tile_w + 2*sfile->tile_border_x) + sfile->tile_border_x*2;
- }
-
- UI_view2d_totRect_set(v2d, width, height);
+
+ ED_fileselect_init_layout(sfile, ar);
+ UI_view2d_totRect_set(v2d, sfile->layout->width, sfile->layout->height);
}
void file_draw_previews(const bContext *C, ARegion *ar)
{
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
FileSelectParams* params= ED_fileselect_get_params(sfile);
+ FileLayout* layout= ED_fileselect_get_layout(sfile, ar);
+
View2D *v2d= &ar->v2d;
static double lasttime= 0;
struct FileList* files = sfile->files;
@@ -319,97 +270,66 @@
int colorid = 0;
int todo;
int offset;
- int columns;
- int rows;
if (!files) return;
type = filelist_gettype(files);
- filelist_imgsize(files,sfile->prv_w,sfile->prv_h);
+ filelist_imgsize(files,sfile->layout->prv_w,sfile->layout->prv_h);
numfiles = filelist_numfiles(files);
todo = 0;
if (lasttime < 0.001) lasttime = PIL_check_seconds_timer();
- sx = v2d->cur.xmin + sfile->tile_border_x;
- sy = v2d->cur.ymax - sfile->tile_border_y;
- columns = file_view_columns(sfile, v2d);
- rows = file_view_rows(sfile, v2d);
-
- offset = columns*(-v2d->cur.ymax-sfile->tile_border_y)/(sfile->tile_h+sfile->tile_border_y);
- offset = (offset/columns-1)*columns;
+ sx = v2d->cur.xmin + layout->tile_border_x;
+ sy = v2d->cur.ymax - layout->tile_border_y;
+
+ offset = ED_fileselect_layout_offset(layout, 0, 0);
if (offset<0) offset=0;
- for (i=offset; (i < numfiles) && (i < (offset+(rows+2)*columns)); ++i)
+ for (i=offset; (i < numfiles) && (i < (offset+(layout->rows+2)*layout->columns)); ++i)
{
- sx = v2d->tot.xmin + sfile->tile_border_x + ((i)%columns)*(sfile->tile_w+2*sfile->tile_border_x);
- sy = v2d->tot.ymax - sfile->tile_border_y - ((i)/columns)*(sfile->tile_h+2*sfile->tile_border_y);
+ ED_fileselect_layout_tilepos(layout, i, &sx, &sy);
+ sx += v2d->tot.xmin+2;
+ sy = v2d->tot.ymax - sy;
file = filelist_file(files, i);
if (params->active_file == i) {
colorid = TH_ACTIVE;
- draw_tile(sx - 1, sy, sfile->tile_w + 1, sfile->tile_h, colorid,0);
+ draw_tile(sx - 1, sy, sfile->layout->tile_w + 1, sfile->layout->tile_h, colorid,0);
} else if (file->flags & ACTIVE) {
colorid = TH_HILITE;
- draw_tile(sx - 1, sy, sfile->tile_w + 1, sfile->tile_h, colorid,0);
+ draw_tile(sx - 1, sy, sfile->layout->tile_w + 1, sfile->layout->tile_h, colorid,0);
} else {
colorid = TH_BACK;
- draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid, -5);
+ draw_tile(sx, sy, sfile->layout->tile_w, sfile->layout->tile_h, colorid, -5);
}
-#if 0
- if ( type == FILE_MAIN) {
- ID *id;
- int icon_id = 0;
- int idcode;
- idcode= groupname_to_code(sfile->dir);
- if (idcode == ID_MA || idcode == ID_TE || idcode == ID_LA || idcode == ID_WO || idcode == ID_IM) {
- id = (ID *)file->poin;
- icon_id = BKE_icon_getid(id);
- }
- if (icon_id) {
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- if (do_load) {
- UI_icon_draw_preview(sx+2*TILE_BORDER_X, sy-simasel->prv_w-TILE_BORDER_X, icon_id, 0);
- } else {
- UI_icon_draw_preview(sx+2*TILE_BORDER_X, sy-simasel->prv_w-TILE_BORDER_X, icon_id, 1);
- todo++;
- }
-
- glDisable(GL_BLEND);
- }
- }
- else {
-#endif
- if ( (file->flags & IMAGEFILE) /* || (file->flags & MOVIEFILE) */)
- {
- if (do_load) {
- filelist_loadimage(files, i);
- } else {
- todo++;
- }
- imb = filelist_getimage(files, i);
+ if ( (file->flags & IMAGEFILE) /* || (file->flags & MOVIEFILE) */)
+ {
+ if (do_load) {
+ filelist_loadimage(files, i);
} else {
- imb = filelist_getimage(files, i);
+ todo++;
}
+ imb = filelist_getimage(files, i);
+ } else {
+ imb = filelist_getimage(files, i);
+ }
- if (imb) {
- float fx = ((float)sfile->prv_w - (float)imb->x)/2.0f;
- float fy = ((float)sfile->prv_h - (float)imb->y)/2.0f;
- short dx = (short)(fx + 0.5f + sfile->prv_border_x);
- short dy = (short)(fy + 0.5f - sfile->prv_border_y);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- // glaDrawPixelsSafe((float)sx+8 + dx, (float)sy - imgwidth + dy - 8, imb->x, imb->y, imb->x, GL_RGBA, GL_UNSIGNED_BYTE, imb->rect);
- glColor4f(1.0, 1.0, 1.0, 1.0);
- glaDrawPixelsTex((float)sx + dx, (float)sy - sfile->prv_h + dy, imb->x, imb->y,GL_UNSIGNED_BYTE, imb->rect);
- glDisable(GL_BLEND);
- imb = 0;
- }
-#if 0
- }
-#endif
+ if (imb) {
+ float fx = ((float)layout->prv_w - (float)imb->x)/2.0f;
+ float fy = ((float)layout->prv_h - (float)imb->y)/2.0f;
+ short dx = (short)(fx + 0.5f + sfile->layout->prv_border_x);
+ short dy = (short)(fy + 0.5f - sfile->layout->prv_border_y);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ // glaDrawPixelsSafe((float)sx+8 + dx, (float)sy - imgwidth + dy - 8, imb->x, imb->y, imb->x, GL_RGBA, GL_UNSIGNED_BYTE, imb->rect);
+ glColor4f(1.0, 1.0, 1.0, 1.0);
+ glaDrawPixelsTex((float)sx + dx, (float)sy - sfile->layout->prv_h + dy, imb->x, imb->y,GL_UNSIGNED_BYTE, imb->rect);
+ glDisable(GL_BLEND);
+ imb = 0;
+ }
+
if (type == FILE_MAIN) {
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}
@@ -437,7 +357,7 @@
}
}
- file_draw_string(sx + sfile->prv_border_x, sy+U.fontsize*3/2, file->relname, sfile->tile_w, sfile->tile_h);
+ file_draw_string(sx + layout->prv_border_x, sy+U.fontsize*3/2, file->relname, layout->tile_w, layout->tile_h);
if (!sfile->loadimage_timer)
sfile->loadimage_timer= WM_event_add_window_timer(CTX_wm_window(C), TIMER1, 1.0/30.0); /* max 30 frames/sec. */
@@ -451,6 +371,8 @@
{
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
FileSelectParams* params = ED_fileselect_get_params(sfile);
+ FileLayout* layout= ED_fileselect_get_layout(sfile, ar);
+ View2D *v2d= &ar->v2d;
struct FileList* files = sfile->files;
struct direntry *file;
int numfiles;
@@ -459,44 +381,45 @@
int offset;
short type;
int i;
- int rows;
- float sw;
+ float sw, spos;
numfiles = filelist_numfiles(files);
type = filelist_gettype(files);
- sx = ar->v2d.tot.xmin + sfile->tile_border_x/2;
- sy = ar->v2d.cur.ymax - sfile->tile_border_y;
+ sx = ar->v2d.tot.xmin + layout->tile_border_x/2;
+ sy = ar->v2d.cur.ymax - layout->tile_border_y;
- rows = (ar->v2d.cur.ymax - ar->v2d.cur.ymin - 2*sfile->tile_border_y) / (sfile->tile_h+sfile->tile_border_y);
- offset = rows*(sx - sfile->tile_border_x)/(sfile->tile_w+sfile->tile_border_x);
- offset = (offset/rows-1)*rows;
+ offset = ED_fileselect_layout_offset(layout, 0, 0);
+ if (offset<0) offset=0;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list