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

Joshua Leung aligorith at gmail.com
Wed Feb 4 10:10:17 CET 2009


Revision: 18807
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18807
Author:   aligorith
Date:     2009-02-04 10:09:31 +0100 (Wed, 04 Feb 2009)

Log Message:
-----------
2.5

* Outliner 'select' (i.e. blue/grey highlights for tree items) works again in both normal Outliner + RNA views.

* Fixed bugs/MSVC warnings in animation code

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/action.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/action.c	2009-02-04 06:41:48 UTC (rev 18806)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/action.c	2009-02-04 09:09:31 UTC (rev 18807)
@@ -511,7 +511,7 @@
 	repeat = (strip->flag & ACTSTRIP_USESTRIDE) ? (1.0f) : (strip->repeat);
 	
 	if (strip->scale == 0.0f) strip->scale= 1.0f;
-	scale = fabs(strip->scale); /* scale must be positive (for now) */
+	scale = (float)fabs(strip->scale); /* scale must be positive (for now) */
 	
 	actlength = strip->actend-strip->actstart;
 	if (actlength == 0.0f) actlength = 1.0f;

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c	2009-02-04 06:41:48 UTC (rev 18806)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/ipo.c	2009-02-04 09:09:31 UTC (rev 18807)
@@ -936,7 +936,7 @@
 				fcurve= fcu;
 				
 			/* set path */
-			fcurve->rna_path= adrcode_bitmap_path_copy(abp->path);
+			fcurve->rna_path= BLI_strdupn(abp->path, strlen(abp->path));
 			fcurve->array_index= abp->array_index;
 			
 			/* convert keyframes 

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-02-04 06:41:48 UTC (rev 18806)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-02-04 09:09:31 UTC (rev 18807)
@@ -2249,8 +2249,17 @@
 	if(te) {
 		BIF_undo_push("Outliner click event");
 	}
-	else 
-		outliner_select(ar, soops);
+	else {
+		short selecting= -1;
+		int row;
+		
+		/* get row number - 100 here is just a dummy value since we don't need the column */
+		UI_view2d_listview_view_to_cell(&ar->v2d, 1000, OL_H, 0.0f, 0.0f, 
+						fmval[0], fmval[1], NULL, &row);
+		
+		/* select relevant row */
+		outliner_select(soops, &soops->tree, &row, &selecting);
+	}
 	
 	ED_region_tag_redraw(ar);
 
@@ -2553,64 +2562,46 @@
 	BIF_undo_push("Outliner show hierarchy");
 }
 
