Revision: 16978 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16978 Author: blendix Date: 2008-10-08 20:07:56 +0200 (Wed, 08 Oct 2008)
Log Message: ----------- 2.5 Branch: use themes for drawing the time space, and make view2d grid code a bit nicer. Modified Paths: -------------- branches/blender2.5/blender/source/blender/editors/include/BIF_view2d.h branches/blender2.5/blender/source/blender/editors/interface/view2d.c branches/blender2.5/blender/source/blender/editors/screen/area.c branches/blender2.5/blender/source/blender/editors/space_time/space_time.c Modified: branches/blender2.5/blender/source/blender/editors/include/BIF_view2d.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/BIF_view2d.h 2008-10-08 17:34:26 UTC (rev 16977) +++ branches/blender2.5/blender/source/blender/editors/include/BIF_view2d.h 2008-10-08 18:07:56 UTC (rev 16978) @@ -46,13 +46,18 @@ #define V2D_VERTICAL_AXIS 8 struct View2D; +struct View2DGrid; struct bContext; +typedef struct View2DGrid View2DGrid; + +/* opengl drawing setup */ void BIF_view2d_ortho(const struct bContext *C, struct View2D *v2d); /* grid drawing */ -void BIF_view2d_calc_grid(const struct bContext *C, struct View2D *v2d, int unit, int type, int winx, int winy); -void BIF_view2d_draw_grid(const struct bContext *C, struct View2D *v2d, int flag); +View2DGrid *BIF_view2d_calc_grid(const struct bContext *C, struct View2D *v2d, int unit, int type, int winx, int winy); +void BIF_view2d_draw_grid(const struct bContext *C, struct View2D *v2d, View2DGrid *grid, int flag); +void BIF_view2d_free_grid(View2DGrid *grid); /* coordinate conversion */ void BIF_view2d_region_to_view(struct View2D *v2d, short x, short y, float *viewx, float *viewy); Modified: branches/blender2.5/blender/source/blender/editors/interface/view2d.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/interface/view2d.c 2008-10-08 17:34:26 UTC (rev 16977) +++ branches/blender2.5/blender/source/blender/editors/interface/view2d.c 2008-10-08 18:07:56 UTC (rev 16978) @@ -1,6 +1,8 @@ #include <math.h> +#include "MEM_guardedalloc.h" + #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" @@ -17,16 +19,20 @@ /* minimum pixels per gridstep */ #define IPOSTEP 35 -static float ipogrid_dx, ipogrid_dy, ipogrid_startx, ipogrid_starty; -static int ipomachtx, ipomachty; +struct View2DGrid { + float dx, dy, startx, starty; + int machtx, machty; +}; -static int vertymin, vertymax, horxmin, horxmax; /* globals to test LEFTMOUSE for scrollbar */ +/* OpenGL setup */ void BIF_view2d_ortho(const bContext *C, View2D *v2d) { wmOrtho2(C->window, v2d->cur.xmin, v2d->cur.xmax, v2d->cur.ymin, v2d->cur.ymax); } +/* Grid */ + static void step_to_grid(float *step, int *macht, int unit) { float loga, rem; @@ -65,11 +71,14 @@ } } -void BIF_view2d_calc_grid(const bContext *C, View2D *v2d, int unit, int clamp, int winx, int winy) +View2DGrid *BIF_view2d_calc_grid(const bContext *C, View2D *v2d, int unit, int clamp, int winx, int winy) { + View2DGrid *grid; float space, pixels, seconddiv; int secondgrid; + grid= MEM_callocN(sizeof(View2DGrid), "View2DGrid"); + /* rule: gridstep is minimal IPOSTEP pixels */ /* how large is IPOSTEP pixels? */ @@ -85,42 +94,44 @@ space= v2d->cur.xmax - v2d->cur.xmin; pixels= v2d->mask.xmax - v2d->mask.xmin; - ipogrid_dx= IPOSTEP*space/(seconddiv*pixels); - step_to_grid(&ipogrid_dx, &ipomachtx, unit); - ipogrid_dx*= seconddiv; + grid->dx= IPOSTEP*space/(seconddiv*pixels); + step_to_grid(&grid->dx, &grid->machtx, unit); + grid->dx*= seconddiv; if(clamp == V2D_GRID_CLAMP) { - if(ipogrid_dx < 0.1) ipogrid_dx= 0.1; - ipomachtx-= 2; - if(ipomachtx<-2) ipomachtx= -2; + if(grid->dx < 0.1) grid->dx= 0.1; + grid->machtx-= 2; + if(grid->machtx<-2) grid->machtx= -2; } space= (v2d->cur.ymax - v2d->cur.ymin); pixels= winy; - ipogrid_dy= IPOSTEP*space/pixels; - step_to_grid(&ipogrid_dy, &ipomachty, unit); + grid->dy= IPOSTEP*space/pixels; + step_to_grid(&grid->dy, &grid->machty, unit); if(clamp == V2D_GRID_CLAMP) { - if(ipogrid_dy < 1.0) ipogrid_dy= 1.0; - if(ipomachty<1) ipomachty= 1; + if(grid->dy < 1.0) grid->dy= 1.0; + if(grid->machty<1) grid->machty= 1; } - ipogrid_startx= seconddiv*(v2d->cur.xmin/seconddiv - fmod(v2d->cur.xmin/seconddiv, ipogrid_dx/seconddiv)); - if(v2d->cur.xmin<0.0) ipogrid_startx-= ipogrid_dx; + grid->startx= seconddiv*(v2d->cur.xmin/seconddiv - fmod(v2d->cur.xmin/seconddiv, grid->dx/seconddiv)); + if(v2d->cur.xmin<0.0) grid->startx-= grid->dx; - ipogrid_starty= (v2d->cur.ymin-fmod(v2d->cur.ymin, ipogrid_dy)); - if(v2d->cur.ymin<0.0) ipogrid_starty-= ipogrid_dy; + grid->starty= (v2d->cur.ymin-fmod(v2d->cur.ymin, grid->dy)); + if(v2d->cur.ymin<0.0) grid->starty-= grid->dy; + + return grid; } -void BIF_view2d_draw_grid(const bContext *C, View2D *v2d, int flag) +void BIF_view2d_draw_grid(const bContext *C, View2D *v2d, View2DGrid *grid, int flag) { float vec1[2], vec2[2]; int a, step; if(flag & V2D_VERTICAL_LINES) { /* vertical lines */ - vec1[0]= vec2[0]= ipogrid_startx; - vec1[1]= ipogrid_starty; + vec1[0]= vec2[0]= grid->startx; + vec1[1]= grid->starty; vec2[1]= v2d->cur.ymax; step= (v2d->mask.xmax - v2d->mask.xmin+1)/IPOSTEP; @@ -131,10 +142,10 @@ glBegin(GL_LINE_STRIP); glVertex2fv(vec1); glVertex2fv(vec2); glEnd(); - vec2[0]= vec1[0]+= ipogrid_dx; + vec2[0]= vec1[0]+= grid->dx; } - vec2[0]= vec1[0]-= 0.5*ipogrid_dx; + vec2[0]= vec1[0]-= 0.5*grid->dx; BIF_ThemeColorShade(TH_GRID, 16); @@ -143,14 +154,14 @@ glBegin(GL_LINE_STRIP); glVertex2fv(vec1); glVertex2fv(vec2); glEnd(); - vec2[0]= vec1[0]-= ipogrid_dx; + vec2[0]= vec1[0]-= grid->dx; } } if(flag & V2D_HORIZONTAL_LINES) { /* horizontal lines */ - vec1[0]= ipogrid_startx; - vec1[1]= vec2[1]= ipogrid_starty; + vec1[0]= grid->startx; + vec1[1]= vec2[1]= grid->starty; vec2[0]= v2d->cur.xmax; step= (C->area->winy+1)/IPOSTEP; @@ -160,9 +171,9 @@ glBegin(GL_LINE_STRIP); glVertex2fv(vec1); glVertex2fv(vec2); glEnd(); - vec2[1]= vec1[1]+= ipogrid_dy; + vec2[1]= vec1[1]+= grid->dy; } - vec2[1]= vec1[1]-= 0.5*ipogrid_dy; + vec2[1]= vec1[1]-= 0.5*grid->dy; step++; } @@ -192,6 +203,13 @@ } } +void BIF_view2d_free_grid(View2DGrid *grid) +{ + MEM_freeN(grid); +} + +/* Coordinate conversion */ + void BIF_view2d_region_to_view(View2D *v2d, short x, short y, float *viewx, float *viewy) { float div, ofs; Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-10-08 17:34:26 UTC (rev 16977) +++ branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-10-08 18:07:56 UTC (rev 16978) @@ -47,6 +47,7 @@ #include "WM_types.h" #include "wm_subwindow.h" +#include "BIF_resources.h" #include "BIF_gl.h" #include "BIF_glutil.h" @@ -111,7 +112,9 @@ wm_subwindow_set(C->window, ar->swinid); if(ar->swinid && at->draw) { + BIF_SetTheme(C->area); at->draw(C, ar); + BIF_SetTheme(NULL); } else { float fac= 0.1*ar->swinid; 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-10-08 17:34:26 UTC (rev 16977) +++ branches/blender2.5/blender/source/blender/editors/space_time/space_time.c 2008-10-08 18:07:56 UTC (rev 16978) @@ -114,6 +114,7 @@ { /* draw entirely, windowsize changes should be handled here */ SpaceTime *stime= C->area->spacedata.first; + View2DGrid *grid; float col[3]; int unit, winx, winy; @@ -122,9 +123,6 @@ /* clear and setup matrix */ BIF_GetThemeColor3fv(TH_BACK, col); - col[0]= 1.0f; - col[1]= 0.8f; - col[2]= 0.0f; glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); @@ -135,8 +133,9 @@ /* grid */ unit= (stime->flag & TIME_DRAWFRAMES)? V2D_UNIT_FRAMES: V2D_UNIT_SECONDS; - BIF_view2d_calc_grid(C, &stime->v2d, unit, V2D_GRID_CLAMP, winx, winy); - BIF_view2d_draw_grid(C, &stime->v2d, V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS); + grid= BIF_view2d_calc_grid(C, &stime->v2d, unit, V2D_GRID_CLAMP, winx, winy); + BIF_view2d_draw_grid(C, &stime->v2d, grid, V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS); + BIF_view2d_free_grid(grid); /* current frame */ time_draw_cfra_time(C, stime); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs