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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-12-13 15:58:59 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-12-13 15:58:59 +0400
commitb865c0314f4bd2ead240accff1d06234f614acd2 (patch)
tree61026809a1b3bebb7b2f0614912d4e37267da897 /source/blender/editors
parent3717a4a9e1ef159ce9b75738cd40122bbd01671b (diff)
parent5466befb38cf4ba21e4cf97f0318aaa7f2b10938 (diff)
Merging r42533 through r42601 from trunk into soc-2011-tomato
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/animation/keyingsets.c2
-rw-r--r--source/blender/editors/interface/interface_handlers.c5
-rw-r--r--source/blender/editors/interface/interface_ops.c15
-rw-r--r--source/blender/editors/interface/interface_regions.c20
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c24
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c7
-rw-r--r--source/blender/editors/object/object_add.c4
-rw-r--r--source/blender/editors/object/object_hook.c8
-rw-r--r--source/blender/editors/object/object_ops.c4
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c3
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c19
-rw-r--r--source/blender/editors/space_clip/clip_toolbar.c3
-rw-r--r--source/blender/editors/space_file/file_ops.c6
-rw-r--r--source/blender/editors/space_node/node_edit.c1
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c30
-rw-r--r--source/blender/editors/space_view3d/drawobject.c15
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c3
-rw-r--r--source/blender/editors/transform/transform_conversions.c34
-rw-r--r--source/blender/editors/util/undo.c17
19 files changed, 111 insertions, 109 deletions
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index 3b65e777200..682b40affc2 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -798,7 +798,7 @@ void ANIM_keying_sets_menu_setup (bContext *C, const char title[], const char op
for (ks= builtin_keyingsets.first; ks; ks=ks->next, i--) {
/* only show KeyingSet if context is suitable */
if (ANIM_keyingset_context_ok_poll(C, ks))
- uiItemEnumO_value(layout, ks->name, ICON_NONE, op_name, "type", i);
+ uiItemIntO(layout, ks->name, ICON_NONE, op_name, "type", i);
}
uiPupMenuEnd(C, pup);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index aee23626787..6ebfddff5c1 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -5492,6 +5492,11 @@ wmOperator *uiContextActiveOperator(const struct bContext *C)
ARegion *ar_ctx= CTX_wm_region(C);
uiBlock *block;
+ /* background mode */
+ if (ar_ctx == NULL) {
+ return NULL;
+ }
+
/* scan active regions ui */
for(block=ar_ctx->uiblocks.first; block; block=block->next) {
if (block->ui_operator) {
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 2a75c2a26c1..b50df29918d 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -458,11 +458,16 @@ static int reports_to_text_exec(bContext *C, wmOperator *UNUSED(op))
* - otherwise, up to info (which is what users normally see)
*/
str = BKE_reports_string(reports, (G.f & G_DEBUG)? RPT_DEBUG : RPT_INFO);
-
- write_text(txt, str);
- MEM_freeN(str);
-
- return OPERATOR_FINISHED;
+
+ if (str) {
+ write_text(txt, str);
+ MEM_freeN(str);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
static void UI_OT_reports_to_textblock(wmOperatorType *ot)
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 58c3c0130b8..b89a80bb0d7 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -2481,22 +2481,14 @@ void uiPupMenuOkee(bContext *C, const char *opname, const char *str, ...)
va_end(ap);
}
+/* note, only call this is the file exists,
+ * the case where the file does not exist so can be saved without a
+ * popup must be checked for already, since saving from here
+ * will free the operator which will break invoke().
+ * The operator state for this is implicitly OPERATOR_RUNNING_MODAL */
void uiPupMenuSaveOver(bContext *C, wmOperator *op, const char *filename)
{
- size_t len= strlen(filename);
-
- if(len==0)
- return;
-
- if(filename[len-1]=='/' || filename[len-1]=='\\') {
- uiPupMenuError(C, "Cannot overwrite a directory");
- WM_operator_free(op);
- return;
- }
- if(BLI_exists(filename)==0)
- operator_cb(C, op, 1);
- else
- confirm_operator(C, op, "Save Over", filename);
+ confirm_operator(C, op, "Save Over", filename);
}
void uiPupMenuNotice(bContext *C, const char *str, ...)
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index b1754fa2f2e..a6e6a041090 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -873,12 +873,10 @@ static int similar_face_select_exec(bContext *C, wmOperator *op)
/* here was an edge-mode only select flush case, has to be generalized */
EM_selectmode_flush(em);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
- BKE_mesh_end_editmesh(me, em);
- return OPERATOR_FINISHED;
}
BKE_mesh_end_editmesh(me, em);
- return OPERATOR_CANCELLED;
+ return OPERATOR_FINISHED;
}
/* ***************************************************** */
@@ -1092,12 +1090,10 @@ static int similar_edge_select_exec(bContext *C, wmOperator *op)
/* here was an edge-mode only select flush case, has to be generalized */
EM_selectmode_flush(em);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
- BKE_mesh_end_editmesh(me, em);
- return OPERATOR_FINISHED;
}
-
+
BKE_mesh_end_editmesh(me, em);
- return OPERATOR_CANCELLED;
+ return OPERATOR_FINISHED;
}
/* ********************************* */
@@ -1135,7 +1131,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
if (!ok || !deselcount) { /* no data selected OR no more data to select*/
BKE_mesh_end_editmesh(me, em);
- return 0;
+ return OPERATOR_CANCELLED;
}
if(mode == SIMVERT_FACE) {
@@ -1166,7 +1162,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
deselcount--;
if (!deselcount) {/*have we selected all posible faces?, if so return*/
BKE_mesh_end_editmesh(me, em);
- return selcount;
+ return OPERATOR_FINISHED;
}
}
}
@@ -1184,7 +1180,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
deselcount--;
if (!deselcount) {/*have we selected all posible faces?, if so return*/
BKE_mesh_end_editmesh(me, em);
- return selcount;
+ return OPERATOR_FINISHED;
}
}
}
@@ -1198,7 +1194,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
if (!base_dvert || base_dvert->totweight == 0) {
BKE_mesh_end_editmesh(me, em);
- return selcount;
+ return OPERATOR_FINISHED;
}
for(eve= em->verts.first; eve; eve= eve->next) {
@@ -1216,7 +1212,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
deselcount--;
if (!deselcount) { /*have we selected all posible faces?, if so return*/
BKE_mesh_end_editmesh(me, em);
- return selcount;
+ return OPERATOR_FINISHED;
}
break;
}
@@ -1230,12 +1226,10 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
if(selcount) {
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
- BKE_mesh_end_editmesh(me, em);
- return OPERATOR_FINISHED;
}
BKE_mesh_end_editmesh(me, em);
- return OPERATOR_CANCELLED;
+ return OPERATOR_FINISHED;
}
static int select_similar_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index df81f80ade8..2e5fc515330 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -7510,10 +7510,11 @@ static int select_axis_exec(bContext *C, wmOperator *op)
EditSelection *ese = em->selected.last;
- if(ese==NULL)
+ if (ese==NULL || ese->type != EDITVERT) {
+ BKE_report(op->reports, RPT_WARNING, "This operator requires an active vertex (last selected)");
return OPERATOR_CANCELLED;
-
- if(ese->type==EDITVERT) {
+ }
+ else {
EditVert *ev;
EditVert *act_vert= (EditVert*)ese->data;
float value= act_vert->co[axis];
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 855b67b71bc..8c60a4d5868 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -893,7 +893,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
{
Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
- const short use_global= RNA_boolean_get(op->ptr, "global");
+ const short use_global= RNA_boolean_get(op->ptr, "use_global");
/* int islamp= 0; */ /* UNUSED */
if(CTX_data_edit_object(C))
@@ -951,7 +951,7 @@ void OBJECT_OT_delete(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- RNA_def_boolean(ot->srna, "global", 0, "Delete Globally", "Remove object from all scenes");
+ RNA_def_boolean(ot->srna, "use_global", 0, "Delete Globally", "Remove object from all scenes");
}
/**************************** Copy Utilities ******************************/
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 2a827091fde..773974d0cc0 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -608,7 +608,9 @@ void OBJECT_OT_hook_remove(wmOperatorType *ot)
ot->poll= hook_op_edit_poll;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ /* this operator removes modifier which isn't stored in local undo stack,
+ so redoing it from redo panel gives totally weird results */
+ ot->flag= /*OPTYPE_REGISTER|*/OPTYPE_UNDO;
/* properties */
prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to remove");
@@ -794,7 +796,9 @@ void OBJECT_OT_hook_assign(wmOperatorType *ot)
ot->poll= hook_op_edit_poll;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ /* this operator changes data stored in modifier which doesn't get pushed to undo stack,
+ so redoing it from redo panel gives totally weird results */
+ ot->flag= /*OPTYPE_REGISTER|*/OPTYPE_UNDO;
/* properties */
prop= RNA_def_enum(ot->srna, "modifier", DummyRNA_NULL_items, 0, "Modifier", "Modifier number to assign to");
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index b7fe2d70b37..3b4a5ed976e 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -338,9 +338,9 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "OBJECT_OT_move_to_layer", MKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "global", TRUE);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "use_global", TRUE);
WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "global", TRUE);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "use_global", TRUE);
WM_keymap_add_menu(keymap, "INFO_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index fa791665eb8..52d1cf0b012 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -1763,10 +1763,13 @@ static int set_wpaint(bContext *C, wmOperator *UNUSED(op)) /* toggle */
/* for switching to/from mode */
static int paint_poll_test(bContext *C)
{
+ Object *ob= CTX_data_active_object(C);
if(CTX_data_edit_object(C))
return 0;
if(CTX_data_active_object(C)==NULL)
return 0;
+ if(!ob->data || ((ID *)ob->data)->lib)
+ return 0;
return 1;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index a63a9256055..b84fea29e62 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -648,9 +648,11 @@ static float brush_strength(Sculpt *sd, StrokeCache *cache, float feather)
return feather;
case SCULPT_TOOL_GRAB:
- case SCULPT_TOOL_ROTATE:
return feather;
+ case SCULPT_TOOL_ROTATE:
+ return alpha*pressure*feather;
+
default:
return 0;
}
@@ -1502,13 +1504,20 @@ static void do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
float bstrength= ss->cache->bstrength;
float an[3];
int n;
- float m[3][3];
+ float m[4][4], rot[4][4], lmat[4][4], ilmat[4][4];
static const int flip[8] = { 1, -1, -1, 1, -1, 1, 1, -1 };
float angle = ss->cache->vertex_rotation * flip[ss->cache->mirror_symmetry_pass];
calc_sculpt_normal(sd, ob, an, nodes, totnode);
- axis_angle_to_mat3(m, an, angle);
+ unit_m4(m);
+ unit_m4(lmat);
+
+ copy_v3_v3(lmat[3], ss->cache->location);
+ invert_m4_m4(ilmat, lmat);
+ axis_angle_to_mat4(rot, an, angle);
+
+ mul_serie_m4(m, lmat, rot, ilmat, NULL, NULL, NULL, NULL, NULL);
#pragma omp parallel for schedule(guided) if (sd->flags & SCULPT_USE_OPENMP)
for(n=0; n<totnode; n++) {
@@ -1532,7 +1541,7 @@ static void do_rotate_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
const float fade = bstrength*tex_strength(ss, brush, origco[vd.i], test.dist,
an, origno[vd.i], NULL);
- mul_v3_m3v3(proxy[vd.i], m, origco[vd.i]);
+ mul_v3_m4v3(proxy[vd.i], m, origco[vd.i]);
sub_v3_v3(proxy[vd.i], origco[vd.i]);
mul_v3_fl(proxy[vd.i], fade);
@@ -3160,7 +3169,7 @@ static void sculpt_update_cache_variants(bContext *C, Sculpt *sd, Object *ob, st
dx = cache->mouse[0] - cache->initial_mouse[0];
dy = cache->mouse[1] - cache->initial_mouse[1];
- cache->vertex_rotation = -atan2(dx, dy);
+ cache->vertex_rotation = -atan2(dx, dy) * cache->bstrength;
sd->draw_anchored = 1;
copy_v2_v2(sd->anchored_initial_mouse, cache->initial_mouse);
diff --git a/source/blender/editors/space_clip/clip_toolbar.c b/source/blender/editors/space_clip/clip_toolbar.c
index fe09c5cd829..941c12df4aa 100644
--- a/source/blender/editors/space_clip/clip_toolbar.c
+++ b/source/blender/editors/space_clip/clip_toolbar.c
@@ -212,6 +212,7 @@ static void clip_panel_operator_redo_operator(const bContext *C, Panel *pa, wmOp
}
}
+/* TODO de-duplicate redo panel functions - campbell */
static void clip_panel_operator_redo(const bContext *C, Panel *pa)
{
wmOperator *op= WM_operator_last_redo(C);
@@ -224,7 +225,7 @@ static void clip_panel_operator_redo(const bContext *C, Panel *pa)
block= uiLayoutGetBlock(pa->layout);
- if(ED_undo_valid(C, op->type->name)==0)
+ if (!WM_operator_check_ui_enabled(C, op->type->name))
uiLayoutSetEnabled(pa->layout, 0);
/* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 69c192b077b..daa2031bb5f 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -715,7 +715,7 @@ int file_draw_check_exists(SpaceFile *sfile)
if(RNA_boolean_get(sfile->op->ptr, "check_existing")) {
char filepath[FILE_MAX];
BLI_join_dirfile(filepath, sizeof(filepath), sfile->params->dir, sfile->params->file);
- if(BLI_exists(filepath) && !BLI_is_dir(filepath)) {
+ if(BLI_is_file(filepath)) {
return TRUE;
}
}
@@ -1143,8 +1143,8 @@ int file_directory_exec(bContext *C, wmOperator *UNUSED(unused))
BLI_dir_create_recursive(sfile->params->dir);
}
- /* special case, user may have pasted a fulepath into the directory */
- if(BLI_exists(sfile->params->dir) && BLI_is_dir(sfile->params->dir) == 0) {
+ /* special case, user may have pasted a filepath into the directory */
+ if(BLI_is_file(sfile->params->dir)) {
char path[sizeof(sfile->params->dir)];
BLI_strncpy(path, sfile->params->dir, sizeof(path));
BLI_split_dirfile(path, sfile->params->dir, sfile->params->file, sizeof(sfile->params->dir), sizeof(sfile->params->file));
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 4074e35f860..e5a216d42b0 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -483,6 +483,7 @@ void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *tre
}
else {
*ntree= NULL;
+ *edittree= NULL;
if(treetype) *treetype= 0;
}
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index e83591b73f5..6dd362b827f 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -513,7 +513,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
static int draw_em_tf_mapped__set_draw(void *userData, int index)
{
- struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} *data = userData;
+ struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data = userData;
EditMesh *em = data->em;
EditFace *efa= EM_get_face_for_index(index);
MTFace *tface;
@@ -631,14 +631,12 @@ static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
static int compareDrawOptions(void *userData, int cur_index, int next_index)
{
- DerivedMesh *dm= (DerivedMesh*) userData;
- MFace *mf = DM_get_face_data_layer(dm, CD_MFACE);
- MTFace *tf = DM_get_face_data_layer(dm, CD_MTFACE);
+ struct { MFace *mf; MTFace *tf; } *data = userData;
- if(mf && mf[cur_index].mat_nr != mf[next_index].mat_nr)
+ if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
return 0;
- if(tf && tf[cur_index].tpage != tf[next_index].tpage)
+ if(data->tf && data->tf[cur_index].tpage != data->tf[next_index].tpage)
return 0;
return 1;
@@ -646,14 +644,12 @@ static int compareDrawOptions(void *userData, int cur_index, int next_index)
static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
{
- struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} *data= userData;
- MFace *mf = DM_get_face_data_layer(data->dm, CD_MFACE);
- MTFace *tf = DM_get_face_data_layer(data->dm, CD_MTFACE);
+ struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data= userData;
- if(mf && mf[cur_index].mat_nr != mf[next_index].mat_nr)
+ if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
return 0;
- if(tf && tf[cur_index].tpage != tf[next_index].tpage)
+ if(data->tf && data->tf[cur_index].tpage != data->tf[next_index].tpage)
return 0;
return 1;
@@ -673,12 +669,13 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
glColor4f(1.0f,1.0f,1.0f,1.0f);
if(ob->mode & OB_MODE_EDIT) {
- struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} data;
+ struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} data;
- data.dm = dm;
data.em= me->edit_mesh;
data.has_mcol= CustomData_has_layer(&me->edit_mesh->fdata, CD_MCOL);
data.has_mtface= CustomData_has_layer(&me->edit_mesh->fdata, CD_MTFACE);
+ data.mf= DM_get_face_data_layer(dm, CD_MFACE);
+ data.tf= DM_get_face_data_layer(dm, CD_MTFACE);
dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, compareDrawOptionsEm, &data);
}
@@ -696,10 +693,15 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
dm->drawFacesTex(dm, draw_tface__set_draw_legacy, NULL, NULL);
}
else {
+ struct { MFace *mf; MTFace *tf; } userData;
+
if(!CustomData_has_layer(&dm->faceData,CD_TEXTURE_MCOL))
add_tface_color_layer(dm);
- dm->drawFacesTex(dm, draw_tface__set_draw, compareDrawOptions, dm);
+ userData.mf = DM_get_face_data_layer(dm, CD_MFACE);
+ userData.tf = DM_get_face_data_layer(dm, CD_MTFACE);
+
+ dm->drawFacesTex(dm, draw_tface__set_draw, compareDrawOptions, &userData);
}
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index b6d3a07f0e3..cf210e67bdf 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2381,7 +2381,7 @@ static void draw_dm_edges_sharp(DerivedMesh *dm)
* return 2 for the active face so it renders with stipple enabled */
static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r))
{
- struct { DerivedMesh *dm; unsigned char *cols[3]; EditFace *efa_act; } * data = userData;
+ struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } * data = userData;
EditFace *efa = EM_get_face_for_index(index);
unsigned char *col;
@@ -2401,17 +2401,16 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNU
static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int next_index)
{
- struct { DerivedMesh *dm; unsigned char *cols[3]; EditFace *efa_act; } *data = userData;
- int *orig_index= DM_get_face_data_layer(data->dm, CD_ORIGINDEX);
+ struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } *data = userData;
EditFace *efa;
EditFace *next_efa;
unsigned char *col, *next_col;
- if(!orig_index)
+ if(!data->orig_index)
return 0;
- efa= EM_get_face_for_index(orig_index[index]);
- next_efa= EM_get_face_for_index(orig_index[next_index]);
+ efa= EM_get_face_for_index(data->orig_index[index]);
+ next_efa= EM_get_face_for_index(data->orig_index[next_index]);
if(efa == next_efa)
return 1;
@@ -2431,12 +2430,12 @@ static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int
/* also draws the active face */
static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditFace *efa_act)
{
- struct { DerivedMesh *dm; unsigned char *cols[3]; EditFace *efa_act; } data;
- data.dm= dm;
+ struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } data;
data.cols[0] = baseCol;
data.cols[1] = selCol;
data.cols[2] = actCol;
data.efa_act = efa_act;
+ data.orig_index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, GPU_enable_material, draw_dm_faces_sel__compareDrawOptions, &data, 0);
}
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
index 5d65202d7df..49b1b3f723e 100644
--- a/source/blender/editors/space_view3d/view3d_toolbar.c
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -96,6 +96,7 @@ static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wm
}
}
+/* TODO de-duplicate redo panel functions - campbell */
static void view3d_panel_operator_redo(const bContext *C, Panel *pa)
{
wmOperator *op= WM_operator_last_redo(C);
@@ -108,7 +109,7 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa)
block= uiLayoutGetBlock(pa->layout);
- if(ED_undo_valid(C, op->type->name)==0)
+ if (!WM_operator_check_ui_enabled(C, op->type->name))
uiLayoutSetEnabled(pa->layout, 0);
/* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 96eb60272c1..264ca803135 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -294,7 +294,8 @@ static void createTransTexspace(TransInfo *t)
/* ********************* edge (for crease) ***** */
-static void createTransEdge(TransInfo *t) {
+static void createTransEdge(TransInfo *t)
+{
EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh;
TransData *td = NULL;
EditEdge *eed;
@@ -1919,8 +1920,8 @@ static void get_face_center(float *cent, EditMesh *em, EditVert *eve)
}
}
-//way to overwrite what data is edited with transform
-//static void VertsToTransData(TransData *td, EditVert *eve, BakeKey *key)
+/* way to overwrite what data is edited with transform
+ * static void VertsToTransData(TransData *td, EditVert *eve, BakeKey *key) */
static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert *eve)
{
td->flag = 0;
@@ -1952,33 +1953,6 @@ static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert
}
}
-#if 0
-static void createTransBMeshVerts(TransInfo *t, BME_Mesh *bm, BME_TransData_Head *td) {
- BME_Vert *v;
- BME_TransData *vtd;
- TransData *tob;
- int i;
-
- tob = t->data = MEM_callocN(td->len*sizeof(TransData), "TransObData(Bevel tool)");
-
- for (i=0,v=bm->verts.first;v;v=v->next) {
- if ( (vtd = BME_get_transdata(td,v)) ) {
- tob->loc = vtd->loc;
- tob->val = &vtd->factor;
- copy_v3_v3(tob->iloc,vtd->co);
- copy_v3_v3(tob->center,vtd->org);
- copy_v3_v3(tob->axismtx[0],vtd->vec);
- tob->axismtx[1][0] = vtd->max ? *vtd->max : 0;
- tob++;
- i++;
- }
- }
- /* since td is a memarena, it can hold more transdata than actual elements
- * (i.e. we can't depend on td->len to determine the number of actual elements) */
- t->total = i;
-}
-#endif
-
static void createTransEditVerts(bContext *C, TransInfo *t)
{
ToolSettings *ts = CTX_data_tool_settings(C);
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index f0055bd6008..3ec99ca7508 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -126,8 +126,8 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
ScrArea *sa= CTX_wm_area(C);
/* undo during jobs are running can easily lead to freeing data using by jobs,
- or they can just lead to freezing job in some other cases */
- if(WM_jobs_has_running(CTX_wm_manager(C))) {
+ * or they can just lead to freezing job in some other cases */
+ if (WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C))) {
return OPERATOR_CANCELLED;
}
@@ -341,13 +341,24 @@ int ED_undo_operator_repeat(bContext *C, struct wmOperator *op)
int ret= 0;
if(op) {
+ wmWindowManager *wm= CTX_wm_manager(C);
+ struct Scene *scene= CTX_data_scene(C);
+
ARegion *ar= CTX_wm_region(C);
ARegion *ar1= BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW);
if(ar1)
CTX_wm_region_set(C, ar1);
- if(WM_operator_repeat_check(C, op) && WM_operator_poll(C, op->type)) {
+ if ( (WM_operator_repeat_check(C, op)) &&
+ (WM_operator_poll(C, op->type)) &&
+ /* note, undo/redo cant run if there are jobs active,
+ * check for screen jobs only so jobs like material/texture/world preview
+ * (which copy their data), wont stop redo, see [#29579]],
+ *
+ * note, - WM_operator_check_ui_enabled() jobs test _must_ stay in sync with this */
+ (WM_jobs_test(wm, scene) == 0))
+ {
int retval;
if (G.f & G_DEBUG)