[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18563] branches/blender2.5/blender/source /blender: 2.5 filebrowser

Andrea Weikert elubie at gmx.net
Sun Jan 18 19:24:13 CET 2009


Revision: 18563
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18563
Author:   elubie
Date:     2009-01-18 19:24:11 +0100 (Sun, 18 Jan 2009)

Log Message:
-----------
2.5 filebrowser
* slightly improved drawing code
* temporarily added creation of thumbnails within thread in the background until thread job manager is available in WM.
* fixed missing icons in thumbnail view

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_file/file_draw.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/space_file.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.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-01-18 15:37:09 UTC (rev 18562)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c	2009-01-18 18:24:11 UTC (rev 18563)
@@ -200,14 +200,14 @@
 }
 
 
-static void draw_tile(short sx, short sy, short width, short height, int colorid)
+static void draw_tile(short sx, short sy, short width, short height, int colorid, int shade)
 {
 	/* TODO: BIF_ThemeColor seems to need this to show the color, not sure why? - elubie */
 	glEnable(GL_BLEND);
 	glColor4ub(0, 0, 0, 100);
 	glDisable(GL_BLEND);
 	
-	UI_ThemeColor4(colorid);
+	UI_ThemeColorShade(colorid, shade);
 	uiSetRoundBox(15);	
 	glRecti(sx, sy - height, sx + width, sy);
 
@@ -264,14 +264,14 @@
 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 + 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 + sfile->tile_border_x);
+	return width / (sfile->tile_w + 2*sfile->tile_border_x);
 }
 
 void file_calc_previews(const bContext *C, ARegion *ar)
@@ -285,16 +285,16 @@
 	if (params->display) {
 		sfile->prv_w = 96;
 		sfile->prv_h = 96;
-		sfile->tile_border_x = 8;
-		sfile->tile_border_y = 8;
+		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 + 2*sfile->prv_border_y + U.fontsize*3/2;
+		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);
 		rows= filelist_numfiles(sfile->files)/columns + 1; // XXX dirty, modulo is zero
-		height= rows*(sfile->tile_h+sfile->tile_border_y) + sfile->tile_border_y*2;
+		height= rows*(sfile->tile_h+2*sfile->tile_border_y) + sfile->tile_border_y*2;
 	} else {
 		sfile->prv_w = 0;
 		sfile->prv_h = 0;
@@ -307,7 +307,7 @@
 		height= v2d->cur.ymax - v2d->cur.ymin;
 		rows = file_view_rows(sfile, v2d);
 		columns = filelist_numfiles(sfile->files)/rows + 1; // XXX dirty, modulo is zero
-		width = columns * (sfile->tile_w + sfile->tile_border_x) + sfile->tile_border_x*2;
+		width = columns * (sfile->tile_w + 2*sfile->tile_border_x) + sfile->tile_border_x*2;
 	}
 
 	UI_view2d_totRect_set(v2d, width, height);
@@ -333,15 +333,12 @@
 	int todo;
 	int offset;
 	int columns;
-	
+	int rows;
+
 	if (!files) return;
-	/* Reload directory */
-	BLI_strncpy(params->dir, filelist_dir(files), FILE_MAX);	
-	
-	type = filelist_gettype(files);	
 
+	type = filelist_gettype(files);	
 	filelist_imgsize(files,sfile->prv_w,sfile->prv_h);
-
 	numfiles = filelist_numfiles(files);
 	
 	todo = 0;
@@ -350,26 +347,26 @@
 	sx = v2d->cur.xmin + sfile->tile_border_x;
 	sy = v2d->cur.ymax - sfile->tile_border_y;
 	columns = file_view_columns(sfile, v2d);
-	offset = columns*(-v2d->cur.ymax+sfile->tile_border_y)/sfile->tile_h;
+	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;
 	if (offset<0) offset=0;
-	for (i=offset; (i < numfiles); ++i)
+	for (i=offset; (i < numfiles) && (i < (offset+(rows+2)*columns)); ++i)
 	{
-		sx = v2d->tot.xmin + sfile->tile_border_x + ((i)%columns)*(sfile->tile_w+sfile->tile_border_x);
-		sy = v2d->tot.ymax - sfile->tile_border_y - ((i)/columns)*(sfile->tile_h+sfile->tile_border_y);
+		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);
 		file = filelist_file(files, i);				
 
 		if (params->active_file == i) {
 			colorid = TH_ACTIVE;
-			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid);
+			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid,0);
 		} else if (file->flags & ACTIVE) {
 			colorid = TH_HILITE;
-			draw_tile(sx, sy+sfile->tile_border_y, sfile->tile_w, sfile->tile_h-sfile->tile_border_y, colorid);
+			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid,0);
 		} else {
-			/*
-			colorid = TH_PANEL;
-			draw_tile(simasel, sx, sy, tilewidth, tileheight, colorid);
-			*/
+			colorid = TH_BACK;
+			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid, -5);
 		}
 
 #if 0
@@ -413,7 +410,7 @@
 				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);
+				short dy = (short)(fy + 0.5f - sfile->prv_border_y);
 				
 				glEnable(GL_BLEND);
 				glBlendFunc(GL_SRC_ALPHA,  GL_ONE_MINUS_SRC_ALPHA);													
@@ -453,18 +450,13 @@
 			}
 		}
 			
