[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17598] branches/blender2.5/blender/source /blender: View2D - Commented and finished off cleaning up code added so far

Joshua Leung aligorith at gmail.com
Fri Nov 28 05:01:40 CET 2008


Revision: 17598
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17598
Author:   aligorith
Date:     2008-11-28 05:01:35 +0100 (Fri, 28 Nov 2008)

Log Message:
-----------
View2D - Commented and finished off cleaning up code added so far

Modified Paths:
--------------
    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/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_view2d_types.h

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2008-11-28 00:14:27 UTC (rev 17597)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_view2d.h	2008-11-28 04:01:35 UTC (rev 17598)
@@ -21,45 +21,69 @@
  * All rights reserved.
  *
  * 
- * Contributor(s): Blender Foundation
+ * Contributor(s): Blender Foundation, Joshua Leung
  *
+ *
+ * Generic 2d view with should allow drawing grids,
+ * panning, zooming, scrolling, .. 
  * ***** END GPL LICENSE BLOCK *****
  */
 
 #ifndef UI_VIEW2D_H
 #define UI_VIEW2D_H
 
-/* start of a generic 2d view with should allow drawing grids,
- * panning, zooming, scrolling, .. */
+/* ------------------------------------------ */
+/* Settings: 								*/
 
+/* grid-units (for drawing time) */
 #define V2D_UNIT_SECONDS	0
 #define V2D_UNIT_FRAMES		1
 
+/* clamping of grid values to whole numbers */
 #define V2D_GRID_CLAMP		0
 #define V2D_GRID_NOCLAMP	1
 
+/* generic value to use when coordinate lies out of view when converting */
 #define V2D_IS_CLIPPED	12000
 
-#define V2D_HORIZONTAL_LINES	1
-#define V2D_VERTICAL_LINES		2
-#define V2D_HORIZONTAL_AXIS		4
-#define V2D_VERTICAL_AXIS		8
+/* flags for grid-lines to draw */
+#define V2D_HORIZONTAL_LINES	(1<<0)
+#define V2D_VERTICAL_LINES		(1<<1)
+#define V2D_HORIZONTAL_AXIS		(1<<2)
+#define V2D_VERTICAL_AXIS		(1<<3)
 
+/* ------------------------------------------ */
+/* Macros:								*/
+
+/* test if mouse in scrollbar */
+// XXX do we want more elegant method?
+#define IN_2D_VERT_SCROLL(v2d, co) (BLI_in_rcti(&v2d->vert, co[0], co[1]))
+#define IN_2D_HORIZ_SCROLL(v2d, co) (BLI_in_rcti(&v2d->hor, co[0], co[1]))
+
+/* ------------------------------------------ */
+/* Type definitions: 						*/
+
 struct View2D;
 struct View2DGrid;
 struct bContext;
 
 typedef struct View2DGrid View2DGrid;
 
+/* ----------------------------------------- */
+/* Prototypes:						    */
+
 /* setup */
 void UI_view2d_ortho(const struct bContext *C, struct View2D *v2d);
 void UI_view2d_update_size(struct View2D *v2d, int winx, int winy);
 
 /* grid drawing */
-View2DGrid *UI_view2d_calc_grid(const struct bContext *C, struct View2D *v2d, int unit, int type, int winx, int winy);
+View2DGrid *UI_view2d_calc_grid(const struct bContext *C, struct View2D *v2d, short unit, short type, int winx, int winy);
 void UI_view2d_draw_grid(const struct bContext *C, struct View2D *v2d, View2DGrid *grid, int flag);
 void UI_view2d_free_grid(View2DGrid *grid);
 
+/* scrollbar drawing */
+
+
 /* coordinate conversion */
 void UI_view2d_region_to_view(struct View2D *v2d, short x, short y, float *viewx, float *viewy);
 void UI_view2d_view_to_region(struct View2D *v2d, float x, float y, short *regionx, short *regiony);

Modified: branches/blender2.5/blender/source/blender/editors/interface/view2d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2008-11-28 00:14:27 UTC (rev 17597)
+++ branches/blender2.5/blender/source/blender/editors/interface/view2d.c	2008-11-28 04:01:35 UTC (rev 17598)
@@ -1,3 +1,29 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ * 
+ * Contributor(s): Blender Foundation, Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
 
 #include <math.h>
 
