[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