diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-13 15:58:59 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-13 15:58:59 +0400 |
commit | b865c0314f4bd2ead240accff1d06234f614acd2 (patch) | |
tree | 61026809a1b3bebb7b2f0614912d4e37267da897 /source/blender/editors | |
parent | 3717a4a9e1ef159ce9b75738cd40122bbd01671b (diff) | |
parent | 5466befb38cf4ba21e4cf97f0318aaa7f2b10938 (diff) |
Merging r42533 through r42601 from trunk into soc-2011-tomato
Diffstat (limited to 'source/blender/editors')
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) |