Replace hard-coded structures in selection callbacks in view3d_select with typedef-ed structures.

Should be no functional changes, but this discovered inconsistency in structures
used for armature circle selection, not sure how harmful this were, but it's not
nice to have such inconsistencies. Anyway, it's resolved now.
This commit is contained in:
Sergey Sharybin
2012-01-26 08:12:12 +00:00
parent 2a3d8a171b
commit 1f996cb95a

View File

@@ -240,6 +240,12 @@ static void EM_backbuf_checkAndSelectTFaces(Mesh *me, int select)
/* *********************** GESTURE AND LASSO ******************* */ /* *********************** GESTURE AND LASSO ******************* */
typedef struct LassoSelectUserData {
ViewContext *vc;
rcti *rect;
int (*mcords)[2], moves, select, pass, done;
} LassoSelectUserData;
static int view3d_selectable_data(bContext *C) static int view3d_selectable_data(bContext *C)
{ {
Object *ob = CTX_data_active_object(C); Object *ob = CTX_data_active_object(C);
@@ -456,7 +462,7 @@ static void lasso_select_boundbox(rcti *rect, int mcords[][2], short moves)
static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index))
{ {
struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; LassoSelectUserData *data = userData;
if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) {
eve->f = data->select?(eve->f|1):(eve->f&~1); eve->f = data->select?(eve->f|1):(eve->f&~1);
@@ -464,7 +470,7 @@ static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, in
} }
static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index) static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index)
{ {
struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; LassoSelectUserData *data = userData;
if (EM_check_backbuf(em_solidoffs+index)) { if (EM_check_backbuf(em_solidoffs+index)) {
if (data->pass==0) { if (data->pass==0) {
@@ -483,16 +489,16 @@ static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, in
} }
static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index))
{ {
struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; LassoSelectUserData *data = userData;
if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) {
EM_select_face_fgon(data->vc.em, efa, data->select); EM_select_face_fgon(data->vc->em, efa, data->select);
} }
} }
static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, short extend, short select) static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
{ {
struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } data; LassoSelectUserData data;
ToolSettings *ts= vc->scene->toolsettings; ToolSettings *ts= vc->scene->toolsettings;
rcti rect; rcti rect;
int bbsel; int bbsel;
@@ -502,7 +508,7 @@ static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves,
/* set editmesh */ /* set editmesh */
vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
data.vc= *vc; data.vc= vc;
data.rect = ▭ data.rect = ▭
data.mcords = mcords; data.mcords = mcords;
data.moves = moves; data.moves = moves;
@@ -610,7 +616,7 @@ static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select)
static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y)
{ {
struct { ViewContext *vc; int (*mcords)[2]; short moves; short select; } *data = userData; LassoSelectUserData *data = userData;
Object *obedit= data->vc->obedit; Object *obedit= data->vc->obedit;
Curve *cu= (Curve*)obedit->data; Curve *cu= (Curve*)obedit->data;
@@ -639,7 +645,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP
static void do_lasso_select_curve(ViewContext *vc, int mcords[][2], short moves, short extend, short select) static void do_lasso_select_curve(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
{ {
struct { ViewContext *vc; int (*mcords)[2]; short moves; short select; } data; LassoSelectUserData data;
/* set vc->editnurb */ /* set vc->editnurb */
data.vc = vc; data.vc = vc;
@@ -656,7 +662,7 @@ static void do_lasso_select_curve(ViewContext *vc, int mcords[][2], short moves,
static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, int y) static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, int y)
{ {
struct { int (*mcords)[2]; short moves; short select; } *data = userData; LassoSelectUserData *data = userData;
if (lasso_inside(data->mcords, data->moves, x, y)) { if (lasso_inside(data->mcords, data->moves, x, y)) {
bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT);
@@ -664,7 +670,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x,
} }
static void do_lasso_select_lattice(ViewContext *vc, int mcords[][2], short moves, short extend, short select) static void do_lasso_select_lattice(ViewContext *vc, int mcords[][2], short moves, short extend, short select)
{ {
struct { int (*mcords)[2]; short moves; short select; } data; LassoSelectUserData data;
/* set editdata in vc */ /* set editdata in vc */
data.mcords = mcords; data.mcords = mcords;
@@ -1624,6 +1630,11 @@ static int mouse_select(bContext *C, const int mval[2], short extend, short obce
/* ******************** border and circle ************************************** */ /* ******************** border and circle ************************************** */
typedef struct BoxSelectUserData {
ViewContext *vc;
rcti *rect;
int select, pass, done;
} BoxSelectUserData;
int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2) int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2)
{ {
@@ -1649,7 +1660,7 @@ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1,
static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y)
{ {
struct { ViewContext *vc; rcti *rect; int select; } *data = userData; BoxSelectUserData *data = userData;
Object *obedit= data->vc->obedit; Object *obedit= data->vc->obedit;
Curve *cu= (Curve*)obedit->data; Curve *cu= (Curve*)obedit->data;
@@ -1677,7 +1688,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi
} }
static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{ {
struct { ViewContext *vc; rcti *rect; int select; } data; BoxSelectUserData data;
data.vc = vc; data.vc = vc;
data.rect = rect; data.rect = rect;
@@ -1694,7 +1705,7 @@ static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int exte
static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y) static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y)
{ {
struct { ViewContext vc; rcti *rect; int select; } *data = userData; BoxSelectUserData *data = userData;
if (BLI_in_rcti(data->rect, x, y)) { if (BLI_in_rcti(data->rect, x, y)) {
bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT);
@@ -1702,9 +1713,9 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i
} }
static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{ {
struct { ViewContext vc; rcti *rect; int select, pass, done; } data; BoxSelectUserData data;
data.vc= *vc; data.vc= vc;
data.rect = rect; data.rect = rect;
data.select = select; data.select = select;
@@ -1719,7 +1730,7 @@ static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int ex
static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index))
{ {
struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; BoxSelectUserData *data = userData;
if (BLI_in_rcti(data->rect, x, y)) { if (BLI_in_rcti(data->rect, x, y)) {
eve->f = data->select?(eve->f|1):(eve->f&~1); eve->f = data->select?(eve->f|1):(eve->f&~1);
@@ -1727,7 +1738,7 @@ static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int
} }
static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index) static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index)
{ {
struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; BoxSelectUserData *data = userData;
if(EM_check_backbuf(em_solidoffs+index)) { if(EM_check_backbuf(em_solidoffs+index)) {
if (data->pass==0) { if (data->pass==0) {
@@ -1744,19 +1755,19 @@ static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int
} }
static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index))
{ {
struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; BoxSelectUserData *data = userData;
if (BLI_in_rcti(data->rect, x, y)) { if (BLI_in_rcti(data->rect, x, y)) {
EM_select_face_fgon(data->vc.em, efa, data->select); EM_select_face_fgon(data->vc->em, efa, data->select);
} }
} }
static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{ {
struct { ViewContext vc; rcti *rect; short select, pass, done; } data; BoxSelectUserData data;
ToolSettings *ts= vc->scene->toolsettings; ToolSettings *ts= vc->scene->toolsettings;
int bbsel; int bbsel;
data.vc= *vc; data.vc= vc;
data.rect = rect; data.rect = rect;
data.select = select; data.select = select;
data.pass = 0; data.pass = 0;
@@ -2251,9 +2262,16 @@ void VIEW3D_OT_select(wmOperatorType *ot)
/* -------------------- circle select --------------------------------------------- */ /* -------------------- circle select --------------------------------------------- */
typedef struct CircleSelectUserData {
ViewContext *vc;
short select;
int mval[2];
float radius;
} CircleSelectUserData;
static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index))
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
@@ -2263,7 +2281,7 @@ static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y
} }
static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int UNUSED(index)) static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int UNUSED(index))
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
if (edge_inside_circle(data->mval[0], data->mval[1], (short) data->radius, x0, y0, x1, y1)) { if (edge_inside_circle(data->mval[0], data->mval[1], (short) data->radius, x0, y0, x1, y1)) {
EM_select_edge(eed, data->select); EM_select_edge(eed, data->select);
@@ -2271,7 +2289,7 @@ static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int
} }
static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index))
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
@@ -2284,7 +2302,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f
{ {
ToolSettings *ts= vc->scene->toolsettings; ToolSettings *ts= vc->scene->toolsettings;
int bbsel; int bbsel;
struct {ViewContext *vc; short select; int mval[2]; float radius; } data; CircleSelectUserData data;
bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0f)); bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0f));
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
@@ -2346,7 +2364,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, int select, const int m
Object *ob= vc->obact; Object *ob= vc->obact;
Mesh *me = ob?ob->data:NULL; Mesh *me = ob?ob->data:NULL;
/* int bbsel; */ /* UNUSED */ /* int bbsel; */ /* UNUSED */
/* struct {ViewContext *vc; short select; int mval[2]; float radius; } data = {NULL}; */ /* UNUSED */ /* CircleSelectUserData data = {NULL}; */ /* UNUSED */
if (me) { if (me) {
em_vertoffs= me->totvert+1; /* max index array */ em_vertoffs= me->totvert+1; /* max index array */
@@ -2361,7 +2379,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, int select, const int m
static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
Object *obedit= data->vc->obedit; Object *obedit= data->vc->obedit;
@@ -2392,7 +2410,7 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint
} }
static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval[2], float rad) static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval[2], float rad)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } data; CircleSelectUserData data;
/* set vc-> edit data */ /* set vc-> edit data */
@@ -2409,7 +2427,7 @@ static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval
static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int y) static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int y)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
@@ -2419,7 +2437,7 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int
} }
static void lattice_circle_select(ViewContext *vc, int select, const int mval[2], float rad) static void lattice_circle_select(ViewContext *vc, int select, const int mval[2], float rad)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } data; CircleSelectUserData data;
/* set vc-> edit data */ /* set vc-> edit data */
@@ -2436,7 +2454,7 @@ static void lattice_circle_select(ViewContext *vc, int select, const int mval[2]
// NOTE: pose-bone case is copied from editbone case... // NOTE: pose-bone case is copied from editbone case...
static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int x, int y) static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int x, int y)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
@@ -2451,7 +2469,7 @@ static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int
} }
static void pose_circle_select(ViewContext *vc, int select, const int mval[2], float rad) static void pose_circle_select(ViewContext *vc, int select, const int mval[2], float rad)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } data; CircleSelectUserData data;
bArmature *arm = vc->obact->data; bArmature *arm = vc->obact->data;
bPose *pose = vc->obact->pose; bPose *pose = vc->obact->pose;
bPoseChannel *pchan; bPoseChannel *pchan;
@@ -2501,7 +2519,7 @@ static void pose_circle_select(ViewContext *vc, int select, const int mval[2], f
static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int x, int y, short head) static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int x, int y, short head)
{ {
struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; CircleSelectUserData *data = userData;
int mx = x - data->mval[0], my = y - data->mval[1]; int mx = x - data->mval[0], my = y - data->mval[1];
float r = sqrt(mx*mx + my*my); float r = sqrt(mx*mx + my*my);
@@ -2524,7 +2542,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int
} }
static void armature_circle_select(ViewContext *vc, int select, const int mval[2], float rad) static void armature_circle_select(ViewContext *vc, int select, const int mval[2], float rad)
{ {
struct {ViewContext *vc; short select, mval[2]; float radius; } data; CircleSelectUserData data;
bArmature *arm= vc->obedit->data; bArmature *arm= vc->obedit->data;
EditBone *ebone; EditBone *ebone;
int change= FALSE; int change= FALSE;