Commit: 7d047917b519e435c56923bb3c39c6f0bbba4032
Author: Joshua Leung
Date:   Sat Oct 11 23:41:01 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB7d047917b519e435c56923bb3c39c6f0bbba4032

Added convenience utilities to context for accessing current Grease Pencil data

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

M       source/blender/editors/screen/screen_context.c

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

diff --git a/source/blender/editors/screen/screen_context.c 
b/source/blender/editors/screen/screen_context.c
index 7c8987a..0d7012f 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -32,6 +32,7 @@
 
 #include "DNA_object_types.h"
 #include "DNA_armature_types.h"
+#include "DNA_gpencil_types.h"
 #include "DNA_sequence_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
@@ -45,11 +46,13 @@
 #include "BKE_object.h"
 #include "BKE_action.h"
 #include "BKE_armature.h"
+#include "BKE_gpencil.h"
 #include "BKE_sequencer.h"
 
 #include "RNA_access.h"
 
 #include "ED_armature.h"
+#include "ED_gpencil.h"
 
 #include "WM_api.h"
 #include "UI_interface.h"
@@ -66,6 +69,8 @@ const char *screen_context_dir[] = {
        "sculpt_object", "vertex_paint_object", "weight_paint_object",
        "image_paint_object", "particle_edit_object",
        "sequences", "selected_sequences", "selected_editable_sequences", /* 
sequencer */
+       "gpencil_data", "active_gpencil_layer", "active_gpencil_frame", /* 
grease pencil data */
+       "visible_gpencil_layers", "editable_gpencil_layers", 
"editable_gpencil_strokes",
        "active_operator",
        NULL};
 
@@ -392,6 +397,80 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                        return 1;
                }
        }
+       else if (CTX_data_equals(member, "gpencil_data")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               
+               if (gpd) {
+                       CTX_data_pointer_set(result, NULL, &RNA_GreasePencil, 
gpd);
+                       return 1;
+               }
+       }
+       else if (CTX_data_equals(member, "active_gpencil_layer")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               
+               if (gpd) {
+                       bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+                       if (gpl) {
+                               CTX_data_pointer_set(result, &gpd->id, 
&RNA_GPencilLayer, gpl);
+                               return 1;
+                       }
+               }
+       }
+       else if (CTX_data_equals(member, "active_gpencil_frame")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               
+               if (gpd) {
+                       bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+                       if (gpl) {
+                               CTX_data_pointer_set(result, &gpd->id, 
&RNA_GPencilLayer, gpl->actframe);
+                               return 1;
+                       }
+               }
+       }
+       else if (CTX_data_equals(member, "visible_gpencil_layers")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               if (gpd) {
+                       bGPDlayer *gpl;
+                       for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+                               if ((gpl->flag & GP_LAYER_HIDE) == 0) {
+                                       CTX_data_list_add(result, &gpd->id, 
&RNA_GPencilLayer, gpl);
+                               }
+                       }
+                       CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+                       return 1;
+               }
+       }
+       else if (CTX_data_equals(member, "editable_gpencil_layers")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               if (gpd) {
+                       bGPDlayer *gpl;
+                       for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+                               if ((gpl->flag & (GP_LAYER_HIDE | 
GP_LAYER_LOCKED)) == 0) {
+                                       CTX_data_list_add(result, &gpd->id, 
&RNA_GPencilLayer, gpl);
+                               }
+                       }
+                       CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+                       return 1;
+               }
+       }
+       else if (CTX_data_equals(member, "editable_gpencil_strokes")) {
+               bGPdata *gpd = ED_gpencil_data_get_active(C);
+               if (gpd) {
+                       bGPDlayer *gpl;
+                       for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+                               if ((gpl->flag & (GP_LAYER_HIDE | 
GP_LAYER_LOCKED)) == 0 && (gpl->actframe)) {
+                                       bGPDframe *gpf = gpl->actframe;
+                                       bGPDstroke *gps;
+                                       
+                                       for (gps = gpf->strokes.first; gps; gps 
= gps->next) {
+                                               CTX_data_list_add(result, 
&gpd->id, &RNA_GPencilStroke, gps);
+                                       }
+                               }
+                       }
+                       CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+                       return 1;
+               }
+       }
        else if (CTX_data_equals(member, "active_operator")) {
                wmOperator *op = NULL;

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

Reply via email to