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

Joshua Leung aligorith at gmail.com
Sat Dec 13 10:25:48 CET 2008


Revision: 17819
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17819
Author:   aligorith
Date:     2008-12-13 10:25:47 +0100 (Sat, 13 Dec 2008)

Log Message:
-----------
View2D: 

* Grid calculation now takes separate args for x/y units and clamping
* Timeline now gets V2D_LOCKZOOM_Y flag to prevent zooming in y-axis

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h
    branches/blender2.5/blender/source/blender/editors/interface/view2d.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c
    branches/blender2.5/blender/source/blender/editors/space_time/space_time.c

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2008-12-13 05:43:10 UTC (rev 17818)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2008-12-13 09:25:47 UTC (rev 17819)
@@ -5114,8 +5114,7 @@
 				ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_BOTTOM);
 				ar->v2d.align |= V2D_ALIGN_NO_NEG_Y;
 				ar->v2d.keepofs |= V2D_LOCKOFS_Y;
-				
-				/* XXX hrmf, force Y zoom to be fixed? */
+				ar->v2d.keepzoom |= V2D_LOCKZOOM_Y;
 				ar->v2d.min[1]= ar->v2d.max[1]= 500.0;
 			}
 				break;
@@ -5124,7 +5123,7 @@
 				SpaceIpo *sipo= (SpaceIpo *)sl;
 				memcpy(&ar->v2d, &sipo->v2d, sizeof(View2D));
 				
-				ar->v2d.scroll= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_BOTTOM);
+				ar->v2d.scroll |= (V2D_SCROLL_BOTTOM|V2D_SCROLL_SCALE_BOTTOM);
 				ar->v2d.scroll |= (V2D_SCROLL_LEFT|V2D_SCROLL_SCALE_LEFT);
 				
 			}

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2008-12-13 05:43:10 UTC (rev 17818)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2008-12-13 09:25:47 UTC (rev 17819)
@@ -103,7 +103,7 @@
 void UI_view2d_view_restore(const struct bContext *C);
 
 /* grid drawing */
-View2DGrid *UI_view2d_grid_calc(const struct bContext *C, struct View2D *v2d, short unit, short clamp, int winx, int winy);
+View2DGrid *UI_view2d_grid_calc(const struct bContext *C, struct View2D *v2d, short xunits, short xclamp, short yunits, short yclamp, int winx, int winy);
 void UI_view2d_grid_draw(const struct bContext *C, struct View2D *v2d, View2DGrid *grid, int flag);
 void UI_view2d_grid_free(View2DGrid *grid);
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/view2d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2008-12-13 05:43:10 UTC (rev 17818)
+++ branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2008-12-13 09:25:47 UTC (rev 17819)
@@ -640,23 +640,29 @@
  *	- Currently, will return pointer to View2DGrid struct that needs to 
  *	  be freed with UI_view2d_grid_free()
  *	- Is used for scrollbar drawing too (for units drawing)
+ *	- Units + clamping args will be checked, to make sure they are valid values that can be used
+ *	  so it is very possible that we won't return grid at all!
  *	
- *	- unit	= V2D_UNIT_*  grid steps in seconds or frames 
- *	- clamp	= V2D_CLAMP_* only show whole-number intervals
- *	- winx	= width of region we're drawing to
- *	- winy	= height of region we're drawing into
+ *	- xunits,yunits	= V2D_UNIT_*  grid steps in seconds or frames 
+ *	- xclamp,yclamp	= V2D_CLAMP_* only show whole-number intervals
+ *	- winx			= width of region we're drawing to
+ *	- winy			= height of region we're drawing into
  */
-View2DGrid *UI_view2d_grid_calc(const bContext *C, View2D *v2d, short unit, short clamp, int winx, int winy)
+View2DGrid *UI_view2d_grid_calc(const bContext *C, View2D *v2d, short xunits, short xclamp, short yunits, short yclamp, int winx, int winy)
 {
 	View2DGrid *grid;
 	float space, pixels, seconddiv;
 	int secondgrid;
 	
+	/* check that there are at least some workable args */
+	if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) && ELEM(V2D_ARG_DUMMY, yunits, yclamp))
+		return NULL;
+	
 	/* grid here is allocated... */
 	grid= MEM_callocN(sizeof(View2DGrid), "View2DGrid");
 	
 	/* rule: gridstep is minimal GRIDSTEP pixels */
