Related to [#36548] "Grease Pencil" Problems
authorBastien Montagne <montagne29@wanadoo.fr>
Fri, 23 Aug 2013 21:26:59 +0000 (21:26 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Fri, 23 Aug 2013 21:26:59 +0000 (21:26 +0000)
Use scene's GPencil when active object is deselected. Else it can be tricky and not user-friendly to access to the scene's GPencil once some objects have GPencil data (you have to select/active a non-gpencil object, or switch to a layout without active object...).

source/blender/editors/gpencil/gpencil_edit.c

index 5ed34f0d0f00baf02daeb61b10313536b4a2a429..c5dc8654e9d6fd10b531c6e3790930bfd955d06c 100644 (file)
@@ -106,8 +106,8 @@ bGPdata **gpencil_data_get_pointers(const bContext *C, PointerRNA *ptr)
                                
                                /* TODO: we can include other data-types such as bones later if need be... */
 
-                               /* just in case no active object */
-                               if (ob) {
+                               /* just in case no active/selected object */
+                               if (ob && (ob->flag & SELECT)) {
                                        /* for now, as long as there's an object, default to using that in 3D-View */
                                        if (ptr) RNA_id_pointer_create(&ob->id, ptr);
                                        return &ob->gpd;
@@ -193,14 +193,12 @@ bGPdata *gpencil_data_get_active(const bContext *C)
 bGPdata *gpencil_data_get_active_v3d(Scene *scene)
 {
        Base *base = scene->basact;
-       bGPdata *gpd = base ? base->object->gpd : NULL;
-       if (base && gpd) {
-               /* We have to make sure active object is actually visible, else we must use default scene gpd,
-                * to be consistent with gpencil_data_get_active's behavior.
-                */
-               if ((scene->lay & base->lay) == 0) {
-                       gpd = NULL;
-               }
+       bGPdata *gpd = NULL;
+       /* We have to make sure active object is actually visible and selected, else we must use default scene gpd,
+        * to be consistent with gpencil_data_get_active's behavior.
+        */
+       if (base && (scene->lay & base->lay) && (base->object->flag & SELECT)) {
+               gpd = base->object->gpd;
        }
        return gpd ? gpd : scene->gpd;
 }