[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