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:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-01-16 03:13:12 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-01-16 03:13:12 +0400
commite0df491d1e465588cc018c6f6d00f72739b71516 (patch)
treefe4cbcdaa4633545bbc817c28eb780b551e5ac05 /source/blender/editors/space_view3d
parent76a211d80947a453f594e4cf0a1e0acc6786eddf (diff)
parent23806a2b7d50082d70a0e4ecab22aafb8433708a (diff)
Merged changes in the trunk up to revision 43404.
Conflicts resolved: source/blender/python/SConscript
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/drawanimviz.c16
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c16
-rw-r--r--source/blender/editors/space_view3d/drawobject.c63
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c29
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c4
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c77
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c56
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h1
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c32
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c140
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c22
12 files changed, 315 insertions, 143 deletions
diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c
index 1784d949761..638bf5b41a7 100644
--- a/source/blender/editors/space_view3d/drawanimviz.c
+++ b/source/blender/editors/space_view3d/drawanimviz.c
@@ -218,23 +218,23 @@ void draw_motion_path_instance(Scene *scene,
col[3]= 255;
for (i=0, mpv=mpv_start; i < len; i+=stepsize, mpv+=stepsize) {
- char str[32];
+ char numstr[32];
float co[3];
/* only draw framenum if several consecutive highlighted points don't occur on same point */
if (i == 0) {
- sprintf(str, "%d", (i+sfra));
+ sprintf(numstr, "%d", (i+sfra));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(co, numstr, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
}
else if ((i > stepsize) && (i < len-stepsize)) {
bMotionPathVert *mpvP = (mpv - stepsize);
bMotionPathVert *mpvN = (mpv + stepsize);
if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) {
- sprintf(str, "%d", (sfra+i));
+ sprintf(numstr, "%d", (sfra+i));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(co, numstr, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -293,11 +293,11 @@ void draw_motion_path_instance(Scene *scene,
float mframe= (float)(sfra + i);
if (BLI_dlrbTree_search_exact(&keys, compare_ak_cfraPtr, &mframe)) {
- char str[32];
+ char numstr[32];
- sprintf(str, "%d", (sfra+i));
+ sprintf(numstr, "%d", (sfra+i));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(co, numstr, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col);
}
}
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index e0b1741b0d0..b1842578c20 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -547,7 +547,7 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index)
return draw_tface__set_draw_legacy(tface, data->has_mcol, matnr);
}
-static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r)
+static int wpaint__setSolidDrawOptions_material(void *userData, int index, int *drawSmooth_r)
{
Mesh *me = (Mesh*)userData;
@@ -562,6 +562,16 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot
return 1;
}
+/* when face select is on, use face hidden flag */
+static int wpaint__setSolidDrawOptions_facemask(void *userData, int index, int *drawSmooth_r)
+{
+ Mesh *me = (Mesh*)userData;
+ MFace *mface = &me->mface[index];
+ if (mface->flag & ME_HIDE) return 0;
+ *drawSmooth_r = 1;
+ return 1;
+}
+
static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
{
Mesh *me = ob->data;
@@ -700,7 +710,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
}
else if(draw_flags & DRAW_FACE_SELECT) {
if(ob->mode & OB_MODE_WEIGHT_PAINT)
- dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, GPU_enable_material, NULL, me, 1);
+ dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_enable_material, NULL, me, 1);
else
dm->drawMappedFacesTex(dm, me->mface ? draw_tface_mapped__set_draw : NULL, NULL, me);
}
@@ -857,7 +867,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o
/* weight paint mode exception */
int useColors= 1;
- dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions,
+ dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_material,
GPU_enable_material, NULL, ob->data, useColors);
}
else {
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 1ee765522be..afe11cdd37f 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2675,7 +2675,7 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em, UnitSet
EditFace *efa;
float v1[3], v2[3], v3[3], v4[3], vmid[3];
float fvec[3];
- char val[32]; /* Stores the measurement display text here */
+ char numstr[32]; /* Stores the measurement display text here */
const char *conv_float; /* Use a float conversion matching the grid size */
unsigned char col[4]= {0, 0, 0, 255}; /* color of the text to draw */
float area; /* area of the face */
@@ -2708,11 +2708,11 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em, UnitSet
mul_mat3_m4_v3(ob->obmat, v2);
}
if(unit->system)
- bUnit_AsString(val, sizeof(val), len_v3v3(v1, v2)*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE);
+ bUnit_AsString(numstr, sizeof(numstr), len_v3v3(v1, v2)*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE);
else
- sprintf(val, conv_float, len_v3v3(v1, v2));
+ sprintf(numstr, conv_float, len_v3v3(v1, v2));
- view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(vmid, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -2742,11 +2742,11 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em, UnitSet
area = area_tri_v3(v1, v2, v3);
if(unit->system)
- bUnit_AsString(val, sizeof(val), area*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); // XXX should be B_UNIT_AREA
+ bUnit_AsString(numstr, sizeof(numstr), area*unit->scale_length, 3, unit->system, B_UNIT_LENGTH, do_split, FALSE); // XXX should be B_UNIT_AREA
else
- sprintf(val, conv_float, area);
+ sprintf(numstr, conv_float, area);
- view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(efa->cent, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -2780,31 +2780,31 @@ static void draw_em_measure_stats(View3D *v3d, Object *ob, EditMesh *em, UnitSet
if( (e4->f & e1->f & SELECT) || (do_moving && (efa->v1->f & SELECT)) ) {
/* Vec 1 */
- sprintf(val,"%.3g", RAD2DEGF(angle_v3v3v3(v4, v1, v2)));
+ sprintf(numstr,"%.3g", RAD2DEGF(angle_v3v3v3(v4, v1, v2)));
interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(fvec, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) {
/* Vec 2 */
- sprintf(val,"%.3g", RAD2DEGF(angle_v3v3v3(v1, v2, v3)));
+ sprintf(numstr,"%.3g", RAD2DEGF(angle_v3v3v3(v1, v2, v3)));
interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(fvec, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) {
/* Vec 3 */
if(efa->v4)
- sprintf(val,"%.3g", RAD2DEGF(angle_v3v3v3(v2, v3, v4)));
+ sprintf(numstr,"%.3g", RAD2DEGF(angle_v3v3v3(v2, v3, v4)));
else
- sprintf(val,"%.3g", RAD2DEGF(angle_v3v3v3(v2, v3, v1)));
+ sprintf(numstr,"%.3g", RAD2DEGF(angle_v3v3v3(v2, v3, v1)));
interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(fvec, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
/* Vec 4 */
if(efa->v4) {
if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) {
- sprintf(val,"%.3g", RAD2DEGF(angle_v3v3v3(v3, v4, v1)));
+ sprintf(numstr,"%.3g", RAD2DEGF(angle_v3v3v3(v3, v4, v1)));
interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(fvec, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -2817,7 +2817,7 @@ static void draw_em_indices(EditMesh *em)
EditFace *f;
EditVert *v;
int i;
- char val[32];
+ char numstr[32];
float pos[3];
unsigned char col[4];
@@ -2827,8 +2827,8 @@ static void draw_em_indices(EditMesh *em)
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col);
for (v = em->verts.first, i = 0; v; v = v->next, i++) {
if (v->f & SELECT) {
- sprintf(val, "%d", i);
- view3d_cached_text_draw_add(v->co, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ sprintf(numstr, "%d", i);
+ view3d_cached_text_draw_add(v->co, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -2837,9 +2837,9 @@ static void draw_em_indices(EditMesh *em)
UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col);
for (e = em->edges.first, i = 0; e; e = e->next, i++) {
if (e->f & SELECT) {
- sprintf(val, "%d", i);
+ sprintf(numstr, "%d", i);
mid_v3_v3v3(pos, e->v1->co, e->v2->co);
- view3d_cached_text_draw_add(pos, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ view3d_cached_text_draw_add(pos, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -2848,8 +2848,8 @@ static void draw_em_indices(EditMesh *em)
UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col);
for (f = em->faces.first, i = 0; f; f = f->next, i++) {
if (f->f & SELECT) {
- sprintf(val, "%d", i);
- view3d_cached_text_draw_add(f->cent, val, 0, V3D_CACHE_TEXT_ASCII, col);
+ sprintf(numstr, "%d", i);
+ view3d_cached_text_draw_add(f->cent, numstr, 0, V3D_CACHE_TEXT_ASCII, col);
}
}
}
@@ -3026,8 +3026,6 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d,
draw_em_fancy_edges(scene, v3d, me, cageDM, 0, eed_act);
}
if(em) {
-// XXX retopo_matrix_update(v3d);
-
draw_em_fancy_verts(scene, v3d, ob, cageDM, eve_act);
if(me->drawflag & ME_DRAWNORMALS) {
@@ -3206,6 +3204,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
bglPolygonOffset(rv3d->dist, 0.0);
glDepthMask(1);
glDisable(GL_LINE_STIPPLE);
+ glDisable(GL_BLEND);
GPU_disable_material();
@@ -4068,7 +4067,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
int a, totpart, totpoint=0, totve=0, drawn, draw_as, totchild=0;
int select=ob->flag&SELECT, create_cdata=0, need_v=0;
GLint polygonmode[2];
- char val[32];
+ char numstr[32];
unsigned char tcol[4]= {0, 0, 0, 255};
/* 1. */
@@ -4456,8 +4455,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if((part->draw & PART_DRAW_NUM || part->draw & PART_DRAW_HEALTH) && (v3d->flag2 & V3D_RENDER_OVERRIDE)==0){
float vec_txt[3];
- char *val_pos= val;
- val[0]= '\0';
+ char *val_pos= numstr;
+ numstr[0]= '\0';
if(part->draw&PART_DRAW_NUM) {
if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) {
@@ -4476,7 +4475,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
/* in path drawing state.co is the end point */
/* use worldspace beause object matrix is already applied */
mul_v3_m4v3(vec_txt, ob->imat, state.co);
- view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol);
+ view3d_cached_text_draw_add(vec_txt, numstr, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol);
}
}
}
@@ -4565,10 +4564,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
for(a=0, pa=psys->particles; a<totpart; a++, pa++){
float vec_txt[3];
- sprintf(val, "%i", a);
+ BLI_snprintf(numstr, sizeof(numstr), "%i", a);
/* use worldspace beause object matrix is already applied */
mul_v3_m4v3(vec_txt, ob->imat, cache[a]->co);
- view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol);
+ view3d_cached_text_draw_add(vec_txt, numstr, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol);
}
}
}
@@ -5353,8 +5352,6 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
short hide_handles = (cu->drawflag & CU_HIDE_HANDLES);
int index;
-// XXX retopo_matrix_update(v3d);
-
/* DispList */
UI_ThemeColor(TH_WIRE);
drawDispList(scene, v3d, rv3d, base, dt);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index cac5d856652..f2906ca9559 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -154,15 +154,23 @@ RegionView3D *ED_view3d_context_rv3d(bContext *C)
/* ideally would return an rv3d but in some cases the region is needed too
* so return that, the caller can then access the ar->regiondata */
-ARegion *ED_view3d_context_region_unlock(bContext *C)
+int ED_view3d_context_user_region(bContext *C, View3D **v3d_r, ARegion **ar_r)
{
ScrArea *sa= CTX_wm_area(C);
+
+ *v3d_r = NULL;
+ *ar_r = NULL;
+
if(sa && sa->spacetype==SPACE_VIEW3D) {
ARegion *ar= CTX_wm_region(C);
+ View3D *v3d = (View3D *)sa->spacedata.first;
+
if(ar) {
RegionView3D *rv3d= ar->regiondata;
if(rv3d && rv3d->viewlock == 0) {
- return ar;
+ *v3d_r = v3d;
+ *ar_r = ar;
+ return 1;
}
else {
ARegion *ar_unlock_user= NULL;
@@ -182,12 +190,22 @@ ARegion *ED_view3d_context_region_unlock(bContext *C)
}
/* camera/perspective view get priority when the active region is locked */
- if(ar_unlock_user) return ar_unlock_user;
- if(ar_unlock) return ar_unlock;
+ if(ar_unlock_user) {
+ *v3d_r = v3d;
+ *ar_r = ar_unlock_user;
+ return 1;
+ }
+
+ if(ar_unlock) {
+ *v3d_r = v3d;
+ *ar_r = ar_unlock;
+ return 1;
+ }
}
}
}
- return NULL;
+
+ return 0;
}
/* Most of the time this isn't needed since you could assume the view matrix was
@@ -553,7 +571,6 @@ static void view3d_main_area_free(ARegion *ar)
if(rv3d->localvd) MEM_freeN(rv3d->localvd);
if(rv3d->clipbb) MEM_freeN(rv3d->clipbb);
- // XXX retopo_free_view_data(rv3d);
if(rv3d->ri) {
// XXX BIF_view3d_previewrender_free(rv3d);
}
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 1b923c7a0cd..985d70d2144 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -188,7 +188,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
dg = BLI_findlink (&ob->defbase, dvert->dw[i].def_nr);
if(dg) {
max+= BLI_snprintf(str, sizeof(str), "%s %%x%d|", dg->name, dvert->dw[i].def_nr);
- if(max<320) strcat(defstr, str);
+ if (max < sizeof(str)) strcat(defstr, str);
}
if(tfp->curdef==dvert->dw[i].def_nr) {
@@ -1334,7 +1334,7 @@ static void view3d_panel_preview(bContext *C, ARegion *ar, short cntrl) // VIEW3
View3D *v3d= sa->spacedata.first;
int ofsx, ofsy;
- block= uiBeginBlock(C, ar, "view3d_panel_preview", UI_EMBOSS);
+ block= uiBeginBlock(C, ar, __func__, UI_EMBOSS);
uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | UI_PNL_SCALE | cntrl);
uiSetPanelHandler(VIEW3D_HANDLER_PREVIEW); // for close and esc
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index d3a0ee27256..ad85ff6dea8 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -863,24 +863,24 @@ static void draw_selected_name(Scene *scene, Object *ob)
}
}
if(name && markern)
- sprintf(info, "(%d) %s %s <%s>", CFRA, ob->id.name+2, name, markern);
+ BLI_snprintf(info, sizeof(info), "(%d) %s %s <%s>", CFRA, ob->id.name+2, name, markern);
else if(name)
- sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, name);
+ BLI_snprintf(info, sizeof(info), "(%d) %s %s", CFRA, ob->id.name+2, name);
else
- sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
+ BLI_snprintf(info, sizeof(info), "(%d) %s", CFRA, ob->id.name+2);
}
else if(ELEM3(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) {
Key *key= NULL;
KeyBlock *kb = NULL;
- char shapes[75];
+ char shapes[MAX_NAME + 10];
/* try to display active shapekey too */
- shapes[0] = 0;
+ shapes[0] = '\0';
key = ob_get_key(ob);
if(key){
kb = BLI_findlink(&key->block, ob->shapenr-1);
if(kb){
- sprintf(shapes, ": %s ", kb->name);
+ BLI_snprintf(shapes, sizeof(shapes), ": %s ", kb->name);
if(ob->shapeflag == OB_SHAPE_LOCK){
strcat(shapes, " (Pinned)");
}
@@ -888,16 +888,16 @@ static void draw_selected_name(Scene *scene, Object *ob)
}
if(markern)
- sprintf(info, "(%d) %s %s <%s>", CFRA, ob->id.name+2, shapes, markern);
+ BLI_snprintf(info, sizeof(info), "(%d) %s %s <%s>", CFRA, ob->id.name+2, shapes, markern);
else
- sprintf(info, "(%d) %s %s", CFRA, ob->id.name+2, shapes);
+ BLI_snprintf(info, sizeof(info), "(%d) %s %s", CFRA, ob->id.name+2, shapes);
}
else {
/* standard object */
if (markern)
- sprintf(info, "(%d) %s <%s>", CFRA, ob->id.name+2, markern);
+ BLI_snprintf(info, sizeof(info), "(%d) %s <%s>", CFRA, ob->id.name+2, markern);
else
- sprintf(info, "(%d) %s", CFRA, ob->id.name+2);
+ BLI_snprintf(info, sizeof(info), "(%d) %s", CFRA, ob->id.name+2);
}
/* color depends on whether there is a keyframe */
@@ -909,9 +909,9 @@ static void draw_selected_name(Scene *scene, Object *ob)
else {
/* no object */
if (markern)
- sprintf(info, "(%d) <%s>", CFRA, markern);
+ BLI_snprintf(info, sizeof(info), "(%d) <%s>", CFRA, markern);
else
- sprintf(info, "(%d)", CFRA);
+ BLI_snprintf(info, sizeof(info), "(%d)", CFRA);
/* color is always white */
UI_ThemeColor(TH_TEXT_HI);
@@ -920,7 +920,7 @@ static void draw_selected_name(Scene *scene, Object *ob)
if (U.uiflag & USER_SHOW_ROTVIEWICON)
offset = 14 + (U.rvisize * 2);
- BLF_draw_default(offset, 10, 0.0f, info, sizeof(info)-1);
+ BLF_draw_default(offset, 10, 0.0f, info, sizeof(info));
}
static void view3d_camera_border(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, rctf *viewborder_r, short no_shift, short no_zoom)
@@ -2251,32 +2251,46 @@ CustomDataMask ED_view3d_datamask(Scene *scene, View3D *v3d)
return mask;
}
+
+CustomDataMask ED_view3d_object_datamask(Scene *scene)
+{
+ Object *ob= scene->basact ? scene->basact->object : NULL;
+ CustomDataMask mask= 0;
+
+ if (ob) {
+ /* check if we need tfaces & mcols due to face select or texture paint */
+ if (paint_facesel_test(ob) || (ob->mode & OB_MODE_TEXTURE_PAINT)) {
+ mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
+ }
+
+ /* check if we need mcols due to vertex paint or weightpaint */
+ if (ob->mode & OB_MODE_VERTEX_PAINT) {
+ mask |= CD_MASK_MCOL;
+ }
+
+ if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ mask |= CD_MASK_WEIGHT_MCOL;
+ }
+ }
+
+ return mask;
+}
+
/* goes over all modes and view3d settings */
-CustomDataMask ED_viewedit_datamask(bScreen *screen)
+CustomDataMask ED_view3d_screen_datamask(bScreen *screen)
{
Scene *scene= screen->scene;
- Object *ob= scene->basact ? scene->basact->object : NULL;
CustomDataMask mask = CD_MASK_BAREMESH;
ScrArea *sa;
- /* check if we need tfaces & mcols due to face select or texture paint */
- if(paint_facesel_test(ob) || (ob && ob->mode & OB_MODE_TEXTURE_PAINT))
- mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
-
/* check if we need tfaces & mcols due to view mode */
for(sa = screen->areabase.first; sa; sa = sa->next) {
if(sa->spacetype == SPACE_VIEW3D) {
mask |= ED_view3d_datamask(scene, (View3D *)sa->spacedata.first);
}
}
-
- /* check if we need mcols due to vertex paint or weightpaint */
- if(ob) {
- if(ob->mode & OB_MODE_VERTEX_PAINT)
- mask |= CD_MASK_MCOL;
- if(ob->mode & OB_MODE_WEIGHT_PAINT)
- mask |= CD_MASK_WEIGHT_MCOL;
- }
+
+ mask |= ED_view3d_object_datamask(scene);
return mask;
}
@@ -2609,7 +2623,7 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar)
BLI_snprintf(printable, sizeof(printable), "fps: %i", (int)(fps+0.5f));
}
- BLF_draw_default_ascii(22, ar->winy-17, 0.0f, printable, sizeof(printable)-1);
+ BLF_draw_default_ascii(22, ar->winy-17, 0.0f, printable, sizeof(printable));
}
static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar)
@@ -2876,14 +2890,15 @@ static void view3d_main_area_draw_info(const bContext *C, ARegion *ar, const cha
draw_viewport_name(ar, v3d);
}
if (grid_unit) { /* draw below the viewport name */
- char tstr[32]= "";
+ char numstr[32]= "";
UI_ThemeColor(TH_TEXT_HI);
if(v3d->grid != 1.0f) {
- BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", grid_unit, v3d->grid);
+ BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
}
- BLF_draw_default_ascii(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */
+ BLF_draw_default_ascii(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f,
+ numstr[0] ? numstr : grid_unit, sizeof(numstr));
}
}
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index fa970f7f9d8..224df5b9f80 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1585,8 +1585,8 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
v3d= sa->spacedata.first;
rv3d= ar->regiondata;
- mx= RNA_property_is_set(op->ptr, "mx") ? RNA_int_get(op->ptr, "mx") : ar->winx / 2;
- my= RNA_property_is_set(op->ptr, "my") ? RNA_int_get(op->ptr, "my") : ar->winy / 2;
+ mx= RNA_struct_property_is_set(op->ptr, "mx") ? RNA_int_get(op->ptr, "mx") : ar->winx / 2;
+ my= RNA_struct_property_is_set(op->ptr, "my") ? RNA_int_get(op->ptr, "my") : ar->winy / 2;
use_cam_zoom= (rv3d->persp==RV3D_CAMOB) && !(rv3d->is_persp && ED_view3d_camera_lock_check(v3d, rv3d));
@@ -1667,12 +1667,12 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event)
vod= op->customdata;
/* if one or the other zoom position aren't set, set from event */
- if (!RNA_property_is_set(op->ptr, "mx") || !RNA_property_is_set(op->ptr, "my")) {
+ if (!RNA_struct_property_is_set(op->ptr, "mx") || !RNA_struct_property_is_set(op->ptr, "my")) {
RNA_int_set(op->ptr, "mx", event->x);
RNA_int_set(op->ptr, "my", event->y);
}
- if(RNA_property_is_set(op->ptr, "delta")) {
+ if(RNA_struct_property_is_set(op->ptr, "delta")) {
viewzoom_exec(C, op);
}
else {
@@ -1880,12 +1880,12 @@ static int viewdolly_invoke(bContext *C, wmOperator *op, wmEvent *event)
vod= op->customdata;
/* if one or the other zoom position aren't set, set from event */
- if (!RNA_property_is_set(op->ptr, "mx") || !RNA_property_is_set(op->ptr, "my")) {
+ if (!RNA_struct_property_is_set(op->ptr, "mx") || !RNA_struct_property_is_set(op->ptr, "my")) {
RNA_int_set(op->ptr, "mx", event->x);
RNA_int_set(op->ptr, "my", event->y);
}
- if(RNA_property_is_set(op->ptr, "delta")) {
+ if(RNA_struct_property_is_set(op->ptr, "delta")) {
viewdolly_exec(C, op);
}
else {
@@ -2653,13 +2653,16 @@ static void axis_set_view(bContext *C, View3D *v3d, ARegion *ar, float q1, float
static int viewnumpad_exec(bContext *C, wmOperator *op)
{
- View3D *v3d = CTX_wm_view3d(C);
- ARegion *ar= ED_view3d_context_region_unlock(C);
- RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
+ View3D *v3d;
+ ARegion *ar;
+ RegionView3D *rv3d;
Scene *scene= CTX_data_scene(C);
- static int perspo=RV3D_PERSP;
+ static int perspo = RV3D_PERSP;
int viewnum, align_active, nextperspo;
+ ED_view3d_context_user_region(C, &v3d, &ar);
+ rv3d = ar->regiondata;
+
viewnum = RNA_enum_get(op->ptr, "type");
align_active = RNA_boolean_get(op->ptr, "align_active");
@@ -2783,7 +2786,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot)
/* api callbacks */
ot->exec= viewnumpad_exec;
- ot->poll= ED_operator_rv3d_unlock_poll;
+ ot->poll= ED_operator_rv3d_user_region_poll;
/* flags */
ot->flag= 0;
@@ -2801,12 +2804,16 @@ static EnumPropertyItem prop_view_orbit_items[] = {
static int vieworbit_exec(bContext *C, wmOperator *op)
{
- View3D *v3d= CTX_wm_view3d(C);
- ARegion *ar= ED_view3d_context_region_unlock(C);
- RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
+ View3D *v3d;
+ ARegion *ar;
+ RegionView3D *rv3d;
float phi, q1[4], new_quat[4];
int orbitdir;
+ /* no NULL check is needed, poll checks */
+ ED_view3d_context_user_region(C, &v3d, &ar);
+ rv3d = ar->regiondata;
+
orbitdir = RNA_enum_get(op->ptr, "type");
if(rv3d->viewlock==0) {
@@ -2852,7 +2859,7 @@ void VIEW3D_OT_view_orbit(wmOperatorType *ot)
/* api callbacks */
ot->exec= vieworbit_exec;
- ot->poll= ED_operator_rv3d_unlock_poll;
+ ot->poll= ED_operator_rv3d_user_region_poll;
/* flags */
ot->flag= 0;
@@ -2909,8 +2916,13 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot)
static int viewpersportho_exec(bContext *C, wmOperator *UNUSED(op))
{
- ARegion *ar= ED_view3d_context_region_unlock(C);
- RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
+ View3D *v3d_dummy;
+ ARegion *ar;
+ RegionView3D *rv3d;
+
+ /* no NULL check is needed, poll checks */
+ ED_view3d_context_user_region(C, &v3d_dummy, &ar);
+ rv3d = ar->regiondata;
if(rv3d->viewlock==0) {
if(rv3d->persp!=RV3D_ORTHO)
@@ -2932,7 +2944,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot)
/* api callbacks */
ot->exec= viewpersportho_exec;
- ot->poll= ED_operator_rv3d_unlock_poll;
+ ot->poll= ED_operator_rv3d_user_region_poll;
/* flags */
ot->flag= 0;
@@ -2960,16 +2972,16 @@ static int background_image_add_invoke(bContext *C, wmOperator *op, wmEvent *UNU
View3D *v3d= CTX_wm_view3d(C);
Image *ima= NULL;
BGpic *bgpic;
- char name[32];
+ char name[MAX_ID_NAME-2];
/* check input variables */
- if(RNA_property_is_set(op->ptr, "filepath")) {
+ if(RNA_struct_property_is_set(op->ptr, "filepath")) {
char path[FILE_MAX];
RNA_string_get(op->ptr, "filepath", path);
ima= BKE_add_image_file(path);
}
- else if(RNA_property_is_set(op->ptr, "name")) {
+ else if(RNA_struct_property_is_set(op->ptr, "name")) {
RNA_string_get(op->ptr, "name", name);
ima= (Image *)find_id("IM", name);
}
@@ -3007,7 +3019,7 @@ void VIEW3D_OT_background_image_add(wmOperatorType *ot)
ot->flag = 0;
/* properties */
- RNA_def_string(ot->srna, "name", "Image", 24, "Name", "Image name to assign");
+ RNA_def_string(ot->srna, "name", "Image", MAX_ID_NAME-2, "Name", "Image name to assign");
RNA_def_string(ot->srna, "filepath", "Path", FILE_MAX, "Filepath", "Path to image file");
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 42f58ba26f7..e7c9a1bd3a0 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -152,6 +152,7 @@ void VIEW3D_OT_select_extend(struct wmOperatorType *ot);
void VIEW3D_OT_select_circle(struct wmOperatorType *ot);
void VIEW3D_OT_select_border(struct wmOperatorType *ot);
void VIEW3D_OT_select_lasso(struct wmOperatorType *ot);
+void VIEW3D_OT_select_menu(struct wmOperatorType *ot);
void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
void VIEW3D_OT_camera_to_view(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index aeb850243c5..4594544b4f8 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -85,6 +85,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_enable_manipulator);
WM_operatortype_append(VIEW3D_OT_cursor3d);
WM_operatortype_append(VIEW3D_OT_select_lasso);
+ WM_operatortype_append(VIEW3D_OT_select_menu);
WM_operatortype_append(VIEW3D_OT_camera_to_view);
WM_operatortype_append(VIEW3D_OT_camera_to_view_selected);
WM_operatortype_append(VIEW3D_OT_object_as_camera);
@@ -261,33 +262,54 @@ void view3d_keymap(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "value_2", "SOLID");
/* selection*/
- WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
+ RNA_boolean_set(kmi->ptr, "extend", FALSE);
+ RNA_boolean_set(kmi->ptr, "center", FALSE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
+ RNA_boolean_set(kmi->ptr, "enumerate", FALSE);
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "center", FALSE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
+ RNA_boolean_set(kmi->ptr, "enumerate", FALSE);
kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "extend", FALSE);
RNA_boolean_set(kmi->ptr, "center", TRUE);
RNA_boolean_set(kmi->ptr, "object", TRUE); /* use Ctrl+Select for 2 purposes */
+ RNA_boolean_set(kmi->ptr, "enumerate", FALSE);
kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", FALSE);
+ RNA_boolean_set(kmi->ptr, "center", FALSE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
/* selection key-combinations */
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
- RNA_boolean_set(kmi->ptr, "center", TRUE);
RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
+ RNA_boolean_set(kmi->ptr, "enumerate", FALSE);
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", FALSE);
RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "center", FALSE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL|KM_ALT, 0);
- RNA_boolean_set(kmi->ptr, "center", TRUE);
RNA_boolean_set(kmi->ptr, "extend", TRUE);
+ RNA_boolean_set(kmi->ptr, "center", TRUE);
+ RNA_boolean_set(kmi->ptr, "object", FALSE);
RNA_boolean_set(kmi->ptr, "enumerate", TRUE);
WM_keymap_add_item(keymap, "VIEW3D_OT_select_border", BKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "VIEW3D_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "VIEW3D_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_SHIFT|KM_CTRL, 0)->ptr, "deselect", 1);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "deselect", FALSE);
+ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_SHIFT|KM_CTRL, 0);
+ RNA_boolean_set(kmi->ptr, "deselect", TRUE);
WM_keymap_add_item(keymap, "VIEW3D_OT_select_circle", CKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_clip_border", BKEY, KM_PRESS, KM_ALT, 0);
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 551eb3cd6b5..ce93ca56a65 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -74,6 +74,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "ED_armature.h"
#include "ED_curve.h"
@@ -1045,7 +1046,104 @@ static unsigned int samplerect(unsigned int *buf, int size, unsigned int dontdo)
/* The max number of menu items in an object select menu */
+typedef struct SelMenuItemF {
+ char idname[MAX_ID_NAME-2];
+ int icon;
+} SelMenuItemF;
+
#define SEL_MENU_SIZE 22
+static SelMenuItemF object_mouse_select_menu_data[SEL_MENU_SIZE];
+
+/* special (crappy) operator only for menu select */
+static EnumPropertyItem *object_select_menu_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free)
+{
+ EnumPropertyItem *item= NULL, item_tmp= {0};
+ int totitem= 0;
+ int i= 0;
+
+ /* dont need context but avoid docgen using this */
+ if (C == NULL || object_mouse_select_menu_data[i].idname[0] == '\0') {
+ return DummyRNA_NULL_items;
+ }
+
+ for (; i < SEL_MENU_SIZE && object_mouse_select_menu_data[i].idname[0] != '\0'; i++) {
+ item_tmp.name= object_mouse_select_menu_data[i].idname;
+ item_tmp.identifier= object_mouse_select_menu_data[i].idname;
+ item_tmp.value= i;
+ item_tmp.icon= object_mouse_select_menu_data[i].icon;
+ RNA_enum_item_add(&item, &totitem, &item_tmp);
+ }
+
+ RNA_enum_item_end(&item, &totitem);
+ *free= 1;
+
+ return item;
+}
+
+static int object_select_menu_exec(bContext *C, wmOperator *op)
+{
+ int name_index= RNA_enum_get(op->ptr, "name");
+ short extend= RNA_boolean_get(op->ptr, "extend");
+ short changed = 0;
+ const char *name= object_mouse_select_menu_data[name_index].idname;
+
+ if(!extend) {
+ CTX_DATA_BEGIN(C, Base*, base, selectable_bases) {
+ if(base->flag & SELECT) {
+ ED_base_object_select(base, BA_DESELECT);
+ changed= 1;
+ }
+ }
+ CTX_DATA_END;
+ }
+
+ CTX_DATA_BEGIN(C, Base*, base, selectable_bases) {
+ /* this is a bit dodjy, there should only be ONE object with this name, but library objects can mess this up */
+ if(strcmp(name, base->object->id.name+2)==0) {
+ ED_base_object_activate(C, base);
+ ED_base_object_select(base, BA_SELECT);
+ changed= 1;
+ }
+ }
+ CTX_DATA_END;
+
+ /* weak but ensures we activate menu again before using the enum */
+ memset(object_mouse_select_menu_data, 0, sizeof(object_mouse_select_menu_data));
+
+ /* undo? */
+ if(changed) {
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void VIEW3D_OT_select_menu(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name= "Select Menu";
+ ot->description = "Menu object selection";
+ ot->idname= "VIEW3D_OT_select_menu";
+
+ /* api callbacks */
+ ot->invoke= WM_menu_invoke;
+ ot->exec= object_select_menu_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* keyingset to use (dynamic enum) */
+ prop= RNA_def_enum(ot->srna, "name", DummyRNA_NULL_items, 0, "Object Name", "");
+ RNA_def_enum_funcs(prop, object_select_menu_enum_itemf);
+ RNA_def_property_flag(prop, PROP_HIDDEN);
+ ot->prop= prop;
+
+ RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first");
+}
static void deselectall_except(Scene *scene, Base *b) /* deselect all except b */
{
@@ -1060,7 +1158,7 @@ static void deselectall_except(Scene *scene, Base *b) /* deselect all except b
}
}
-static Base *mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffer, int hits, const int mval[2], short extend)
+static Base *object_mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffer, int hits, const int mval[2], short extend)
{
short baseCount = 0;
short ok;
@@ -1098,9 +1196,6 @@ static Base *mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffe
}
CTX_DATA_END;
- if(baseCount)
-
-
if(baseCount==0) {
return NULL;
}
@@ -1110,35 +1205,30 @@ static Base *mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffe
return base;
}
else {
- /* UI */
- uiPopupMenu *pup= uiPupMenuBegin(C, "Select Object", ICON_NONE);
- uiLayout *layout= uiPupMenuLayout(pup);
- uiLayout *split= uiLayoutSplit(layout, 0, 0);
- uiLayout *column= uiLayoutColumn(split, 0);
+ /* UI, full in static array values that we later use in an enum function */
LinkNode *node;
+ int i;
+
+ memset(object_mouse_select_menu_data, 0, sizeof(object_mouse_select_menu_data));
- node= linklist;
- while(node) {
+ for (node = linklist, i = 0; node; node= node->next, i++) {
Base *base=node->link;
Object *ob= base->object;
char *name= ob->id.name+2;
- /* annoying!, since we need to set 2 props cant use this. */
- /* uiItemStringO(column, name, 0, "OBJECT_OT_select_name", "name", name); */
- {
- PointerRNA ptr;
+ BLI_strncpy(object_mouse_select_menu_data[i].idname, name, MAX_ID_NAME-2);
+ object_mouse_select_menu_data[i].icon = uiIconFromID(&ob->id);
+ }
- WM_operator_properties_create(&ptr, "OBJECT_OT_select_name");
- RNA_string_set(&ptr, "name", name);
- RNA_boolean_set(&ptr, "extend", extend);
- uiItemFullO(column, "OBJECT_OT_select_name", name, uiIconFromID((ID *)ob), ptr.data, WM_OP_EXEC_DEFAULT, 0);
- }
+ {
+ PointerRNA ptr;
- node= node->next;
+ WM_operator_properties_create(&ptr, "VIEW3D_OT_select_menu");
+ RNA_boolean_set(&ptr, "extend", extend);
+ WM_operator_name_call(C, "VIEW3D_OT_select_menu", WM_OP_INVOKE_DEFAULT, &ptr);
+ WM_operator_properties_free(&ptr);
}
- uiPupMenuEnd(C, pup);
-
BLI_linklist_free(linklist, NULL);
return NULL;
}
@@ -1364,7 +1454,7 @@ static int mouse_select(bContext *C, const int mval[2], short extend, short obce
/* note; shift+alt goes to group-flush-selecting */
if(enumerate) {
- basact= mouse_select_menu(C, &vc, NULL, 0, mval, extend);
+ basact= object_mouse_select_menu(C, &vc, NULL, 0, mval, extend);
} else {
base= startbase;
while(base) {
@@ -1401,7 +1491,7 @@ static int mouse_select(bContext *C, const int mval[2], short extend, short obce
/* note; shift+alt goes to group-flush-selecting */
if(has_bones==0 && enumerate) {
- basact= mouse_select_menu(C, &vc, buffer, hits, mval, extend);
+ basact= object_mouse_select_menu(C, &vc, buffer, hits, mval, extend);
} else {
basact= mouse_select_eval_buffer(&vc, buffer, hits, mval, startbase, has_bones);
}
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
index 49b1b3f723e..0705d066f26 100644
--- a/source/blender/editors/space_view3d/view3d_toolbar.c
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -177,7 +177,7 @@ static uiBlock *tool_search_menu(bContext *C, ARegion *ar, void *arg_listbase)
/* fake button, it holds space for search items */
uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL);
- but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, OP_MAX_TYPENAME, 10, 0, 150, 19, 0, 0, "");
+ but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 0, 150, 19, 0, 0, "");
uiButSetSearchFunc(but, operator_search_cb, arg_listbase, operator_call_cb, NULL);
uiBoundsBlock(block, 6);
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index aa444125287..11492ee7804 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -466,13 +466,18 @@ void VIEW3D_OT_camera_to_view_selected(wmOperatorType *ot)
static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op))
-{
- View3D *v3d = CTX_wm_view3d(C);
- ARegion *ar= ED_view3d_context_region_unlock(C);
- RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
+{
+ View3D *v3d;
+ ARegion *ar;
+ RegionView3D *rv3d;
+
Scene *scene= CTX_data_scene(C);
Object *ob = CTX_data_active_object(C);
+ /* no NULL check is needed, poll checks */
+ ED_view3d_context_user_region(C, &v3d, &ar);
+ rv3d = ar->regiondata;
+
if(ob) {
Object *camera_old= (rv3d->persp == RV3D_CAMOB) ? V3D_CAMERA_SCENE(scene, v3d) : NULL;
rv3d->persp= RV3D_CAMOB;
@@ -489,9 +494,12 @@ static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-int ED_operator_rv3d_unlock_poll(bContext *C)
+int ED_operator_rv3d_user_region_poll(bContext *C)
{
- return ED_view3d_context_region_unlock(C) != NULL;
+ View3D *v3d_dummy;
+ ARegion *ar_dummy;
+
+ return ED_view3d_context_user_region(C, &v3d_dummy, &ar_dummy);
}
void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
@@ -504,7 +512,7 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
/* api callbacks */
ot->exec= view3d_setobjectascamera_exec;
- ot->poll= ED_operator_rv3d_unlock_poll;
+ ot->poll= ED_operator_rv3d_user_region_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;