@@ -17,68 +43,50 @@
 #include "UI_resources.h"
 #include "UI_view2d.h"
 
-/* minimum pixels per gridstep */
-#define IPOSTEP 35
+/* *********************************************************************** */
+/* Setup and Refresh Code */
 
-struct View2DGrid {
-	float dx, dy, startx, starty;
-	int machtx, machty;
-};
-
-/* Setup */
-
+/* Set view matrices to ortho for View2D drawing */
 void UI_view2d_ortho(const bContext *C, View2D *v2d)
 {
 	wmOrtho2(C->window, v2d->cur.xmin, v2d->cur.xmax, v2d->cur.ymin, v2d->cur.ymax);
 }
 
+/* Adjust mask size in response to view size changes */
+// XXX pre2.5 -> this used to be called  calc_scrollrcts()
 void UI_view2d_update_size(View2D *v2d, int winx, int winy)
 {
+	/* mask - view frame */
 	v2d->mask.xmin= v2d->mask.ymin= 0;
 	v2d->mask.xmax= winx;
 	v2d->mask.ymax= winy;
 	
-#if 0
-	if(sa->spacetype==SPACE_ACTION) {
-		if(sa->winx > ACTWIDTH+50) { 
-			v2d->mask.xmin+= ACTWIDTH;
-			v2d->hor.xmin+=ACTWIDTH;
-		}
-	}
-	else if(sa->spacetype==SPACE_NLA){
-		if(sa->winx > NLAWIDTH+50) { 
-			v2d->mask.xmin+= NLAWIDTH;
-			v2d->hor.xmin+=NLAWIDTH;
-		}
-	}
-	else if(sa->spacetype==SPACE_IPO) {
-		int ipobutx = calc_ipobuttonswidth(sa);
-		
-		v2d->mask.xmax-= ipobutx;
-		
-		if(v2d->mask.xmax<ipobutx)
-			v2d->mask.xmax= winx;
-	}
-#endif
-	
+	/* scrollbars shrink mask area, but should be based off regionsize */
+	// XXX scrollbars should become limited to one bottom lower edges of region like everyone else does!
 	if(v2d->scroll) {
-		if(v2d->scroll & L_SCROLL) {
+		/* vertical scrollbar */
+		if (v2d->scroll & L_SCROLL) {
+			/* on left-hand edge of region */
 			v2d->vert= v2d->mask;
 			v2d->vert.xmax= SCROLLB;
 			v2d->mask.xmin= SCROLLB;
 		}
 		else if(v2d->scroll & R_SCROLL) {
+			/* on right-hand edge of region */
 			v2d->vert= v2d->mask;
 			v2d->vert.xmin= v2d->vert.xmax-SCROLLB;
 			v2d->mask.xmax= v2d->vert.xmin;
 		}
 		
-		if((v2d->scroll & B_SCROLL) || (v2d->scroll & B_SCROLLO)) {
+		/* horizontal scrollbar */
+		if ((v2d->scroll & B_SCROLL) || (v2d->scroll & B_SCROLLO)) {
+			/* on bottom edge of region (B_SCROLLO is outliner, the ohter is for standard) */
 			v2d->hor= v2d->mask;
 			v2d->hor.ymax= SCROLLH;
 			v2d->mask.ymin= SCROLLH;
 		}
 		else if(v2d->scroll & T_SCROLL) {
+			/* on upper edge of region */
 			v2d->hor= v2d->mask;
 			v2d->hor.ymin= v2d->hor.ymax-SCROLLH;
 			v2d->mask.ymax= v2d->hor.ymin;
@@ -86,58 +94,82 @@
 	}
 }
 
-/* Grid */
+/* *********************************************************************** */
+/* Gridlines */
 
-static void step_to_grid(float *step, int *macht, int unit)
+/* minimum pixels per gridstep */
+#define MINGRIDSTEP 	35
+
+/* View2DGrid is typedef'd in UI_view2d.h */
+struct View2DGrid {
+	float dx, dy;			/* stepsize (in pixels) between gridlines */
+	float startx, starty;	/* */
+	int powerx, powery;		/* step as power of 10 */
+};
+
+/* --------------- */
+
+/* try to write step as a power of 10 */
+static void step_to_grid(float *step, int *power, int unit)
 {
-	float loga, rem;
+	const float loga= log10(*step);
+	float rem;
 	
-	/* try to write step as a power of 10 */
+	*power= (int)(loga);
 	
-	loga= log10(*step);
-	*macht= (int)(loga);
-
-	rem= loga- *macht;
+	rem= loga - (*power);
 	rem= pow(10.0, rem);
 	
-	if(loga<0.0) {
-		if(rem < 0.2) rem= 0.2;
-		else if(rem < 0.5) rem= 0.5;
-		else rem= 1.0;
-
-		*step= rem*pow(10.0, (float)*macht);
-
-		if(unit == V2D_UNIT_FRAMES) {
-			rem = 1.0;
-			*step = 1.0;
+	if (loga < 0.0f) {
+		if (rem < 0.2f) rem= 0.2f;
+		else if(rem < 0.5f) rem= 0.5f;
+		else rem= 1.0f;
+		
+		*step= rem * pow(10.0, (double)(*power));
+		
+		/* for frames, we want 1.0 frame intervals only */
+		if (unit == V2D_UNIT_FRAMES) {
+			rem = 1.0f;
+			*step = 1.0f;
 		}
-
-		if(rem==1.0) (*macht)++;	// prevents printing 1.0 2.0 3.0 etc
+		
+		/* prevents printing 1.0 2.0 3.0 etc */
+		if (rem == 1.0f) (*power)++;	
 	}
 	else {
-		if(rem < 2.0) rem= 2.0;
-		else if(rem < 5.0) rem= 5.0;
-		else rem= 10.0;
+		if (rem < 2.0f) rem= 2.0f;
+		else if(rem < 5.0f) rem= 5.0f;
+		else rem= 10.0f;
 		
-		*step= rem*pow(10.0, (float)*macht);
+		*step= rem * pow(10.0, (double)(*power));
 		
-		(*macht)++;
-		if(rem==10.0) (*macht)++;	// prevents printing 1.0 2.0 3.0 etc
+		(*power)++;
+		/* prevents printing 1.0, 2.0, 3.0, etc. */
+		if (rem == 10.0f) (*power)++;	
 	}
 }
 
-View2DGrid *UI_view2d_calc_grid(const bContext *C, View2D *v2d, int unit, int clamp, int winx, int winy)
+/* Intialise settings necessary for drawing gridlines in a 2d-view 
+ *	- Currently, will return pointer to View2DGrid struct that needs to 
+ *	  be freed with UI_view2d_free_grid()
+ *	- Is used for scrollbar drawing too (for units drawing)  --> (XXX needs review)
+ *	
+ *	- 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
+ */
+View2DGrid *UI_view2d_calc_grid(const bContext *C, View2D *v2d, short unit, short clamp, int winx, int winy)
 {
 	View2DGrid *grid;
 	float space, pixels, seconddiv;
 	int secondgrid;
-
+	
+	/* grid here is allocated... */
 	grid= MEM_callocN(sizeof(View2DGrid), "View2DGrid");
-
-	/* rule: gridstep is minimal IPOSTEP pixels */
-	/* how large is IPOSTEP pixels? */
 	
-	if(unit == V2D_UNIT_FRAMES) {
+	/* rule: gridstep is minimal GRIDSTEP pixels */
+	if (unit == V2D_UNIT_FRAMES) {
 		secondgrid= 0;
 		seconddiv= 0.01f * FPS;
 	}
@@ -145,187 +177,233 @@
 		secondgrid= 1;
 		seconddiv= 1.0f;
 	}
-
+	
 	space= v2d->cur.xmax - v2d->cur.xmin;
 	pixels= v2d->mask.xmax - v2d->mask.xmin;
 	
-	grid->dx= IPOSTEP*space/(seconddiv*pixels);
-	step_to_grid(&grid->dx, &grid->machtx, unit);
-	grid->dx*= seconddiv;
+	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.1) grid->dx= 0.1;
-		grid->machtx-= 2;
-		if(grid->machtx<-2) grid->machtx= -2;
+	if (clamp == V2D_GRID_CLAMP) {
+		if (grid->dx < 0.1f) grid->dx= 0.1f;
+		grid->powerx-= 2;
+		if (grid->powerx < -2) grid->powerx= -2;
 	}
 	
 	space= (v2d->cur.ymax - v2d->cur.ymin);
 	pixels= winy;
-	grid->dy= IPOSTEP*space/pixels;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list