Commit: 69665bc7f06d727499596c87f1c08c1fc064efba
Author: Campbell Barton
Date:   Fri Mar 1 12:35:48 2019 +1100
Branches: master
https://developer.blender.org/rB69665bc7f06d727499596c87f1c08c1fc064efba

RNA: move cursor into own struct

Without this it's impractical to subscribe to any change to the cursor.

Fixes T61969 by having gizmos update on any change to the cursor.

===================================================================

M       release/scripts/modules/bpy_extras/object_utils.py
M       release/scripts/startup/bl_operators/object.py
M       release/scripts/startup/bl_operators/object_align.py
M       release/scripts/startup/bl_ui/space_view3d.py
M       release/scripts/templates_py/gizmo_operator.py
M       release/scripts/templates_py/operator_modal_view3d_raycast.py
M       source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
M       source/blender/editors/space_view3d/view3d_edit.c
M       source/blender/editors/transform/transform_gizmo_3d.c
M       source/blender/makesrna/RNA_access.h
M       source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/release/scripts/modules/bpy_extras/object_utils.py 
b/release/scripts/modules/bpy_extras/object_utils.py
index df6feff4591..5f3d6fbc50f 100644
--- a/release/scripts/modules/bpy_extras/object_utils.py
+++ b/release/scripts/modules/bpy_extras/object_utils.py
@@ -61,7 +61,7 @@ def add_object_align_init(context, operator):
     if operator and properties.is_property_set("location"):
         location = Matrix.Translation(Vector(properties.location))
     else:
-        location = Matrix.Translation(context.scene.cursor_location)
+        location = Matrix.Translation(context.scene.cursor.location)
 
         if operator:
             properties.location = location.to_translation()
diff --git a/release/scripts/startup/bl_operators/object.py 
b/release/scripts/startup/bl_operators/object.py
index 42db2ca337d..bef3fef952a 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -873,7 +873,7 @@ class DupliOffsetFromCursor(Operator):
         scene = context.scene
         collection = context.collection
 
-        collection.instance_offset = scene.cursor_location
+        collection.instance_offset = scene.cursor.location
 
         return {'FINISHED'}
 
@@ -904,7 +904,7 @@ class LoadImageAsEmpty:
     def execute(self, context):
         scene = context.scene
         space = context.space_data
-        cursor = scene.cursor_location
+        cursor = scene.cursor.location
 
         try:
             image = bpy.data.images.load(self.filepath, check_existing=True)
