diff options
author | Joshua Leung <aligorith@gmail.com> | 2014-10-11 14:41:01 +0400 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2014-10-11 14:41:01 +0400 |
commit | 7d047917b519e435c56923bb3c39c6f0bbba4032 (patch) | |
tree | e19d5163f3fe965cc6a790586c81909c02bc4bbb /source/blender | |
parent | ec5f0d27b5f48c79e99362ee43c79ed7ec9ca5df (diff) |
Added convenience utilities to context for accessing current Grease Pencil data
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/screen/screen_context.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 7c8987ae778..0d7012faae2 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; |