-	if (unit == V2D_UNIT_SECONDS) {
+	if (xunits == V2D_UNIT_SECONDS) {
 		secondgrid= 1;
 		seconddiv= 0.01f * FPS;
 	}
@@ -665,39 +671,46 @@
 		seconddiv= 1.0f;
 	}
 	
-	/* calculate x-axis grid scale */
-	space= v2d->cur.xmax - v2d->cur.xmin;
-	pixels= v2d->mask.xmax - v2d->mask.xmin;
-	
-	grid->dx= (MINGRIDSTEP * space) / (seconddiv * pixels);
-	step_to_grid(&grid->dx, &grid->powerx, unit);
-	grid->dx *= seconddiv;
-	
-	if (clamp == V2D_GRID_CLAMP) {
-		if (grid->dx < 0.1f) grid->dx= 0.1f;
-		grid->powerx-= 2;
-		if (grid->powerx < -2) grid->powerx= -2;
+	/* calculate x-axis grid scale (only if both args are valid) */
+	if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) {
+		space= v2d->cur.xmax - v2d->cur.xmin;
+		pixels= v2d->mask.xmax - v2d->mask.xmin;
+		
+		grid->dx= (MINGRIDSTEP * space) / (seconddiv * pixels);
+		step_to_grid(&grid->dx, &grid->powerx, xunits);
+		grid->dx *= seconddiv;
+		
+		if (xclamp == V2D_GRID_CLAMP) {
+			if (grid->dx < 0.1f) grid->dx= 0.1f;
+			grid->powerx-= 2;
+			if (grid->powerx < -2) grid->powerx= -2;
+		}
 	}
 	
-	/* calculate y-axis grid scale */
-	space= v2d->cur.ymax - v2d->cur.ymin;
-	pixels= winy;
-	
-	grid->dy= MINGRIDSTEP * space / pixels;
-	step_to_grid(&grid->dy, &grid->powery, unit);
-	
-	if (clamp == V2D_GRID_CLAMP) {
-		if (grid->dy < 1.0f) grid->dy= 1.0f;
-		if (grid->powery < 1) grid->powery= 1;
+	/* calculate y-axis grid scale (only if both args are valid) */
+	if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) {
+		space= v2d->cur.ymax - v2d->cur.ymin;
+		pixels= winy;
+		
+		grid->dy= MINGRIDSTEP * space / pixels;
+		step_to_grid(&grid->dy, &grid->powery, yunits);
+		
+		if (yclamp == V2D_GRID_CLAMP) {
+			if (grid->dy < 1.0f) grid->dy= 1.0f;
+			if (grid->powery < 1) grid->powery= 1;
+		}
 	}
 	
 	/* calculate start position */
-	grid->startx= seconddiv*(v2d->cur.xmin/seconddiv - fmod(v2d->cur.xmin/seconddiv, grid->dx/seconddiv));
-	if (v2d->cur.xmin < 0.0f) grid->startx-= grid->dx;
+	if (ELEM(V2D_ARG_DUMMY, xunits, xclamp) == 0) {
+		grid->startx= seconddiv*(v2d->cur.xmin/seconddiv - fmod(v2d->cur.xmin/seconddiv, grid->dx/seconddiv));
+		if (v2d->cur.xmin < 0.0f) grid->startx-= grid->dx;
+	}
+	if (ELEM(V2D_ARG_DUMMY, yunits, yclamp) == 0) {
+		grid->starty= (v2d->cur.ymin - fmod(v2d->cur.ymin, grid->dy));
+		if (v2d->cur.ymin < 0.0f) grid->starty-= grid->dy;
+	}
 	
-	grid->starty= (v2d->cur.ymin - fmod(v2d->cur.ymin, grid->dy));
-	if (v2d->cur.ymin < 0.0f) grid->starty-= grid->dy;
-
 	return grid;
 }
 
@@ -707,6 +720,10 @@
 	float vec1[2], vec2[2];
 	int a, step;
 	