-		file_draw_string(sx + sfile->prv_border_x, sy, file->relname, sfile->tile_w, sfile->tile_h);
-#if 0
-		if(do_load && (PIL_check_seconds_timer() - lasttime > 0.3)) {
-			lasttime= PIL_check_seconds_timer();
-			do_load = 0;
-		}
-#endif
+		file_draw_string(sx + sfile->prv_border_x, sy+U.fontsize*3/2, file->relname, sfile->tile_w, sfile->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. */
+
 	}
-#if 0 // XXX solve with threads	or add notifier ??
-	if (!do_load && todo > 0) /* we broke off loading */
-		addafterqueue(sa->win, RENDERPREVIEW, 1);
-#endif
+
 }
 
 
@@ -481,6 +473,7 @@
 	short type;
 	int i;
 	int rows;
+	float sw;
 
 	numfiles = filelist_numfiles(files);
 	type = filelist_gettype(files);	
@@ -512,10 +505,10 @@
 
 		if (params->active_file == i) {
 			colorid = TH_ACTIVE;
-			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid);
+			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid,0);
 		} else if (file->flags & ACTIVE) {
 			colorid = TH_HILITE;
-			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid);
+			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid,0);
 		} else {
 			/*
 			colorid = TH_PANEL;
@@ -548,10 +541,10 @@
 				}
 			}
 		}
-
-		file_draw_string(sx, sy, file->relname, sfile->tile_w, sfile->tile_h);
-		file_draw_string(sx + sfile->tile_w - UI_GetStringWidth(G.font, file->size, 0), sy,
-			file->size, sfile->tile_w - UI_GetStringWidth(G.font, file->size, 0), sfile->tile_h);
+		
+		sw = UI_GetStringWidth(G.font, file->size, 0);
+		file_draw_string(sx, sy, file->relname, sfile->tile_w - sw - 2, sfile->tile_h);
+		file_draw_string(sx + sfile->tile_w - sw, sy, file->size, sfile->tile_w - sw, sfile->tile_h);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_intern.h	2009-01-18 15:37:09 UTC (rev 18562)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_intern.h	2009-01-18 18:24:11 UTC (rev 18563)
@@ -49,5 +49,7 @@
 struct wmOperatorType;
 void ED_FILE_OT_select(struct wmOperatorType *ot);
 void ED_FILE_OT_select_bookmark(struct wmOperatorType *ot);
+void ED_FILE_OT_loadimages(struct wmOperatorType *ot);
+
 #endif /* ED_FILE_INTERN_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-01-18 15:37:09 UTC (rev 18562)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-01-18 18:24:11 UTC (rev 18563)
@@ -73,9 +73,9 @@
 	View2D* v2d = &ar->v2d;
 	UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y);
 	
-	offsetx = (x - (v2d->cur.xmin+sfile->tile_border_x))/(sfile->tile_w + sfile->tile_border_x);
-	offsety = (-y+sfile->tile_border_y)/(sfile->tile_h + sfile->tile_border_y);
-	columns = (v2d->cur.xmax - v2d->cur.xmin) / (sfile->tile_w+ sfile->tile_border_x);
+	offsetx = (x - (v2d->cur.xmin+sfile->tile_border_x))/(sfile->tile_w + 2*sfile->tile_border_x);
+	offsety = (v2d->tot.ymax - sfile->tile_border_y - y)/(sfile->tile_h + 2*sfile->tile_border_y);
+	columns = (v2d->cur.xmax - v2d->cur.xmin) / (sfile->tile_w+ 2*sfile->tile_border_x);
 	active_file = offsetx + columns*offsety;
 
 	if (active_file >= 0 && active_file < numfiles )
@@ -251,4 +251,34 @@
 	/* api callbacks */
 	ot->invoke= bookmark_select_invoke;
 	ot->poll= ED_operator_file_active;
+}
+
+
+static int loadimages_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	ScrArea *sa= CTX_wm_area(C);
+	ARegion *ar= CTX_wm_region(C);
+	SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
+	if (sfile->files) {
+		filelist_loadimage_timer(sfile->files);
+		if (filelist_changed(sfile->files)) {
+			ED_area_tag_redraw(sa);
+		}
+	}
+
+	
+	return OPERATOR_FINISHED;
+}
+
+void ED_FILE_OT_loadimages(wmOperatorType *ot)
+{
+	
+	/* identifiers */
+	ot->name= "Load Images";
+	ot->idname= "ED_FILE_OT_loadimages";
+	
+	/* api callbacks */
+	ot->invoke= loadimages_invoke;
+	
+	ot->poll= ED_operator_file_active;
 }
\ No newline at end of file

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-01-18 15:37:09 UTC (rev 18562)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-01-18 18:24:11 UTC (rev 18563)
@@ -49,6 +49,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_linklist.h"
 #include "BLI_storage_types.h"
+#include "BLI_threads.h"
 
 #ifdef WIN32
 #include "BLI_winstuff.h"
@@ -65,6 +66,7 @@
 #include "DNA_ipo_types.h"
 #include "DNA_ID.h"
 #include "DNA_object_types.h"
+#include "DNA_listbase.h"
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_texture_types.h"
@@ -90,6 +92,18 @@
 /* max length of library group name within filesel */
 #define GROUP_MAX 32
 
+static void *exec_loadimages(void *list_v);
+
+struct FileList;
+
+typedef struct FileImage {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list