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:
authorGermano Cavalcante <germano.costa@ig.com.br>2021-02-10 20:10:28 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2021-02-10 21:23:28 +0300
commit62f0d51681a9d810b8d5481467679194df6f4b83 (patch)
tree42e705bae99c231061d12017d4764557b9fa87c2 /source/blender/editors/transform/transform_convert.c
parentf75a71117895f2ca61e3bde935df5db24d7e5360 (diff)
Fix T85494: Click and drag of the 3d cursor turns off proportional editing
Missed `CTX_NO_PET`. This commit also reorganizes the code to make it clearer when using flags.
Diffstat (limited to 'source/blender/editors/transform/transform_convert.c')
-rw-r--r--source/blender/editors/transform/transform_convert.c129
1 files changed, 75 insertions, 54 deletions
diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index 848aa06238e..ee2dd6d9b1f 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -973,6 +973,80 @@ static int countAndCleanTransDataContainer(TransInfo *t)
return t->data_len_all;
}
+static void init_proportional_edit(TransInfo *t)
+{
+ eTConvertType convert_type = t->data_type;
+ switch (convert_type) {
+ case TC_ACTION_DATA:
+ case TC_ARMATURE_VERTS:
+ case TC_CURVE_VERTS:
+ case TC_GRAPH_EDIT_DATA:
+ case TC_GPENCIL:
+ case TC_LATTICE_VERTS:
+ case TC_MASKING_DATA:
+ case TC_MBALL_VERTS:
+ case TC_MESH_VERTS:
+ case TC_MESH_EDGES:
+ case TC_MESH_SKIN:
+ case TC_MESH_UV:
+ case TC_NODE_DATA:
+ case TC_OBJECT:
+ case TC_PARTICLE_VERTS:
+ break;
+ case TC_POSE: /* See T32444. */
+ case TC_CURSOR_IMAGE:
+ case TC_CURSOR_VIEW3D:
+ case TC_NLA_DATA:
+ case TC_OBJECT_TEXSPACE:
+ case TC_PAINT_CURVE_VERTS:
+ case TC_SCULPT:
+ case TC_SEQ_DATA:
+ case TC_TRACKING_DATA:
+ case TC_NONE:
+ default:
+ t->options |= CTX_NO_PET;
+ t->flag &= ~T_PROP_EDIT_ALL;
+ return;
+ }
+
+ if (t->data_len_all && (t->flag & T_PROP_EDIT)) {
+ if (convert_type == TC_OBJECT) {
+ /* Selected objects are already first, no need to presort. */
+ }
+ else {
+ sort_trans_data_selected_first(t);
+ }
+
+ if (ELEM(convert_type, TC_ACTION_DATA, TC_GRAPH_EDIT_DATA)) {
+ /* Distance has already been set. */
+ }
+ else if (ELEM(convert_type, TC_MESH_VERTS, TC_MESH_SKIN)) {
+ if (t->flag & T_PROP_CONNECTED) {
+ /* Already calculated by transform_convert_mesh_connectivity_distance. */
+ }
+ else {
+ set_prop_dist(t, false);
+ }
+ }
+ else if (convert_type == TC_MESH_UV && t->flag & T_PROP_CONNECTED) {
+ /* Already calculated by uv_set_connectivity_distance. */
+ }
+ else if (convert_type == TC_CURVE_VERTS && t->obedit_type == OB_CURVE) {
+ set_prop_dist(t, false);
+ }
+ else {
+ set_prop_dist(t, true);
+ }
+
+ sort_trans_data_dist(t);
+ }
+ else if (ELEM(t->obedit_type, OB_CURVE)) {
+ /* Needed because bezier handles can be partially selected
+ * and are still added into transform data. */
+ sort_trans_data_selected_first(t);
+ }
+}
+
void createTransData(bContext *C, TransInfo *t)
{
Scene *scene = t->scene;
@@ -1147,8 +1221,6 @@ void createTransData(bContext *C, TransInfo *t)
}
t->data_type = convert_type;
- bool init_prop_edit = (t->flag & T_PROP_EDIT) != 0;
-
switch (convert_type) {
case TC_ACTION_DATA:
createTransActionData(C, t);
@@ -1157,18 +1229,15 @@ void createTransData(bContext *C, TransInfo *t)
t->options |= CTX_POSE_BONE;
createTransPose(t);
/* Disable PET, its not usable in pose mode yet T32444. */
- init_prop_edit = false;
break;
case TC_ARMATURE_VERTS:
createTransArmatureVerts(t);
break;
case TC_CURSOR_IMAGE:
createTransCursor_image(t);
- init_prop_edit = false;
break;
case TC_CURSOR_VIEW3D:
createTransCursor_view3d(t);
- init_prop_edit = false;
break;
case TC_CURVE_VERTS:
createTransCurveVerts(t);
@@ -1202,7 +1271,6 @@ void createTransData(bContext *C, TransInfo *t)
break;
case TC_NLA_DATA:
createTransNlaData(C, t);
- init_prop_edit = false;
break;
case TC_NODE_DATA:
createTransNodeData(t);
@@ -1226,26 +1294,21 @@ void createTransData(bContext *C, TransInfo *t)
break;
case TC_OBJECT_TEXSPACE:
createTransTexspace(t);
- init_prop_edit = false;
break;
case TC_PAINT_CURVE_VERTS:
createTransPaintCurveVerts(C, t);
- init_prop_edit = false;
break;
case TC_PARTICLE_VERTS:
createTransParticleVerts(C, t);
break;
case TC_SCULPT:
createTransSculpt(C, t);
- init_prop_edit = false;
break;
case TC_SEQ_DATA:
createTransSeqData(t);
- init_prop_edit = false;
break;
case TC_TRACKING_DATA:
createTransTrackingData(C, t);
- init_prop_edit = false;
break;
case TC_NONE:
default:
@@ -1256,49 +1319,7 @@ void createTransData(bContext *C, TransInfo *t)
}
countAndCleanTransDataContainer(t);
-
- if (t->data_len_all && init_prop_edit) {
- if (convert_type == TC_OBJECT) {
- /* Selected objects are already first, no need to presort. */
- }
- else {
- sort_trans_data_selected_first(t);
- }
-
- if (ELEM(convert_type, TC_ACTION_DATA, TC_GRAPH_EDIT_DATA)) {
- /* Distance has already been set. */
- }
- else if (ELEM(convert_type, TC_MESH_VERTS, TC_MESH_SKIN)) {
- if (t->flag & T_PROP_CONNECTED) {
- /* Already calculated by transform_convert_mesh_connectivity_distance. */
- }
- else {
- set_prop_dist(t, false);
- }
- }
- else if (convert_type == TC_MESH_UV && t->flag & T_PROP_CONNECTED) {
- /* Already calculated by uv_set_connectivity_distance. */
- }
- else if (convert_type == TC_CURVE_VERTS && t->obedit_type == OB_CURVE) {
- set_prop_dist(t, false);
- }
- else {
- set_prop_dist(t, true);
- }
-
- sort_trans_data_dist(t);
- }
- else {
- if (ELEM(t->obedit_type, OB_CURVE)) {
- /* Needed because bezier handles can be partially selected
- * and are still added into transform data. */
- sort_trans_data_selected_first(t);
- }
-
- if (!init_prop_edit) {
- t->flag &= ~T_PROP_EDIT_ALL;
- }
- }
+ init_proportional_edit(t);
BLI_assert((!(t->flag & T_EDIT)) == (!(t->obedit_type != -1)));
}