diff --git a/release/scripts/startup/bl_operators/object_align.py 
b/release/scripts/startup/bl_operators/object_align.py
index cf6d796798b..b18f49e614c 100644
--- a/release/scripts/startup/bl_operators/object_align.py
+++ b/release/scripts/startup/bl_operators/object_align.py
@@ -130,7 +130,7 @@ def align_objects(context,
     depsgraph = context.depsgraph
     scene = context.scene
 
-    cursor = scene.cursor_location
+    cursor = scene.cursor.location
 
     # We are accessing runtime data such as evaluated bounding box, so we need 
to
     # be sure it is properly updated and valid (bounding box might be lost on 
operator
diff --git a/release/scripts/startup/bl_ui/space_view3d.py 
b/release/scripts/startup/bl_ui/space_view3d.py
index 65e4ea03fad..178a91ba7e3 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -4359,17 +4359,17 @@ class VIEW3D_PT_view3d_cursor(Panel):
     def draw(self, context):
         layout = self.layout
 
-        scene = context.scene
+        cursor = context.scene.cursor
 
-        layout.column().prop(scene, "cursor_location", text="Location")
-        rotation_mode = scene.cursor_rotation_mode
+        layout.column().prop(cursor, "location", text="Location")
+        rotation_mode = cursor.rotation_mode
         if rotation_mode == 'QUATERNION':
-            layout.column().prop(scene, "cursor_rotation_quaternion", 
text="Rotation")
+            layout.column().prop(cursor, "rotation_quaternion", 
text="Rotation")
         elif rotation_mode == 'AXIS_ANGLE':
-            layout.column().prop(scene, "cursor_rotation_axis_angle", 
text="Rotation")
+            layout.column().prop(cursor, "rotation_axis_angle", 
text="Rotation")
         else:
-            layout.column().prop(scene, "cursor_rotation_euler", 
text="Rotation")
-        layout.prop(scene, "cursor_rotation_mode", text="")
+            layout.column().prop(cursor, "rotation_euler", text="Rotation")
+        layout.prop(cursor, "rotation_mode", text="")
 
 
 class VIEW3D_PT_collections(Panel):
diff --git a/release/scripts/templates_py/gizmo_operator.py 
b/release/scripts/templates_py/gizmo_operator.py
index 96f4f4de940..7ab694c1619 100644
--- a/release/scripts/templates_py/gizmo_operator.py
+++ b/release/scripts/templates_py/gizmo_operator.py
@@ -55,7 +55,7 @@ class SelectSideOfPlane(Operator):
     def invoke(self, context, event):
 
         if not self.properties.is_property_set("plane_co"):
-            self.plane_co = context.scene.cursor_location
+            self.plane_co = context.scene.cursor.location
 
         if not self.properties.is_property_set("plane_no"):
             if context.space_data.type == 'VIEW_3D':
diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py 
b/release/scripts/templates_py/operator_modal_view3d_raycast.py
index e5467228dfa..2c596b3b356 100644
--- a/release/scripts/templates_py/operator_modal_view3d_raycast.py
+++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py
@@ -58,7 +58,7 @@ def main(context, event):
             hit, normal, face_index = obj_ray_cast(obj, matrix)
             if hit is not None:
                 hit_world = matrix @ hit
-                scene.cursor_location = hit_world
+                scene.cursor.location = hit_world
                 length_squared = (hit_world - ray_origin).length_squared
                 if best_obj is None or length_squared < best_length_squared:
                     best_length_squared = length_squared
diff --git a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c 
b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
index 52b011cf83e..9884ded4f0a 100644
--- a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
+++ b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
@@ -438,18 +438,10 @@ static void gizmo_mesh_spin_init_message_subscribe(
                .notify = WM_gizmo_do_msg_notify_tag_refresh,
        };
 
-       PointerRNA scene_ptr;
-       RNA_id_pointer_create(&scene->id, &scene_ptr);
-
-       {
-               extern PropertyRNA rna_Scene_cursor_location;
-               const PropertyRNA *props[] = {
-                       &rna_Scene_cursor_location,
-               };
-               for (int i = 0; i < ARRAY_SIZE(props); i++) {
-                       WM_msg_subscribe_rna(mbus, &scene_ptr, props[i], 
&msg_sub_value_gz_tag_refresh, __func__);
-               }
-       }
+       PointerRNA cursor_ptr;
+       RNA_pointer_create(&scene->id, &RNA_View3DCursor, &scene->cursor, 
&cursor_ptr);
+       /* All cursor properties. */
+       WM_msg_subscribe_rna(mbus, &cursor_ptr, NULL, 
&msg_sub_value_gz_tag_refresh, __func__);
 
        WM_msg_subscribe_rna_params(
                mbus,
diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index eeb34bde66d..82d7e4eac4c 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4819,8 +4819,9 @@ void ED_view3d_cursor3d_update(
 
        {
                struct wmMsgBus *mbus = CTX_wm_message_bus(C);
-               WM_msg_publish_rna_prop(
-                       mbus, &scene->id, scene, Scene, cursor_location);
+               wmMsgParams_RNA msg_key_params = {{{0}}};
+               RNA_pointer_create(&scene->id, &RNA_View3DCursor, 
&scene->cursor, &msg_key_params.ptr);
+               WM_msg_publish_rna_params(mbus, &msg_key_params);
        }
 
        DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c 
b/source/blender/editors/transform/transform_gizmo_3d.c
index e1066315508..2e6a399d0ea 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -1227,25 +1227,29 @@ static void gizmo_xform_message_subscribe(
        TransformOrientationSlot *orient_slot = 
BKE_scene_orientation_slot_get(scene, orient_flag);
        PointerRNA orient_ref_ptr;
        RNA_pointer_create(&scene->id, &RNA_TransformOrientationSlot, 
orient_slot, &orient_ref_ptr);
+       const ToolSettings *ts = scene->toolsettings;
 
        PointerRNA scene_ptr;
        RNA_id_pointer_create(&scene->id, &scene_ptr);
        {
-               const ToolSettings *ts = scene->toolsettings;
                extern PropertyRNA rna_Scene_transform_orientation_slots;
-               extern PropertyRNA rna_Scene_cursor_location;
                const PropertyRNA *props[] = {
                        &rna_Scene_transform_orientation_slots,
-                       ((ts->transform_pivot_point == V3D_AROUND_CURSOR) || 
(orient_slot->type == V3D_ORIENT_CURSOR)) ?
-                       &rna_Scene_cursor_location : NULL,
                };
                for (int i = 0; i < ARRAY_SIZE(props); i++) {
-                       if (props[i]) {
-                               WM_msg_subscribe_rna(mbus, &scene_ptr, 
props[i], &msg_sub_value_gz_tag_refresh, __func__);
-                       }
+                       WM_msg_subscribe_rna(mbus, &scene_ptr, props[i], 
&msg_sub_value_gz_tag_refresh, __func__);
                }
        }
 
+       if ((ts->transform_pivot_point == V3D_AROUND_CURSOR) ||
+           (orient_slot->type == V3D_ORIENT_CURSOR))
+       {
+               /* We could be more specific here, for now subscribe to any 
cursor change. */
+               PointerRNA cursor_ptr;
+               RNA_pointer_create(&scene->id, &RNA_View3DCursor, 
&scene->cursor, &cursor_ptr);
+               WM_msg_subscribe_rna(mbus, &cursor_ptr, NULL, 
&msg_sub_value_gz_tag_refresh, __func__);
+       }
+
        {
                extern PropertyRNA rna_TransformOrientationSlot_type;
                extern PropertyRNA rna_TransformOrientationSlot_use;
diff --git a/source/blender/makesrna/RNA_access.h 
b/source/blender/makesrna/RNA_access.h
index e0d3331c773..5866302a852 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -720,6 +720,7 @@ extern StructRNA RNA_VertexPaint;
 extern StructRNA RNA_VertexWeightEditModifier;
 extern StructRNA RNA_VertexWeightMixModifier;
 extern StructRNA RNA_VertexWeightProximityModifier;
+extern StructRNA RNA_View3DCursor;
 extern StructRNA RNA_View3DOverlay;
 extern StructRNA RNA_View3DShading;
 extern StructRNA RNA_ViewLayer;
diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index 301f7cfd5ea..ecf09837c0a 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -1635,10 +1635,9 @@ static void rna_Scene_sync_mode_set(PointerRNA *ptr, int 
value)
        }
 }
 
-static void rna_Scene_cursor_rotation_mode_set(PointerRNA *ptr, int value)
+static void rna_View3DCursor_rotation_mode_set(PointerRNA *ptr, int value)
 {
-       Scene *scene = ptr->id.data;
-       View3DCursor *cursor = &scene->cursor;
+       View3DCursor *cursor = ptr->data;
 
        /* use API Method for conversions... */
        BKE_rotMode_change_values(
@@ -1650,18 +1649,16 @@ static void 
rna_Scene_cursor_rotation_mode_set(PointerRNA *ptr, int value)
        cursor->rotation_mode = value;
 }
 
-static void rna_Scene_cursor_rotation_axis_angle_get(PointerRNA *ptr, float 
*value)
+static void rna_View3DCursor_rotation_axis_angle_get(PointerRNA *p

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to