-#if 0
-static void do_outliner_select(SpaceOops *soops, ListBase *lb, float y1, float y2, short *selecting)
+void outliner_select(SpaceOops *soops, ListBase *lb, int *index, short *selecting)
 {
 	TreeElement *te;
 	TreeStoreElem *tselem;
 	
-	if(y1>y2) SWAP(float, y1, y2);
-	
-	for(te= lb->first; te; te= te->next) {
+	for (te= lb->first; te && *index >= 0; te=te->next, (*index)--) {
 		tselem= TREESTORE(te);
 		
-		if(te->ys + OL_H < y1) return;
-		if(te->ys < y2) {
-			if((te->flag & TE_ICONROW)==0) {
-				if(*selecting == -1) {
-					if( tselem->flag & TSE_SELECTED) *selecting= 0;
-					else *selecting= 1;
+		/* if we've encountered the right item, set its 'Outliner' selection status */
+		if (*index == 0) {
+			/* this should be the last one, so no need to do anything with index */
+			if ((te->flag & TE_ICONROW)==0) {
+				/* -1 value means toggle testing for now... */
+				if (*selecting == -1) {
+					if (tselem->flag & TSE_SELECTED) 
+						*selecting= 0;
+					else 
+						*selecting= 1;
 				}
-				if(*selecting) tselem->flag |= TSE_SELECTED;
-				else tselem->flag &= ~TSE_SELECTED;
+				
+				/* set selection */
+				if (*selecting) 
+					tselem->flag |= TSE_SELECTED;
+				else 
+					tselem->flag &= ~TSE_SELECTED;
 			}
 		}
-		if((tselem->flag & TSE_CLOSED)==0) do_outliner_select(soops, &te->subtree, y1, y2, selecting);
-	}
-}
-#endif
-
-/* its own redraw loop... urm */
-void outliner_select(ARegion *ar, SpaceOops *so)
-{
-#if 0
-	XXX
-	float fmval[2], y1, y2;
-	short yo=-1, selecting= -1;
-	
-	UI_view2d_region_to_view(&ar->v2d, event->x, event->y, fmval, fmval+1);
-	
-	y1= fmval[1];
-
-	while (get_mbut() & (L_MOUSE|R_MOUSE)) {
-		UI_view2d_region_to_view(&ar->v2d, event->x, event->y, fmval, fmval+1);
-		y2= fmval[1];
-		
-		if(yo!=mval[1]) {
-			/* select the 'ouliner row' */
-			do_outliner_select(so, &so->tree, y1, y2, &selecting);
-			yo= mval[1];
-			
-			so->storeflag |= SO_TREESTORE_REDRAW;
-// XXX			screen_swapbuffers();
-		
-			y1= y2;
+		else if ((tselem->flag & TSE_CLOSED)==0) {
+			/* Only try selecting sub-elements if we haven't hit the right element yet
+			 *
+			 * Hack warning:
+			 * 	Index must be reduced before supplying it to the sub-tree to try to do
+			 * 	selection, however, we need to increment it again for the next loop to 
+			 * 	function correctly
+			 */
+			(*index)--;
+			outliner_select(soops, &te->subtree, index, selecting);
+			(*index)++;
 		}
-		else PIL_sleep_ms(30);
 	}
-	
-	BIF_undo_push("Outliner selection");
-#endif
 }
 
 /* ************ SELECTION OPERATIONS ********* */
@@ -3704,21 +3695,20 @@
 	
 	glBlendFunc(GL_SRC_ALPHA,  GL_ONE_MINUS_SRC_ALPHA); // only once
 	
-	if(ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
-		// struct marks
+	if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
+		/* struct marks */
 		UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
 		//UI_ThemeColorShade(TH_BACK, -20);
 		starty= (int)ar->v2d.tot.ymax-OL_H;
 		outliner_draw_struct_marks(ar, soops, &soops->tree, &starty);
 	}
-	else {
-		// selection first
-		UI_GetThemeColor3fv(TH_BACK, col);
-		glColor3f(col[0]+0.06f, col[1]+0.08f, col[2]+0.10f);
-		starty= (int)ar->v2d.tot.ymax-OL_H;
-		outliner_draw_selection(ar, soops, &soops->tree, &starty);
-	}
 	
+	/* always draw selection fill before hierarchy */
+	UI_GetThemeColor3fv(TH_BACK, col);
+	glColor3f(col[0]+0.06f, col[1]+0.08f, col[2]+0.10f);
+	starty= (int)ar->v2d.tot.ymax-OL_H;
+	outliner_draw_selection(ar, soops, &soops->tree, &starty);
+	
 	// grey hierarchy lines
 	UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.2f);
 	starty= (int)ar->v2d.tot.ymax-OL_H/2;

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-02-04 06:41:48 UTC (rev 18806)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_intern.h	2009-02-04 09:09:31 UTC (rev 18807)
@@ -115,7 +115,7 @@
 /* outliner.c */
 void outliner_free_tree(struct ListBase *lb);
 void outliner_operation_menu(struct Scene *scene, struct ARegion *ar, struct SpaceOops *soops);
-void outliner_select(struct ARegion *ar, struct SpaceOops *so);
+void outliner_select(struct SpaceOops *soops, struct ListBase *lb, int *index, short *selecting);
 void draw_outliner(const struct bContext *C);
 
 void OUTLINER_OT_activate_click(struct wmOperatorType *ot);





More information about the Bf-blender-cvs mailing list