Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-10-08 22:07:56 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-10-08 22:07:56 +0400
commitb589489ef8d56976165fb88ebf7b59dbc417d443 (patch)
tree4f7f157822822a28c361cc1ebe3c2f97e90e3aa0
parente6ba0900b534e0e6503df67964acbb09f8ae4844 (diff)
2.5 Branch: use themes for drawing the time space, and make
view2d grid code a bit nicer.
-rw-r--r--source/blender/editors/include/BIF_view2d.h9
-rw-r--r--source/blender/editors/interface/view2d.c74
-rw-r--r--source/blender/editors/screen/area.c3
-rw-r--r--source/blender/editors/space_time/space_time.c9
4 files changed, 60 insertions, 35 deletions
diff --git a/source/blender/editors/include/BIF_view2d.h b/source/blender/editors/include/BIF_view2d.h
index 191826bb31b..ed86a1cf9c3 100644
--- a/source/blender/editors/include/BIF_view2d.h
+++ b/source/blender/editors/include/BIF_view2d.h
@@ -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);
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index 139ba03bb03..564dd57cc62 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -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 @@ static void step_to_grid(float *step, int *macht, int unit)
}
}
-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 @@ void BIF_view2d_calc_grid(const bContext *C, View2D *v2d, int unit, int clamp, i
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 @@ void BIF_view2d_draw_grid(const bContext *C, View2D *v2d, int flag)
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 @@ void BIF_view2d_draw_grid(const bContext *C, View2D *v2d, int flag)
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 @@ void BIF_view2d_draw_grid(const bContext *C, View2D *v2d, int flag)
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_draw_grid(const bContext *C, View2D *v2d, int flag)
}
}
+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;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index fb72f47e7bf..ac6058a0c5c 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -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 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
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;
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index f6557c5f14f..1d35e7a57e0 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -114,6 +114,7 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
{
/* 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 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
/* 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 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
/* 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);