2.5
All of the view3d drawing code is now 'Context' free. The idea is: - ED_region_do_draw() sets and freezes drawing context - regiontype draw() callback then can pass on other relevant context stuff as function args. Also cleaned up the WM opengl wrappers, to mimic opengl state; no reason to give window pointer anymore.
This commit is contained in:
@@ -37,6 +37,7 @@ struct wmWindowManager;
|
||||
struct wmWindow;
|
||||
struct wmNotifier;
|
||||
struct wmEvent;
|
||||
struct bContext;
|
||||
struct SpaceType;
|
||||
struct AreagionType;
|
||||
struct uiBlock;
|
||||
@@ -45,7 +46,7 @@ struct uiBlock;
|
||||
void ED_region_do_listen(ARegion *ar, struct wmNotifier *note);
|
||||
void ED_region_do_draw(struct bContext *C, struct ARegion *ar);
|
||||
void ED_region_exit(struct bContext *C, struct ARegion *ar);
|
||||
void ED_region_pixelspace(const struct bContext *C, struct ARegion *ar);
|
||||
void ED_region_pixelspace(struct ARegion *ar);
|
||||
void ED_region_init(struct bContext *C, struct ARegion *ar);
|
||||
void ED_region_tag_redraw(struct ARegion *ar);
|
||||
|
||||
@@ -53,7 +54,7 @@ void ED_region_tag_redraw(struct ARegion *ar);
|
||||
void ED_spacetypes_init(void);
|
||||
void ED_spacetypes_keymap(struct wmWindowManager *wm);
|
||||
struct ARegionType *ED_regiontype_from_id(struct SpaceType *st, int regionid);
|
||||
int ED_area_header_standardbuttons(const bContext *C, struct uiBlock *block, int yco);
|
||||
int ED_area_header_standardbuttons(const struct bContext *C, struct uiBlock *block, int yco);
|
||||
void ED_area_overdraw(struct bContext *C);
|
||||
void ED_area_overdraw_flush(struct bContext *C);
|
||||
|
||||
|
||||
@@ -693,7 +693,7 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
|
||||
ED_region_init(C, ar);
|
||||
|
||||
/* get winmat now that we actually have the subwindow */
|
||||
wm_subwindow_set(window, ar->swinid);
|
||||
wmSubWindowSet(window, ar->swinid);
|
||||
wm_subwindow_getmatrix(window, ar->swinid, block->winmat);
|
||||
|
||||
/* notify change and redraw */
|
||||
|
||||
@@ -637,7 +637,6 @@ static void view2d_map_cur_using_mask(View2D *v2d, rctf *curmasked)
|
||||
/* Set view matrices to use 'cur' rect as viewing frame for View2D drawing */
|
||||
void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
|
||||
{
|
||||
wmWindow *window= CTX_wm_window(C);
|
||||
rctf curmasked;
|
||||
float xofs, yofs;
|
||||
|
||||
@@ -651,10 +650,10 @@ void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
|
||||
view2d_map_cur_using_mask(v2d, &curmasked);
|
||||
|
||||
/* set matrix on all appropriate axes */
|
||||
wmOrtho2(window, curmasked.xmin-xofs, curmasked.xmax-xofs, curmasked.ymin-yofs, curmasked.ymax-yofs);
|
||||
wmOrtho2(curmasked.xmin-xofs, curmasked.xmax-xofs, curmasked.ymin-yofs, curmasked.ymax-yofs);
|
||||
|
||||
/* XXX is this necessary? */
|
||||
wmLoadIdentity(window);
|
||||
wmLoadIdentity();
|
||||
}
|
||||
|
||||
/* Set view matrices to only use one axis of 'cur' only
|
||||
@@ -662,7 +661,6 @@ void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
|
||||
*/
|
||||
void UI_view2d_view_orthoSpecial(const bContext *C, View2D *v2d, short xaxis)
|
||||
{
|
||||
wmWindow *window= CTX_wm_window(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
rctf curmasked;
|
||||
float xofs, yofs;
|
||||
@@ -678,19 +676,19 @@ void UI_view2d_view_orthoSpecial(const bContext *C, View2D *v2d, short xaxis)
|
||||
|
||||
/* only set matrix with 'cur' coordinates on relevant axes */
|
||||
if (xaxis)
|
||||
wmOrtho2(window, curmasked.xmin-xofs, curmasked.xmax-xofs, -yofs, ar->winy-yofs);
|
||||
wmOrtho2(curmasked.xmin-xofs, curmasked.xmax-xofs, -yofs, ar->winy-yofs);
|
||||
else
|
||||
wmOrtho2(window, -xofs, ar->winx-xofs, curmasked.ymin-yofs, curmasked.ymax-yofs);
|
||||
wmOrtho2(-xofs, ar->winx-xofs, curmasked.ymin-yofs, curmasked.ymax-yofs);
|
||||
|
||||
/* XXX is this necessary? */
|
||||
wmLoadIdentity(window);
|
||||
wmLoadIdentity();
|
||||
}
|
||||
|
||||
|
||||
/* Restore view matrices after drawing */
|
||||
void UI_view2d_view_restore(const bContext *C)
|
||||
{
|
||||
ED_region_pixelspace(C, CTX_wm_region(C));
|
||||
ED_region_pixelspace(CTX_wm_region(C));
|
||||
}
|
||||
|
||||
/* *********************************************************************** */
|
||||
|
||||
@@ -92,14 +92,13 @@ static void region_draw_emboss(ARegion *ar)
|
||||
glDisable( GL_BLEND );
|
||||
}
|
||||
|
||||
void ED_region_pixelspace(const bContext *C, ARegion *ar)
|
||||
void ED_region_pixelspace(ARegion *ar)
|
||||
{
|
||||
wmWindow *win= CTX_wm_window(C);
|
||||
int width= ar->winrct.xmax-ar->winrct.xmin+1;
|
||||
int height= ar->winrct.ymax-ar->winrct.ymin+1;
|
||||
|
||||
wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
wmLoadIdentity(win);
|
||||
wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
wmLoadIdentity();
|
||||
}
|
||||
|
||||
void ED_region_do_listen(ARegion *ar, wmNotifier *note)
|
||||
@@ -149,7 +148,7 @@ void ED_area_overdraw(bContext *C)
|
||||
ScrArea *sa;
|
||||
|
||||
/* Draw AZones, in screenspace */
|
||||
wm_subwindow_set(win, screen->mainwin);
|
||||
wmSubWindowSet(win, screen->mainwin);
|
||||
|
||||
glEnable( GL_BLEND );
|
||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
@@ -176,7 +175,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
ARegionType *at= ar->type;
|
||||
|
||||
wm_subwindow_set(win, ar->swinid);
|
||||
/* note; this sets state, so we can use wmOrtho and friends */
|
||||
wmSubWindowSet(win, ar->swinid);
|
||||
|
||||
if(ar->swinid && at->draw) {
|
||||
UI_SetTheme(sa);
|
||||
@@ -201,7 +201,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
|
||||
region_draw_emboss(ar);
|
||||
|
||||
/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
|
||||
ED_region_pixelspace(C, ar);
|
||||
ED_region_pixelspace(ar);
|
||||
|
||||
ar->do_draw= 0;
|
||||
}
|
||||
|
||||
@@ -934,7 +934,7 @@ void ED_screen_draw(wmWindow *win)
|
||||
int dir = -1;
|
||||
int dira = -1;
|
||||
|
||||
wm_subwindow_set(win, win->screen->mainwin);
|
||||
wmSubWindowSet(win, win->screen->mainwin);
|
||||
|
||||
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
|
||||
if (sa->flag & AREA_FLAG_DRAWJOINFROM) sa1 = sa;
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
#include "DNA_userdef_types.h"
|
||||
|
||||
#include "BKE_bmfont.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_displist.h"
|
||||
#include "BKE_DerivedMesh.h"
|
||||
#include "BKE_effect.h"
|
||||
|
||||
@@ -73,7 +73,6 @@
|
||||
#include "BLI_rand.h"
|
||||
|
||||
#include "BKE_anim.h" //for the where_on_path function
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_curve.h"
|
||||
#include "BKE_constraint.h" // for the get_constraint_target function
|
||||
#include "BKE_DerivedMesh.h"
|
||||
@@ -662,7 +661,7 @@ static void spotvolume(float *lvec, float *vvec, float inp)
|
||||
return;
|
||||
}
|
||||
|
||||
static void drawlamp(const bContext *C, Scene *scene, View3D *v3d, Object *ob)
|
||||
static void drawlamp(Scene *scene, View3D *v3d, Object *ob)
|
||||
{
|
||||
Lamp *la;
|
||||
float vec[3], lvec[3], vvec[3], circrad, x,y,z;
|
||||
@@ -677,7 +676,7 @@ static void drawlamp(const bContext *C, Scene *scene, View3D *v3d, Object *ob)
|
||||
|
||||
/* we first draw only the screen aligned & fixed scale stuff */
|
||||
glPushMatrix();
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
/* lets calculate the scale: */
|
||||
pixsize= v3d->persmat[0][3]*ob->obmat[3][0]+ v3d->persmat[1][3]*ob->obmat[3][1]+ v3d->persmat[2][3]*ob->obmat[3][2]+ v3d->persmat[3][3];
|
||||
@@ -888,7 +887,7 @@ static void drawlamp(const bContext *C, Scene *scene, View3D *v3d, Object *ob)
|
||||
}
|
||||
|
||||
/* and back to viewspace */
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
VECCOPY(vec, ob->obmat[3]);
|
||||
|
||||
setlinestyle(0);
|
||||
@@ -954,7 +953,7 @@ static void draw_focus_cross(float dist, float size)
|
||||
}
|
||||
|
||||
/* flag similar to draw_object() */
|
||||
static void drawcamera(const bContext *C, Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
static void drawcamera(Scene *scene, View3D *v3d, Object *ob, int flag)
|
||||
{
|
||||
/* a standing up pyramid with (0,0,0) as top */
|
||||
Camera *cam;
|
||||
@@ -1039,13 +1038,13 @@ static void drawcamera(const bContext *C, Scene *scene, View3D *v3d, Object *ob,
|
||||
|
||||
if(flag==0) {
|
||||
if(cam->flag & (CAM_SHOWLIMITS+CAM_SHOWMIST)) {
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
Mat4CpyMat4(vec, ob->obmat);
|
||||
Mat4Ortho(vec);
|
||||
wmMultMatrix(CTX_wm_window(C), vec);
|
||||
wmMultMatrix(vec);
|
||||
|
||||
MTC_Mat4SwapMat4(v3d->persmat, tmat);
|
||||
wmGetSingleMatrix(CTX_wm_window(C), v3d->persmat);
|
||||
wmGetSingleMatrix(v3d->persmat);
|
||||
|
||||
if(cam->flag & CAM_SHOWLIMITS) {
|
||||
draw_limit_line(cam->clipsta, cam->clipend, 0x77FFFF);
|
||||
@@ -2827,7 +2826,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
/* 5. start filling the arrays */
|
||||
/* 6. draw the arrays */
|
||||
/* 7. clean up */
|
||||
static void draw_new_particle_system(const bContext *C, View3D *v3d, Base *base, ParticleSystem *psys, int dt)
|
||||
static void draw_new_particle_system(View3D *v3d, Base *base, ParticleSystem *psys, int dt)
|
||||
{
|
||||
Object *ob=base->object;
|
||||
ParticleSystemModifierData *psmd;
|
||||
@@ -2915,12 +2914,12 @@ static void draw_new_particle_system(const bContext *C, View3D *v3d, Base *base,
|
||||
|
||||
timestep= psys_get_timestep(part);
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) {
|
||||
float mat[4][4];
|
||||
Mat4MulMat4(mat, psys->imat, ob->obmat);
|
||||
wmMultMatrix(CTX_wm_window(C), mat);
|
||||
wmMultMatrix(mat);
|
||||
}
|
||||
|
||||
totpart=psys->totpart;
|
||||
@@ -3498,11 +3497,11 @@ static void draw_new_particle_system(const bContext *C, View3D *v3d, Base *base,
|
||||
psys->lattice=0;
|
||||
}
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmMultMatrix(CTX_wm_window(C), ob->obmat); // bring back local matrix for dtx
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
wmMultMatrix(ob->obmat); // bring back local matrix for dtx
|
||||
}
|
||||
|
||||
static void draw_particle_edit(const bContext *C, Scene *scene, View3D *v3d, Object *ob, ParticleSystem *psys, int dt)
|
||||
static void draw_particle_edit(Scene *scene, View3D *v3d, Object *ob, ParticleSystem *psys, int dt)
|
||||
{
|
||||
ParticleEdit *edit = psys->edit;
|
||||
ParticleData *pa;
|
||||
@@ -3534,7 +3533,7 @@ static void draw_particle_edit(const bContext *C, Scene *scene, View3D *v3d, Obj
|
||||
if((v3d->flag & V3D_ZBUF_SELECT)==0)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
/* get selection theme colors */
|
||||
UI_GetThemeColor3ubv(TH_VERTEX_SELECT, sel);
|
||||
@@ -3684,7 +3683,7 @@ static void draw_particle_edit(const bContext *C, Scene *scene, View3D *v3d, Obj
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glLineWidth(1.0f);
|
||||
|
||||
wmMultMatrix(CTX_wm_window(C), ob->obmat); // bring back local matrix for dtx
|
||||
wmMultMatrix(ob->obmat); // bring back local matrix for dtx
|
||||
glPointSize(1.0);
|
||||
}
|
||||
|
||||
@@ -4164,7 +4163,7 @@ static void drawcone(float *vec, float radius, float height, float tmat[][4])
|
||||
glEnd();
|
||||
}
|
||||
/* return 1 if nothing was drawn */
|
||||
static int drawmball(const bContext *C, Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
static int drawmball(Scene *scene, View3D *v3d, Base *base, int dt)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
MetaBall *mb;
|
||||
@@ -4194,7 +4193,7 @@ static int drawmball(const bContext *C, Scene *scene, View3D *v3d, Base *base, i
|
||||
}
|
||||
else UI_ThemeColor(TH_WIRE);
|
||||
|
||||
wmGetMatrix(CTX_wm_window(C), tmat);
|
||||
wmGetMatrix(tmat);
|
||||
Mat4Invert(imat, tmat);
|
||||
Normalize(imat[0]);
|
||||
Normalize(imat[1]);
|
||||
@@ -4230,7 +4229,7 @@ static int drawmball(const bContext *C, Scene *scene, View3D *v3d, Base *base, i
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void draw_forcefield(const bContext *C, Scene *scene, Object *ob)
|
||||
static void draw_forcefield(Scene *scene, Object *ob)
|
||||
{
|
||||
PartDeflect *pd= ob->pd;
|
||||
float imat[4][4], tmat[4][4];
|
||||
@@ -4252,7 +4251,7 @@ static void draw_forcefield(const bContext *C, Scene *scene, Object *ob)
|
||||
else size = 1.0;
|
||||
|
||||
/* calculus here, is reused in PFIELD_FORCE */
|
||||
wmGetMatrix(CTX_wm_window(C), tmat);
|
||||
wmGetMatrix(tmat);
|
||||
Mat4Invert(imat, tmat);
|
||||
// Normalize(imat[0]); // we don't do this because field doesnt scale either... apart from wind!
|
||||
// Normalize(imat[1]);
|
||||
@@ -4687,7 +4686,7 @@ void drawRBpivot(bRigidBodyJointConstraint *data)
|
||||
}
|
||||
|
||||
/* flag can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET */
|
||||
void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
{
|
||||
static int warning_recursive= 0;
|
||||
Object *ob;
|
||||
@@ -4756,7 +4755,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
base->flag= 0;
|
||||
|
||||
where_is_object_time(ob, (scene->r.cfra));
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
}
|
||||
ce= ce->next;
|
||||
}
|
||||
@@ -4770,7 +4769,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
base->flag= SELECT;
|
||||
|
||||
where_is_object_time(ob, (scene->r.cfra));
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
}
|
||||
ce= ce->next;
|
||||
}
|
||||
@@ -4798,7 +4797,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
/* patch? children objects with a timeoffs change the parents. How to solve! */
|
||||
/* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(ob); */
|
||||
|
||||
wmMultMatrix(CTX_wm_window(C), ob->obmat);
|
||||
wmMultMatrix(ob->obmat);
|
||||
|
||||
/* which wire color */
|
||||
if((flag & DRAW_CONSTCOLOR) == 0) {
|
||||
@@ -5015,21 +5014,21 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
break;
|
||||
case OB_MBALL:
|
||||
if(ob==G.obedit)
|
||||
drawmball(C, scene, v3d, base, dt);
|
||||
drawmball(scene, v3d, base, dt);
|
||||
else if(dt==OB_BOUNDBOX)
|
||||
draw_bounding_volume(ob);
|
||||
else
|
||||
empty_object= drawmball(C, scene, v3d, base, dt);
|
||||
empty_object= drawmball(scene, v3d, base, dt);
|
||||
break;
|
||||
case OB_EMPTY:
|
||||
drawaxes(ob->empty_drawsize, flag, ob->empty_drawtype);
|
||||
break;
|
||||
case OB_LAMP:
|
||||
drawlamp(C, scene, v3d, ob);
|
||||
if(dtx || (base->flag & SELECT)) wmMultMatrix(CTX_wm_window(C), ob->obmat);
|
||||
drawlamp(scene, v3d, ob);
|
||||
if(dtx || (base->flag & SELECT)) wmMultMatrix(ob->obmat);
|
||||
break;
|
||||
case OB_CAMERA:
|
||||
drawcamera(C, scene, v3d, ob, flag);
|
||||
drawcamera(scene, v3d, ob, flag);
|
||||
break;
|
||||
case OB_LATTICE:
|
||||
drawlattice(v3d, ob);
|
||||
@@ -5042,7 +5041,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
default:
|
||||
drawaxes(1.0, flag, OB_ARROWS);
|
||||
}
|
||||
if(ob->pd && ob->pd->forcefield) draw_forcefield(C, scene, ob);
|
||||
if(ob->pd && ob->pd->forcefield) draw_forcefield(scene, ob);
|
||||
|
||||
/* code for new particle system */
|
||||
if( (warning_recursive==0) &&
|
||||
@@ -5055,12 +5054,12 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
glDepthMask(GL_FALSE);
|
||||
|
||||
for(psys=ob->particlesystem.first; psys; psys=psys->next)
|
||||
draw_new_particle_system(C, v3d, base, psys, dt);
|
||||
draw_new_particle_system(v3d, base, psys, dt);
|
||||
|
||||
if(G.f & G_PARTICLEEDIT && ob==OBACT) {
|
||||
psys= NULL; // XXX PE_get_current(ob);
|
||||
if(psys && !G.obedit && psys_in_edit_mode(psys))
|
||||
draw_particle_edit(C, scene, v3d, ob, psys, dt);
|
||||
draw_particle_edit(scene, v3d, ob, psys, dt);
|
||||
}
|
||||
glDepthMask(GL_TRUE);
|
||||
if(col) cpack(col);
|
||||
@@ -5108,7 +5107,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
float tmat[4][4], imat[4][4], vec[3];
|
||||
|
||||
vec[0]= vec[1]= vec[2]= 0.0;
|
||||
wmGetMatrix(CTX_wm_window(C), tmat);
|
||||
wmGetMatrix(tmat);
|
||||
Mat4Invert(imat, tmat);
|
||||
|
||||
setlinestyle(2);
|
||||
@@ -5117,7 +5116,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
}
|
||||
}
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
if(zbufoff) glDisable(GL_DEPTH_TEST);
|
||||
|
||||
@@ -5215,7 +5214,7 @@ void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base
|
||||
free_old_images();
|
||||
}
|
||||
|
||||
void draw_object_ext(const bContext *C, ARegion *ar, View3D *v3d, Scene *scene, Base *base)
|
||||
void draw_object_ext(ARegion *ar, View3D *v3d, Scene *scene, Base *base)
|
||||
{
|
||||
|
||||
if(v3d==NULL || base==NULL) return;
|
||||
@@ -5233,7 +5232,7 @@ void draw_object_ext(const bContext *C, ARegion *ar, View3D *v3d, Scene *scene,
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_set_clipping(v3d);
|
||||
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_clr_clipping();
|
||||
@@ -5362,10 +5361,10 @@ static void bbs_mesh_solid(Object *ob)
|
||||
dm->release(dm);
|
||||
}
|
||||
|
||||
void draw_object_backbufsel(const bContext *C, Scene *scene, View3D *v3d, Object *ob)
|
||||
void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
||||
{
|
||||
|
||||
wmMultMatrix(CTX_wm_window(C), ob->obmat);
|
||||
wmMultMatrix(ob->obmat);
|
||||
|
||||
glClearDepth(1.0); glClear(GL_DEPTH_BUFFER_BIT);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@@ -5403,7 +5402,7 @@ void draw_object_backbufsel(const bContext *C, Scene *scene, View3D *v3d, Object
|
||||
break;
|
||||
}
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ static void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first; /* XXX get from region */
|
||||
|
||||
drawview3dspace(C, ar, v3d);
|
||||
drawview3dspace(CTX_data_scene(C), ar, v3d);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
#include "BLI_rand.h"
|
||||
|
||||
#include "BKE_anim.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_image.h"
|
||||
#include "BKE_ipo.h"
|
||||
#include "BKE_key.h"
|
||||
@@ -1170,7 +1169,7 @@ void add_view3d_after(View3D *v3d, Base *base, int type, int flag)
|
||||
}
|
||||
|
||||
/* clears zbuffer and draws it over */
|
||||
static void view3d_draw_xray(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int clear)
|
||||
static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear)
|
||||
{
|
||||
View3DAfter *v3da, *next;
|
||||
int doit= 0;
|
||||
@@ -1185,7 +1184,7 @@ static void view3d_draw_xray(const bContext *C, Scene *scene, ARegion *ar, View3
|
||||
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
|
||||
next= v3da->next;
|
||||
if(v3da->type==V3D_XRAY) {
|
||||
draw_object(C, scene, ar, v3d, v3da->base, v3da->flag);
|
||||
draw_object(scene, ar, v3d, v3da->base, v3da->flag);
|
||||
BLI_remlink(&v3d->afterdraw, v3da);
|
||||
MEM_freeN(v3da);
|
||||
}
|
||||
@@ -1195,7 +1194,7 @@ static void view3d_draw_xray(const bContext *C, Scene *scene, ARegion *ar, View3
|
||||
}
|
||||
|
||||
/* disables write in zbuffer and draws it over */
|
||||
static void view3d_draw_transp(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d)
|
||||
static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
View3DAfter *v3da, *next;
|
||||
|
||||
@@ -1205,7 +1204,7 @@ static void view3d_draw_transp(const bContext *C, Scene *scene, ARegion *ar, Vie
|
||||
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
|
||||
next= v3da->next;
|
||||
if(v3da->type==V3D_TRANSP) {
|
||||
draw_object(C, scene, ar, v3d, v3da->base, v3da->flag);
|
||||
draw_object(scene, ar, v3d, v3da->base, v3da->flag);
|
||||
BLI_remlink(&v3d->afterdraw, v3da);
|
||||
MEM_freeN(v3da);
|
||||
}
|
||||
@@ -1223,7 +1222,7 @@ static void view3d_draw_transp(const bContext *C, Scene *scene, ARegion *ar, Vie
|
||||
draw_dupli_objects_color was added because when drawing set dupli's
|
||||
we need to force the color
|
||||
*/
|
||||
static void draw_dupli_objects_color(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base *base, int color)
|
||||
static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int color)
|
||||
{
|
||||
ListBase *lb;
|
||||
DupliObject *dob;
|
||||
@@ -1276,7 +1275,7 @@ static void draw_dupli_objects_color(const bContext *C, Scene *scene, ARegion *a
|
||||
|
||||
displist= glGenLists(1);
|
||||
glNewList(displist, GL_COMPILE);
|
||||
draw_object(C, scene, ar, v3d, &tbase, DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, &tbase, DRAW_CONSTCOLOR);
|
||||
glEndList();
|
||||
|
||||
use_displist= 1;
|
||||
@@ -1284,14 +1283,14 @@ static void draw_dupli_objects_color(const bContext *C, Scene *scene, ARegion *a
|
||||
}
|
||||
}
|
||||
if(use_displist) {
|
||||
wmMultMatrix(CTX_wm_window(C), dob->mat);
|
||||
wmMultMatrix(dob->mat);
|
||||
if(boundbox_clip(v3d, dob->mat, bb))
|
||||
glCallList(displist);
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
}
|
||||
else {
|
||||
Mat4CpyMat4(dob->ob->obmat, dob->mat);
|
||||
draw_object(C, scene, ar, v3d, &tbase, DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, &tbase, DRAW_CONSTCOLOR);
|
||||
}
|
||||
|
||||
tbase.object->dt= dt;
|
||||
@@ -1308,7 +1307,7 @@ static void draw_dupli_objects_color(const bContext *C, Scene *scene, ARegion *a
|
||||
glDeleteLists(displist, 1);
|
||||
}
|
||||
|
||||
static void draw_dupli_objects(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base *base)
|
||||
static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *base)
|
||||
{
|
||||
/* define the color here so draw_dupli_objects_color can be called
|
||||
* from the set loop */
|
||||
@@ -1318,7 +1317,7 @@ static void draw_dupli_objects(const bContext *C, Scene *scene, ARegion *ar, Vie
|
||||
if(base->object->dup_group && base->object->dup_group->id.us<1)
|
||||
color= TH_REDALERT;
|
||||
|
||||
draw_dupli_objects_color(C, scene, ar, v3d, base, color);
|
||||
draw_dupli_objects_color(scene, ar, v3d, base, color);
|
||||
}
|
||||
|
||||
|
||||
@@ -1351,7 +1350,7 @@ void view3d_update_depths(ARegion *ar, View3D *v3d)
|
||||
}
|
||||
|
||||
/* Enable sculpting in wireframe mode by drawing sculpt object only to the depth buffer */
|
||||
static void draw_sculpt_depths(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d)
|
||||
static void draw_sculpt_depths(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
Object *ob = OBACT;
|
||||
|
||||
@@ -1370,7 +1369,7 @@ static void draw_sculpt_depths(const bContext *C, Scene *scene, ARegion *ar, Vie
|
||||
|
||||
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
draw_object(C, scene, ar, v3d, BASACT, 0);
|
||||
draw_object(scene, ar, v3d, BASACT, 0);
|
||||
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
|
||||
if(!depth_on)
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
@@ -1381,7 +1380,7 @@ static void draw_sculpt_depths(const bContext *C, Scene *scene, ARegion *ar, Vie
|
||||
}
|
||||
}
|
||||
|
||||
void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
|
||||
void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
|
||||
{
|
||||
Base *base;
|
||||
Scene *sce;
|
||||
@@ -1397,7 +1396,7 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
U.glalphaclip = 0.5; /* not that nice but means we wont zoom into billboards */
|
||||
v3d->flag &= ~V3D_SELECT_OUTLINE;
|
||||
|
||||
setwinmatrixview3d(CTX_wm_window(C), v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */
|
||||
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
@@ -1406,7 +1405,7 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
// persp(PERSP_STORE); // store correct view for persp(PERSP_VIEW) calls
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING) {
|
||||
@@ -1421,9 +1420,9 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
for(SETLOOPER(scene->set, base)) {
|
||||
if(v3d->lay & base->lay) {
|
||||
if (func == NULL || func(base)) {
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
if(base->object->transflag & OB_DUPLI) {
|
||||
draw_dupli_objects_color(C, scene, ar, v3d, base, TH_WIRE);
|
||||
draw_dupli_objects_color(scene, ar, v3d, base, TH_WIRE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1435,9 +1434,9 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
if (func == NULL || func(base)) {
|
||||
/* dupli drawing */
|
||||
if(base->object->transflag & OB_DUPLI) {
|
||||
draw_dupli_objects(C, scene, ar, v3d, base);
|
||||
draw_dupli_objects(scene, ar, v3d, base);
|
||||
}
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1452,7 +1451,7 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
|
||||
next= v3da->next;
|
||||
if(v3da->type==V3D_XRAY) {
|
||||
draw_object(C, scene, ar, v3d, v3da->base, 0);
|
||||
draw_object(scene, ar, v3d, v3da->base, 0);
|
||||
num++;
|
||||
}
|
||||
/* dont remove this time */
|
||||
@@ -1468,7 +1467,7 @@ void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (
|
||||
v3d->xray= FALSE; v3d->transp= TRUE;
|
||||
}
|
||||
|
||||
draw_object(C, scene, ar, v3d, v3da->base, 0); /* Draw Xray or Transp objects normally */
|
||||
draw_object(scene, ar, v3d, v3da->base, 0); /* Draw Xray or Transp objects normally */
|
||||
BLI_remlink(&v3d->afterdraw, v3da);
|
||||
MEM_freeN(v3da);
|
||||
}
|
||||
@@ -1561,11 +1560,11 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
|
||||
}
|
||||
|
||||
|
||||
void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
Scene *sce;
|
||||
Base *base;
|
||||
Object *ob;
|
||||
Scene *scene= CTX_data_scene(C), *sce;
|
||||
char retopo= 0, sculptparticle= 0;
|
||||
Object *obact = OBACT;
|
||||
|
||||
@@ -1587,7 +1586,7 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
|
||||
gpu_update_lamps_shadows(scene, v3d);
|
||||
|
||||
setwinmatrixview3d(CTX_wm_window(C), v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
|
||||
setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */
|
||||
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
@@ -1625,7 +1624,7 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
if(v3d->flag & V3D_CLIPPING)
|
||||
view3d_draw_clipping(v3d);
|
||||
@@ -1652,13 +1651,13 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
}
|
||||
}
|
||||
else {
|
||||
ED_region_pixelspace(C, ar);
|
||||
ED_region_pixelspace(ar);
|
||||
drawgrid(ar, v3d);
|
||||
/* XXX make function? replaces persp(1) */
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->winmat);
|
||||
wmLoadMatrix(v3d->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
wmLoadMatrix(CTX_wm_window(C), v3d->viewmat);
|
||||
wmLoadMatrix(v3d->viewmat);
|
||||
|
||||
if(v3d->flag & V3D_DISPBGPIC) {
|
||||
draw_bgpic(scene, ar, v3d);
|
||||
@@ -1675,10 +1674,10 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
if(v3d->lay & base->lay) {
|
||||
|
||||
UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);
|
||||
draw_object(C, scene, ar, v3d, base, DRAW_CONSTCOLOR|DRAW_SCENESET);
|
||||
draw_object(scene, ar, v3d, base, DRAW_CONSTCOLOR|DRAW_SCENESET);
|
||||
|
||||
if(base->object->transflag & OB_DUPLI) {
|
||||
draw_dupli_objects_color(C, scene, ar, v3d, base, TH_WIRE);
|
||||
draw_dupli_objects_color(scene, ar, v3d, base, TH_WIRE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1692,11 +1691,11 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
|
||||
/* dupli drawing */
|
||||
if(base->object->transflag & OB_DUPLI) {
|
||||
draw_dupli_objects(C, scene, ar, v3d, base);
|
||||
draw_dupli_objects(scene, ar, v3d, base);
|
||||
}
|
||||
if((base->flag & SELECT)==0) {
|
||||
if(base->object!=G.obedit)
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1710,13 +1709,13 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
for(base= scene->base.first; base; base= base->next) {
|
||||
if(v3d->lay & base->lay) {
|
||||
if (base->object==G.obedit || ( base->flag & SELECT) )
|
||||
draw_object(C, scene, ar, v3d, base, 0);
|
||||
draw_object(scene, ar, v3d, base, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if(!retopo && sculptparticle && !(obact && (obact->dtx & OB_DRAWXRAY))) {
|
||||
if(G.f & G_SCULPTMODE)
|
||||
draw_sculpt_depths(C, scene, ar, v3d);
|
||||
draw_sculpt_depths(scene, ar, v3d);
|
||||
view3d_update_depths(ar, v3d);
|
||||
}
|
||||
|
||||
@@ -1732,12 +1731,12 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
// if(scene->radio) RAD_drawall(v3d->drawtype>=OB_SOLID);
|
||||
|
||||
/* Transp and X-ray afterdraw stuff */
|
||||
view3d_draw_transp(C, scene, ar, v3d);
|
||||
view3d_draw_xray(C, scene, ar, v3d, 1); // clears zbuffer if it is used!
|
||||
view3d_draw_transp(scene, ar, v3d);
|
||||
view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used!
|
||||
|
||||
if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) {
|
||||
if(G.f & G_SCULPTMODE)
|
||||
draw_sculpt_depths(C, scene, ar, v3d);
|
||||
draw_sculpt_depths(scene, ar, v3d);
|
||||
view3d_update_depths(ar, v3d);
|
||||
}
|
||||
|
||||
@@ -1755,7 +1754,7 @@ void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d)
|
||||
// if (v3d->flag2 & V3D_DISPGP)
|
||||
// draw_gpencil_3dview(ar, 1);
|
||||
|
||||
ED_region_pixelspace(C, ar);
|
||||
ED_region_pixelspace(ar);
|
||||
|
||||
/* Draw Sculpt Mode brush XXX (removed) */
|
||||
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
#include "BLI_rand.h"
|
||||
|
||||
#include "BKE_action.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_scene.h"
|
||||
@@ -335,7 +334,7 @@ void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode)
|
||||
}
|
||||
|
||||
/* Zooms in on a border drawn by the user */
|
||||
static int view_autodist(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mouse_worldloc[3] ) //, float *autodist )
|
||||
static int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mouse_worldloc[3] ) //, float *autodist )
|
||||
{
|
||||
rcti rect;
|
||||
/* ZBuffer depth vars */
|
||||
@@ -357,7 +356,7 @@ static int view_autodist(const bContext *C, Scene *scene, ARegion *ar, View3D *v
|
||||
|
||||
/* Get Z Depths, needed for perspective, nice for ortho */
|
||||
bgl_get_mats(&mats);
|
||||
draw_depth(C, scene, ar, v3d, NULL);
|
||||
draw_depth(scene, ar, v3d, NULL);
|
||||
|
||||
/* force updating */
|
||||
if (v3d->depths) {
|
||||
@@ -453,7 +452,7 @@ static void view_zoom_mouseloc(ARegion *ar, View3D *v3d, float dfac, short *mous
|
||||
#define COS45 0.70710678118654746
|
||||
#define SIN45 COS45
|
||||
|
||||
void viewmove(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int mode)
|
||||
void viewmove(Scene *scene, ARegion *ar, View3D *v3d, int mode)
|
||||
{
|
||||
static float lastofs[3] = {0,0,0};
|
||||
Object *ob = OBACT;
|
||||
@@ -524,7 +523,7 @@ void viewmove(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int mod
|
||||
VecMulf(obofs, -1.0f);
|
||||
}
|
||||
else if (U.uiflag & USER_ORBIT_ZBUF) {
|
||||
if ((use_sel= view_autodist(C, scene, ar, v3d, mval, obofs))) {
|
||||
if ((use_sel= view_autodist(scene, ar, v3d, mval, obofs))) {
|
||||
if (v3d->persp==V3D_PERSP) {
|
||||
float my_origin[3]; /* original v3d->ofs */
|
||||
float my_pivot[3]; /* view */
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
|
||||
/* internal exports only */
|
||||
|
||||
struct wmWindow;
|
||||
struct BoundBox;
|
||||
struct Object;
|
||||
struct DerivedMesh;
|
||||
@@ -55,18 +54,18 @@ typedef struct ViewDepths {
|
||||
#define IS_CLIPPED 12000
|
||||
|
||||
/* view3d_header.c */
|
||||
void view3d_header_buttons(const bContext *C, ARegion *ar);
|
||||
void view3d_header_buttons(const struct bContext *C, ARegion *ar);
|
||||
|
||||
/* drawobject.c */
|
||||
void draw_object(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag);
|
||||
void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag);
|
||||
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
|
||||
|
||||
/* drawmesh.c */
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, struct DerivedMesh *dm, int faceselect);
|
||||
|
||||
/* view3d_draw.c */
|
||||
void drawview3dspace(const bContext *C, ARegion *ar, View3D *v3d);
|
||||
void draw_depth(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *));
|
||||
void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d);
|
||||
void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *));
|
||||
int view3d_test_clipping(View3D *v3d, float *vec);
|
||||
void view3d_clr_clipping(void);
|
||||
void view3d_set_clipping(View3D *v3d);
|
||||
@@ -103,7 +102,7 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens);
|
||||
void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth);
|
||||
|
||||
short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d, unsigned int *buffer, unsigned int bufsize, rcti *input);
|
||||
short view3d_opengl_select(Scene *scene, ARegion *ar, View3D *v3d, unsigned int *buffer, unsigned int bufsize, rcti *input);
|
||||
void initlocalview(Scene *scene, ARegion *ar, View3D *v3d);
|
||||
void restore_localviewdata(View3D *vd);
|
||||
void endlocalview(Scene *scene, ScrArea *sa);
|
||||
@@ -116,7 +115,7 @@ void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3]);
|
||||
void smooth_view(View3D *v3d, float *ofs, float *quat, float *dist, float *lens);
|
||||
void smooth_view_to_camera(View3D *v3d);
|
||||
|
||||
void setwinmatrixview3d(struct wmWindow *win, View3D *v3d, int winx, int winy, rctf *rect); /* rect: for picking */
|
||||
void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect); /* rect: for picking */
|
||||
void setviewmatrixview3d(View3D *v3d);
|
||||
|
||||
#endif /* ED_VIEW3D_INTERN_H */
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
|
||||
#include "BKE_anim.h"
|
||||
#include "BKE_action.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
@@ -536,7 +535,7 @@ int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, flo
|
||||
|
||||
|
||||
/* important to not set windows active in here, can be renderwin for example */
|
||||
void setwinmatrixview3d(wmWindow *win, View3D *v3d, int winx, int winy, rctf *rect) /* rect: for picking */
|
||||
void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: for picking */
|
||||
{
|
||||
rctf viewplane;
|
||||
float clipsta, clipend, x1, y1, x2, y2;
|
||||
@@ -559,18 +558,18 @@ void setwinmatrixview3d(wmWindow *win, View3D *v3d, int winx, int winy, rctf *re
|
||||
rect->ymax/= (float)winy;
|
||||
rect->ymax= y1+rect->ymax*(y2-y1);
|
||||
|
||||
if(orth) wmOrtho(win, rect->xmin, rect->xmax, rect->ymin, rect->ymax, -clipend, clipend);
|
||||
else wmFrustum(win, rect->xmin, rect->xmax, rect->ymin, rect->ymax, clipsta, clipend);
|
||||
if(orth) wmOrtho(rect->xmin, rect->xmax, rect->ymin, rect->ymax, -clipend, clipend);
|
||||
else wmFrustum(rect->xmin, rect->xmax, rect->ymin, rect->ymax, clipsta, clipend);
|
||||
|
||||
}
|
||||
else {
|
||||
if(orth) wmOrtho(win, x1, x2, y1, y2, clipsta, clipend);
|
||||
else wmFrustum(win, x1, x2, y1, y2, clipsta, clipend);
|
||||
if(orth) wmOrtho(x1, x2, y1, y2, clipsta, clipend);
|
||||
else wmFrustum(x1, x2, y1, y2, clipsta, clipend);
|
||||
}
|
||||
|
||||
/* not sure what this was for? (ton) */
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
wmGetMatrix(win, v3d->winmat);
|
||||
wmGetMatrix(v3d->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
@@ -751,7 +750,7 @@ void setcameratoview3d(View3D *v3d)
|
||||
* This is an error, "Too many objects in select buffer"
|
||||
* and no action should be taken (can crash blender) if this happens
|
||||
*/
|
||||
short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d, unsigned int *buffer, unsigned int bufsize, rcti *input)
|
||||
short view3d_opengl_select(Scene *scene, ARegion *ar, View3D *v3d, unsigned int *buffer, unsigned int bufsize, rcti *input)
|
||||
{
|
||||
rctf rect;
|
||||
short code, hits;
|
||||
@@ -773,7 +772,7 @@ short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d,
|
||||
}
|
||||
|
||||
/* get rid of overlay button matrix XXX ?*/
|
||||
setwinmatrixview3d(CTX_wm_window(C), v3d, ar->winx, ar->winy, &rect);
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, &rect);
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
@@ -791,10 +790,10 @@ short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d,
|
||||
code= 1;
|
||||
|
||||
if(G.obedit && G.obedit->type==OB_MBALL) {
|
||||
draw_object(C, scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
}
|
||||
else if ((G.obedit && G.obedit->type==OB_ARMATURE)) {
|
||||
draw_object(C, scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, BASACT, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
}
|
||||
else {
|
||||
Base *base;
|
||||
@@ -808,7 +807,7 @@ short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d,
|
||||
else {
|
||||
base->selcol= code;
|
||||
glLoadName(code);
|
||||
draw_object(C, scene, ar, v3d, base, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, base, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
|
||||
/* we draw group-duplicators for selection too */
|
||||
if((base->object->transflag & OB_DUPLI) && base->object->dup_group) {
|
||||
@@ -823,7 +822,7 @@ short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d,
|
||||
tbase.object= dob->ob;
|
||||
Mat4CpyMat4(dob->ob->obmat, dob->mat);
|
||||
|
||||
draw_object(C, scene, ar, v3d, &tbase, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
draw_object(scene, ar, v3d, &tbase, DRAW_PICKING|DRAW_CONSTCOLOR);
|
||||
|
||||
Mat4CpyMat4(dob->ob->obmat, dob->omat);
|
||||
}
|
||||
@@ -840,7 +839,7 @@ short view3d_opengl_select(bContext *C, Scene *scene, ARegion *ar, View3D *v3d,
|
||||
hits= glRenderMode(GL_RENDER);
|
||||
|
||||
G.f &= ~G_PICKSEL;
|
||||
setwinmatrixview3d(CTX_wm_window(C), v3d, ar->winx, ar->winy, NULL);
|
||||
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL);
|
||||
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
|
||||
|
||||
if(v3d->drawtype > OB_WIRE) {
|
||||
|
||||
@@ -73,7 +73,7 @@ ListBase *WM_keymap_listbase (wmWindowManager *wm, const char *nameid,
|
||||
int spaceid, int regionid);
|
||||
|
||||
char *WM_key_event_string(short type);
|
||||
char *WM_key_event_operator_string(bContext *C, char *opname, int opcontext, char *str, int len);
|
||||
char *WM_key_event_operator_string(struct bContext *C, char *opname, int opcontext, char *str, int len);
|
||||
|
||||
/* handlers */
|
||||
|
||||
@@ -83,19 +83,19 @@ struct wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, ListBa
|
||||
|
||||
void WM_event_remove_keymap_handler(ListBase *handlers, ListBase *keymap);
|
||||
|
||||
struct wmEventHandler *WM_event_add_ui_handler(bContext *C, ListBase *handlers,
|
||||
int (*func)(bContext *C, struct wmEvent *event, void *userdata),
|
||||
void (*remove)(bContext *C, void *userdata), void *userdata);
|
||||
struct wmEventHandler *WM_event_add_ui_handler(struct bContext *C, ListBase *handlers,
|
||||
int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
|
||||
void (*remove)(struct bContext *C, void *userdata), void *userdata);
|
||||
void WM_event_remove_ui_handler(ListBase *handlers,
|
||||
int (*func)(bContext *C, struct wmEvent *event, void *userdata),
|
||||
void (*remove)(bContext *C, void *userdata), void *userdata);
|
||||
int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
|
||||
void (*remove)(struct bContext *C, void *userdata), void *userdata);
|
||||
|
||||
struct wmEventHandler *WM_event_add_modal_handler(bContext *C, ListBase *handlers, wmOperator *op);
|
||||
void WM_event_remove_handlers(bContext *C, ListBase *handlers);
|
||||
struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, ListBase *handlers, wmOperator *op);
|
||||
void WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
|
||||
|
||||
void WM_event_add_mousemove(bContext *C);
|
||||
void WM_event_add_mousemove(struct bContext *C);
|
||||
|
||||
void WM_event_add_notifier(bContext *C, int type, int value, void *data);
|
||||
void WM_event_add_notifier(struct bContext *C, int type, int value, void *data);
|
||||
|
||||
void wm_event_add (wmWindow *win, struct wmEvent *event_to_add); /* XXX only for warning */
|
||||
|
||||
@@ -126,17 +126,19 @@ void WM_OT_tweak_gesture(wmOperatorType *ot);
|
||||
struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, int type);
|
||||
void WM_gesture_end(struct bContext *C, struct wmGesture *gesture);
|
||||
|
||||
/* OpenGL wrappers, mimicing opengl syntax */
|
||||
void wmLoadMatrix (wmWindow *win, float mat[][4]);
|
||||
void wmGetMatrix (wmWindow *win, float mat[][4]);
|
||||
void wmMultMatrix (wmWindow *win, float mat[][4]);
|
||||
void wmGetSingleMatrix (wmWindow *win, float mat[][4]);
|
||||
void wmScale (wmWindow *win, float x, float y, float z);
|
||||
void wmLoadIdentity (wmWindow *win); /* note: old name clear_view_mat */
|
||||
/* OpenGL wrappers, mimicking opengl syntax */
|
||||
void wmSubWindowSet (wmWindow *win, int swinid);
|
||||
|
||||
void wmFrustum (wmWindow *win, float x1, float x2, float y1, float y2, float n, float f);
|
||||
void wmOrtho (wmWindow *win, float x1, float x2, float y1, float y2, float n, float f);
|
||||
void wmOrtho2 (wmWindow *win, float x1, float x2, float y1, float y2);
|
||||
void wmLoadMatrix (float mat[][4]);
|
||||
void wmGetMatrix (float mat[][4]);
|
||||
void wmMultMatrix (float mat[][4]);
|
||||
void wmGetSingleMatrix (float mat[][4]);
|
||||
void wmScale (float x, float y, float z);
|
||||
void wmLoadIdentity (void); /* note: old name clear_view_mat */
|
||||
|
||||
void wmFrustum (float x1, float x2, float y1, float y2, float n, float f);
|
||||
void wmOrtho (float x1, float x2, float y1, float y2, float n, float f);
|
||||
void wmOrtho2 (float x1, float x2, float y1, float y2);
|
||||
|
||||
/* utilities */
|
||||
void WM_set_framebuffer_index_color(int index);
|
||||
|
||||
@@ -186,7 +186,7 @@ void wm_gesture_draw(wmWindow *win)
|
||||
|
||||
for(; gt; gt= gt->next) {
|
||||
/* all in subwindow space */
|
||||
wm_subwindow_set(win, gt->swinid);
|
||||
wmSubWindowSet(win, gt->swinid);
|
||||
|
||||
if(gt->type==WM_GESTURE_RECT)
|
||||
wm_gesture_draw_rect(win, gt);
|
||||
|
||||
@@ -135,31 +135,6 @@ void wm_subwindow_getmatrix(wmWindow *win, int swinid, float mat[][4])
|
||||
Mat4MulMat4(mat, swin->viewmat, swin->winmat);
|
||||
}
|
||||
|
||||
void wm_subwindow_set(wmWindow *win, int swinid)
|
||||
{
|
||||
wmSubWindow *swin= swin_from_swinid(win, swinid);
|
||||
int width, height;
|
||||
|
||||
if(swin==NULL) {
|
||||
printf("wm_subwindow_set %d: doesn't exist\n", swinid);
|
||||
return;
|
||||
}
|
||||
|
||||
win->curswin= swin;
|
||||
wm_subwindow_getsize(win, swinid, &width, &height);
|
||||
|
||||
glViewport(swin->winrct.xmin, swin->winrct.ymin, width, height);
|
||||
glScissor(swin->winrct.xmin, swin->winrct.ymin, width, height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadMatrixf(&swin->winmat[0][0]);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadMatrixf(&swin->viewmat[0][0]);
|
||||
|
||||
glFlush();
|
||||
|
||||
}
|
||||
|
||||
/* always sets pixel-precise 2D window/view matrices */
|
||||
/* coords is in whole pixels. xmin = 15, xmax= 16: means window is 2 pix big */
|
||||
int wm_subwindow_open(wmWindow *win, rcti *winrct)
|
||||
@@ -183,12 +158,12 @@ int wm_subwindow_open(wmWindow *win, rcti *winrct)
|
||||
Mat4One(swin->winmat);
|
||||
|
||||
/* and we appy it all right away */
|
||||
wm_subwindow_set(win, swin->swinid);
|
||||
wmSubWindowSet(win, swin->swinid);
|
||||
|
||||
/* extra service */
|
||||
wm_subwindow_getsize(win, swin->swinid, &width, &height);
|
||||
wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
wmLoadIdentity(win);
|
||||
wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
wmLoadIdentity();
|
||||
|
||||
return swin->swinid;
|
||||
}
|
||||
@@ -240,9 +215,9 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct)
|
||||
swin->winrct.ymax= win->sizey-1;
|
||||
|
||||
/* extra service */
|
||||
wm_subwindow_set(win, swinid);
|
||||
wmSubWindowSet(win, swinid);
|
||||
wm_subwindow_getsize(win, swinid, &width, &height);
|
||||
wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
wmOrtho2(-0.375, (float)width-0.375, -0.375, (float)height-0.375);
|
||||
}
|
||||
else {
|
||||
printf("wm_subwindow_position: Internal error, bad winid: %d\n", swinid);
|
||||
@@ -252,106 +227,137 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct)
|
||||
/* ---------------- WM versions of OpenGL calls, using glBlah() syntax ------------------------ */
|
||||
/* ----------------- exported in WM_api.h ------------------------------------------------------ */
|
||||
|
||||
/* internal state, no threaded opengl! XXX */
|
||||
static wmWindow *_curwindow= NULL;
|
||||
static wmSubWindow *_curswin= NULL;
|
||||
|
||||
void wmLoadMatrix(wmWindow *win, float mat[][4])
|
||||
/* enable the WM versions of opengl calls */
|
||||
void wmSubWindowSet(wmWindow *win, int swinid)
|
||||
{
|
||||
if(win->curswin==NULL) return;
|
||||
_curswin= swin_from_swinid(win, swinid);
|
||||
int width, height;
|
||||
|
||||
if(_curswin==NULL) {
|
||||
printf("wmSubWindowSet %d: doesn't exist\n", swinid);
|
||||
return;
|
||||
}
|
||||
|
||||
win->curswin= _curswin;
|
||||
_curwindow= win;
|
||||
|
||||
width= _curswin->winrct.xmax - _curswin->winrct.xmin + 1;
|
||||
height= _curswin->winrct.ymax - _curswin->winrct.ymin + 1;
|
||||
glViewport(_curswin->winrct.xmin, _curswin->winrct.ymin, width, height);
|
||||
glScissor(_curswin->winrct.xmin, _curswin->winrct.ymin, width, height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadMatrixf(&_curswin->winmat[0][0]);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadMatrixf(&_curswin->viewmat[0][0]);
|
||||
|
||||
glFlush();
|
||||
|
||||
}
|
||||
|
||||
void wmLoadMatrix(float mat[][4])
|
||||
{
|
||||
if(_curswin==NULL) return;
|
||||
|
||||
glLoadMatrixf(mat);
|
||||
|
||||
if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
|
||||
Mat4CpyMat4(win->curswin->viewmat, mat);
|
||||
Mat4CpyMat4(_curswin->viewmat, mat);
|
||||
else
|
||||
Mat4CpyMat4(win->curswin->winmat, mat);
|
||||
Mat4CpyMat4(_curswin->winmat, mat);
|
||||
}
|
||||
|
||||
void wmGetMatrix(wmWindow *win, float mat[][4])
|
||||
void wmGetMatrix(float mat[][4])
|
||||
{
|
||||
if(win->curswin==NULL) return;
|
||||
if(_curswin==NULL) return;
|
||||
|
||||
if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW) {
|
||||
Mat4CpyMat4(mat, win->curswin->viewmat);
|
||||
Mat4CpyMat4(mat, _curswin->viewmat);
|
||||
} else {
|
||||
Mat4CpyMat4(mat, win->curswin->winmat);
|
||||
Mat4CpyMat4(mat, _curswin->winmat);
|
||||
}
|
||||
}
|
||||
|
||||
void wmMultMatrix(wmWindow *win, float mat[][4])
|
||||
void wmMultMatrix(float mat[][4])
|
||||
{
|
||||
if(win->curswin==NULL) return;
|
||||
if(_curswin==NULL) return;
|
||||
|
||||
glMultMatrixf((float*) mat);
|
||||
|
||||
if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)win->curswin->viewmat);
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->viewmat);
|
||||
else
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)win->curswin->winmat);
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
|
||||
}
|
||||
|
||||
void wmGetSingleMatrix(wmWindow *win, float mat[][4])
|
||||
void wmGetSingleMatrix(float mat[][4])
|
||||
{
|
||||
if(win->curswin)
|
||||
Mat4MulMat4(mat, win->curswin->viewmat, win->curswin->winmat);
|
||||
if(_curswin)
|
||||
Mat4MulMat4(mat, _curswin->viewmat, _curswin->winmat);
|
||||
}
|
||||
|
||||
void wmScale(wmWindow *win, float x, float y, float z)
|
||||
void wmScale(float x, float y, float z)
|
||||
{
|
||||
if(win->curswin==NULL) return;
|
||||
if(_curswin==NULL) return;
|
||||
|
||||
glScalef(x, y, z);
|
||||
|
||||
if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)win->curswin->viewmat);
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->viewmat);
|
||||
else
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)win->curswin->winmat);
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
|
||||
|
||||
}
|
||||
|
||||
void wmLoadIdentity(wmWindow *win)
|
||||
void wmLoadIdentity(void)
|
||||
{
|
||||
if(win->curswin==NULL) return;
|
||||
if(_curswin==NULL) return;
|
||||
|
||||
if (glaGetOneInteger(GL_MATRIX_MODE)==GL_MODELVIEW)
|
||||
Mat4One(win->curswin->viewmat);
|
||||
Mat4One(_curswin->viewmat);
|
||||
else
|
||||
Mat4One(win->curswin->winmat);
|
||||
Mat4One(_curswin->winmat);
|
||||
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
void wmFrustum(wmWindow *win, float x1, float x2, float y1, float y2, float n, float f)
|
||||
void wmFrustum(float x1, float x2, float y1, float y2, float n, float f)
|
||||
{
|
||||
if(win->curswin) {
|
||||
if(_curswin) {
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum(x1, x2, y1, y2, n, f);
|
||||
|
||||
glGetFloatv(GL_PROJECTION_MATRIX, (float *)win->curswin->winmat);
|
||||
glGetFloatv(GL_PROJECTION_MATRIX, (float *)_curswin->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
void wmOrtho(wmWindow *win, float x1, float x2, float y1, float y2, float n, float f)
|
||||
void wmOrtho(float x1, float x2, float y1, float y2, float n, float f)
|
||||
{
|
||||
if(win->curswin) {
|
||||
if(_curswin) {
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
|
||||
glOrtho(x1, x2, y1, y2, n, f);
|
||||
|
||||
glGetFloatv(GL_PROJECTION_MATRIX, (float *)win->curswin->winmat);
|
||||
glGetFloatv(GL_PROJECTION_MATRIX, (float *)_curswin->winmat);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
void wmOrtho2(wmWindow *win, float x1, float x2, float y1, float y2)
|
||||
void wmOrtho2(float x1, float x2, float y1, float y2)
|
||||
{
|
||||
/* prevent opengl from generating errors */
|
||||
if(x1==x2) x2+=1.0;
|
||||
if(y1==y2) y2+=1.0;
|
||||
wmOrtho(win, x1, x2, y1, y2, -100, 100);
|
||||
wmOrtho(x1, x2, y1, y2, -100, 100);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
void wm_subwindows_free(wmWindow *win);
|
||||
|
||||
int wm_subwindow_open(wmWindow *win, rcti *winrct);
|
||||
void wm_subwindow_set(wmWindow *win, int swinid); /* set drawable */
|
||||
void wm_subwindow_close(wmWindow *win, int swinid);
|
||||
int wm_subwindow_get(wmWindow *win); /* returns id */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user