[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18431] branches/blender2.5/blender/source /blender: 2.5
Ton Roosendaal
ton at blender.org
Fri Jan 9 16:04:52 CET 2009
Revision: 18431
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18431
Author: ton
Date: 2009-01-09 16:04:52 +0100 (Fri, 09 Jan 2009)
Log Message:
-----------
2.5
New: Custom region draw callbacks.
For Martin: an example is now in space_view3d/view3d_edit.c
On middlemouse rotate view, it draws a small square in center.
It works likes this:
#include "ED_space_api.h"
handle= ED_region_draw_cb_activate(region->type, drawfunc, type)
and to stop it:
ED_region_draw_cb_exit(region->type, handle)
drawfunc is of type (const bContext *C, ARegion *ar)
currently it gets called only as type REGION_DRAW_POST, later we
can add more (PRE, POST_XRAY, POST_2D, etc).
For correct usage, these calls should return leaving view transform
unaltered.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
branches/blender2.5/blender/source/blender/editors/include/ED_space_api.h
branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-01-09 15:04:52 UTC (rev 18431)
@@ -115,6 +115,9 @@
/* return context data */
int (*context)(const struct bContext *, const void *, struct bContextDataResult *);
+ /* custom drawing callbacks */
+ ListBase drawcalls;
+
/* hardcoded constraints, smaller than these values region is not visible */
int minsizex, minsizey;
/* default keymaps to add */
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c 2009-01-09 15:04:52 UTC (rev 18431)
@@ -52,6 +52,11 @@
/* not SpaceType itself */
static void spacetype_free(SpaceType *st)
{
+ ARegionType *art;
+
+ for(art= st->regiontypes.first; art; art= art->next)
+ BLI_freelistN(&art->drawcalls);
+
BLI_freelistN(&st->regiontypes);
}
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_space_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_space_api.h 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_space_api.h 2009-01-09 15:04:52 UTC (rev 18431)
@@ -29,6 +29,9 @@
#ifndef ED_SPACE_API_H
#define ED_SPACE_API_H
+struct ARegionType;
+struct bContext;
+
/* the pluginnable API for export to editors */
/* calls for registering default spaces */
@@ -54,5 +57,14 @@
void ED_file_init(void);
void ED_file_exit(void);
+#define REGION_DRAW_PRE 1
+#define REGION_DRAW_POST 0
+
+void *ED_region_draw_cb_activate(struct ARegionType *,
+ void (*draw)(const struct bContext *, struct ARegion *),
+ int type);
+void ED_region_draw_cb_draw(const struct bContext *, struct ARegion *, int);
+void ED_region_draw_cb_exit(struct ARegionType *, void *);
+
#endif /* ED_SPACE_API_H */
Modified: branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c 2009-01-09 15:04:52 UTC (rev 18431)
@@ -123,8 +123,61 @@
}
}
-/* ****************************** space template *********************** */
+/* ********************** custom drawcall api ***************** */
+/* type */
+#define REGION_DRAW_PRE 1
+#define REGION_DRAW_POST 0
+
+typedef struct RegionDrawCB {
+ struct RegionDrawCB *next, *prev;
+
+ void (*draw)(const struct bContext *, struct ARegion *);
+
+ int type;
+
+} RegionDrawCB;
+
+void *ED_region_draw_cb_activate(ARegionType *art,
+ void (*draw)(const struct bContext *, struct ARegion *),
+ int type)
+{
+ RegionDrawCB *rdc= MEM_callocN(sizeof(RegionDrawCB), "RegionDrawCB");
+
+ BLI_addtail(&art->drawcalls, rdc);
+ rdc->draw= draw;
+ rdc->type= type;
+
+ return rdc;
+}
+
+void ED_region_draw_cb_exit(ARegionType *art, void *handle)
+{
+ RegionDrawCB *rdc;
+
+ for(rdc= art->drawcalls.first; rdc; rdc= rdc->next) {
+ if(rdc==(RegionDrawCB *)handle) {
+ BLI_remlink(&art->drawcalls, rdc);
+ MEM_freeN(rdc);
+ return;
+ }
+ }
+}
+
+void ED_region_draw_cb_draw(const bContext *C, ARegion *ar, int type)
+{
+ RegionDrawCB *rdc;
+
+ for(rdc= ar->type->drawcalls.first; rdc; rdc= rdc->next) {
+ if(rdc->type==type)
+ rdc->draw(C, ar);
+ }
+}
+
+
+
+/* ********************* space template *********************** */
+
/* allocate and init some vars */
static SpaceLink *xxx_new(const bContext *C)
{
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-01-09 15:04:52 UTC (rev 18431)
@@ -181,15 +181,6 @@
return (SpaceLink *)v3dn;
}
-static void view3d_main_area_draw(const bContext *C, ARegion *ar)
-{
- /* draw entirely, view changes should be handled here */
- ScrArea *sa= CTX_wm_area(C);
- View3D *v3d= sa->spacedata.first; /* XXX get from region */
-
- drawview3dspace(CTX_wm_screen(C), CTX_data_scene(C), ar, v3d);
-}
-
/* add handlers, stuff you only do once or on area/region changes */
static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
{
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c 2009-01-09 15:04:52 UTC (rev 18431)
@@ -51,6 +51,7 @@
#include "BLI_rand.h"
#include "BKE_anim.h"
+#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
#include "BKE_ipo.h"
@@ -76,6 +77,7 @@
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_screen.h"
+#include "ED_space_api.h"
#include "ED_util.h"
#include "ED_types.h"
@@ -1835,10 +1837,11 @@
return mask;
}
-
-
-void drawview3dspace(bScreen *screen, Scene *scene, ARegion *ar, View3D *v3d)
+void view3d_main_area_draw(const bContext *C, ARegion *ar)
{
+ Scene *scene= CTX_data_scene(C);
+ ScrArea *sa= CTX_wm_area(C);
+ View3D *v3d= sa->spacedata.first; /* XXX get from region */
Scene *sce;
Base *base;
Object *ob;
@@ -1846,7 +1849,7 @@
Object *obact = OBACT;
/* from now on all object derived meshes check this */
- v3d->customdata_mask= get_viewedit_datamask(screen);
+ v3d->customdata_mask= get_viewedit_datamask(CTX_wm_screen(C));
/* update all objects, ipos, matrices, displists, etc. Flags set by depgraph or manual,
no layer check here, gets correct flushed */
@@ -1999,12 +2002,7 @@
view3d_update_depths(ar, v3d);
}
- if(G.moving) {
-// BIF_drawConstraint();
-// if(obedit || (G.f & G_PARTICLEEDIT))
-// BIF_drawPropCircle(); // only editmode and particles have proportional edit
-// BIF_drawSnap();
- }
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST);
// REEB_draw();
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c 2009-01-09 15:04:52 UTC (rev 18431)
@@ -69,6 +69,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
+#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_types.h"
@@ -96,6 +97,7 @@
int origx, origy, oldx, oldy;
int origkey;
+ void *vh; // XXX temp
} ViewOpsData;
#define TRACKBALLSIZE (1.1)
@@ -362,6 +364,10 @@
default:
if(event->type==vod->origkey && event->val==0) {
+ if(vod->vh) {
+ ED_region_draw_cb_exit(CTX_wm_region(C)->type, vod->vh);
+ ED_region_tag_redraw(CTX_wm_region(C));
+ }
MEM_freeN(vod);
op->customdata= NULL;
@@ -372,6 +378,12 @@
return OPERATOR_RUNNING_MODAL;
}
+static void vh_draw(const bContext *C, ARegion *ar)
+{
+ glColor3ub(100, 200, 100);
+ glRectf(-0.2, -0.2, 0.2, 0.2);
+}
+
static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ViewOpsData *vod;
@@ -380,6 +392,8 @@
viewops_data(C, op, event);
vod= op->customdata;
+ vod->vh= ED_region_draw_cb_activate(CTX_wm_region(C)->type, vh_draw, REGION_DRAW_POST);
+
/* switch from camera view when: */
if(vod->v3d->persp != V3D_PERSP) {
Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h 2009-01-09 13:55:45 UTC (rev 18430)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h 2009-01-09 15:04:52 UTC (rev 18431)
@@ -33,6 +33,7 @@
/* internal exports only */
struct bScreen;
+struct ARegion;
struct BoundBox;
struct Object;
struct DerivedMesh;
@@ -64,7 +65,7 @@
#define IS_CLIPPED 12000
/* view3d_header.c */
-void view3d_header_buttons(const struct bContext *C, ARegion *ar);
+void view3d_header_buttons(const struct bContext *C, struct ARegion *ar);
/* view3d_ops.c */
void view3d_operatortypes(void);
@@ -83,7 +84,7 @@
void VIEW3D_OT_drawtype(struct wmOperatorType *ot);
/* drawobject.c */
-void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag);
+void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag);
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
void drawcircball(int mode, float *cent, float rad, float tmat[][4]);
void draw_object_instance(Scene *scene, View3D *v3d, Object *ob, int dt, int outline);
@@ -97,17 +98,17 @@
void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, struct DerivedMesh *dm, int faceselect);
/* view3d_draw.c */
-void drawview3dspace(struct bScreen *screen, Scene *scene, ARegion *ar, View3D *v3d);
-void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *));
+void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
+void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void *));
void view3d_clr_clipping(void);
void view3d_set_clipping(View3D *v3d);
void add_view3d_after(View3D *v3d, Base *base, int type, int flag);
void make_axis_color(char *col, char *col2, char axis);
-void calc_viewborder(Scene *scene, ARegion *ar, View3D *v3d, rctf *viewborder_r);
+void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r);
void circf(float x, float y, float rad);
void circ(float x, float y, float rad);
-void view3d_update_depths(ARegion *ar, View3D *v3d);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list