+	/* check for grid first, as it may not exist */
+	if (grid == NULL)
+		return;
+	
 	/* vertical lines */
 	if (flag & V2D_VERTICAL_LINES) {
 		/* initialise initial settings */
@@ -809,7 +826,9 @@
 /* free temporary memory used for drawing grid */
 void UI_view2d_grid_free(View2DGrid *grid)
 {
-	MEM_freeN(grid);
+	/* only free if there's a grid */
+	if (grid)
+		MEM_freeN(grid);
 }
 
 /* *********************************************************************** */
@@ -888,15 +907,7 @@
 		scrollers->yclamp= yclamp;
 		scrollers->yunits= yunits;
 		
-		/* calculate grid only if clamping + units are valid arguments */
-		if ( !((xclamp == V2D_ARG_DUMMY) && (xunits == V2D_ARG_DUMMY) && (yclamp == V2D_ARG_DUMMY) && (yunits == V2D_ARG_DUMMY)) ) { 
-			/* if both axes show scale, give priority to horizontal.. */
-			// FIXME: this doesn't do justice to the vertical scroller calculations...
-			if ((v2d->scroll & V2D_SCROLL_SCALE_HORIZONTAL) && ELEM(V2D_ARG_DUMMY, xclamp, xunits)==0)
-				scrollers->grid= UI_view2d_grid_calc(C, v2d, xunits, xclamp, (hor.xmax - hor.xmin), (vert.ymax - vert.ymin));
-			else if (v2d->scroll & V2D_SCROLL_SCALE_VERTICAL && ELEM(V2D_ARG_DUMMY, yclamp, yunits)==0)
-				scrollers->grid= UI_view2d_grid_calc(C, v2d, yunits, yclamp, (hor.xmax - hor.xmin), (vert.ymax - vert.ymin));
-		}
+		scrollers->grid= UI_view2d_grid_calc(C, v2d, xunits, xclamp, yunits, yclamp, (hor.xmax - hor.xmin), (vert.ymax - vert.ymin));
 	}
 	
 	/* return scrollers */
@@ -1074,7 +1085,7 @@
 		
 		/* scale indicators */
 		// XXX will need to update the font drawing when the new stuff comes in
-		if (v2d->scroll & V2D_SCROLL_SCALE_HORIZONTAL) {
+		if ((v2d->scroll & V2D_SCROLL_SCALE_HORIZONTAL) && (vs->grid)) {
 			View2DGrid *grid= vs->grid;
 			float fac, dfac, fac2, val;
 			
@@ -1082,7 +1093,7 @@
 			 *	- fac is x-coordinate to draw to
 			 *	- dfac is gap between scale markings
 			 */
-			fac= (grid->startx- v2d->cur.xmin) / (v2d->cur.xmax - v2d->cur.xmin);
+			fac= (grid->startx - v2d->cur.xmin) / (v2d->cur.xmax - v2d->cur.xmin);
 			fac= hor.xmin + fac*(hor.xmax - hor.xmin);
 			
 			dfac= (grid->dx) / (v2d->cur.xmax - v2d->cur.xmin);
@@ -1193,7 +1204,7 @@
 		
 		/* scale indiators */
 		// XXX will need to update the font drawing when the new stuff comes in
-		if (v2d->scroll & V2D_SCROLL_SCALE_VERTICAL) {
+		if ((v2d->scroll & V2D_SCROLL_SCALE_VERTICAL) && (vs->grid)) {
 			View2DGrid *grid= vs->grid;
 			float fac, dfac, val;
 			

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c	2008-12-13 05:43:10 UTC (rev 17818)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c	2008-12-13 09:25:47 UTC (rev 17819)
@@ -222,7 +222,7 @@
 	
 	/* grid */
 	unit= (sipo->flag & SIPO_DRAWTIME)? V2D_UNIT_SECONDS : V2D_UNIT_FRAMES;
-	grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_NOCLAMP, ar->winx, ar->winy);
+	grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_NOCLAMP, V2D_UNIT_VALUES/*unit-y*/, V2D_GRID_NOCLAMP, ar->winx, ar->winy);
 	UI_view2d_grid_draw(C, v2d, grid, V2D_GRIDLINES_ALL);
 	UI_view2d_grid_free(grid);
 	

Modified: branches/blender2.5/blender/source/blender/editors/space_time/space_time.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_time/space_time.c	2008-12-13 05:43:10 UTC (rev 17818)
+++ branches/blender2.5/blender/source/blender/editors/space_time/space_time.c	2008-12-13 09:25:47 UTC (rev 17819)
@@ -139,7 +139,7 @@
 
 	/* grid */
 	unit= (stime->flag & TIME_DRAWFRAMES)? V2D_UNIT_FRAMES: V2D_UNIT_SECONDS;
-	grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, ar->winx, ar->winy);
+	grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy);
 	UI_view2d_grid_draw(C, v2d, grid, (V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS));
 	UI_view2d_grid_free(grid);
 





More information about the Bf-blender-cvs mailing list