Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_outliner/outliner_draw.c
| Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_mempool.h" | #include "BLI_mempool.h" | ||||
| #include "BLT_translation.h" | #include "BLT_translation.h" | ||||
| #include "BKE_context.h" | #include "BKE_context.h" | ||||
| #include "BKE_deform.h" | #include "BKE_deform.h" | ||||
| #include "BKE_fcurve.h" | #include "BKE_fcurve.h" | ||||
| #include "BKE_gpencil.h" | |||||
| #include "BKE_global.h" | #include "BKE_global.h" | ||||
| #include "BKE_layer.h" | #include "BKE_layer.h" | ||||
| #include "BKE_library.h" | #include "BKE_library.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_modifier.h" | #include "BKE_modifier.h" | ||||
| #include "BKE_report.h" | #include "BKE_report.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| ▲ Show 20 Lines • Show All 330 Lines • ▼ Show 20 Lines | else { | ||||
| BLI_uniquename(&ob->pose->agroups, grp, CTX_DATA_(BLT_I18NCONTEXT_ID_ACTION, "Group"), '.', | BLI_uniquename(&ob->pose->agroups, grp, CTX_DATA_(BLT_I18NCONTEXT_ID_ACTION, "Group"), '.', | ||||
| offsetof(bActionGroup, name), sizeof(grp->name)); | offsetof(bActionGroup, name), sizeof(grp->name)); | ||||
| WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); | WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); | ||||
| break; | break; | ||||
| } | } | ||||
| case TSE_GP_LAYER: | case TSE_GP_LAYER: | ||||
| { | { | ||||
| bGPdata *gpd = (bGPdata *)tselem->id; // id = GP Datablock | bGPdata *gpd = (bGPdata *)tselem->id; /* id = GP Datablock */ | ||||
| bGPDlayer *gpl = te->directdata; | bGPDlayer *gpl = te->directdata; | ||||
| /* always make layer active */ | |||||
| BKE_gpencil_layer_setactive(gpd, gpl); | |||||
| // XXX: name needs translation stuff | // XXX: name needs translation stuff | ||||
| BLI_uniquename(&gpd->layers, gpl, "GP Layer", '.', | BLI_uniquename(&gpd->layers, gpl, "GP Layer", '.', | ||||
| offsetof(bGPDlayer, info), sizeof(gpl->info)); | offsetof(bGPDlayer, info), sizeof(gpl->info)); | ||||
| WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, gpd); | WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, gpd); | ||||
| break; | break; | ||||
| } | } | ||||
| case TSE_R_LAYER: | case TSE_R_LAYER: | ||||
| { | { | ||||
| Scene *scene = (Scene *)tselem->id; | Scene *scene = (Scene *)tselem->id; | ||||
| ViewLayer *view_layer = te->directdata; | ViewLayer *view_layer = te->directdata; | ||||
| ▲ Show 20 Lines • Show All 365 Lines • ▼ Show 20 Lines | uiBut *but = uiDefIconBut(arg->block, UI_BTYPE_LABEL, 0, icon, arg->xb, arg->yb, UI_UNIT_X, UI_UNIT_Y, NULL, | ||||
| (arg->id && ID_IS_LINKED(arg->id)) ? arg->id->lib->name : ""); | (arg->id && ID_IS_LINKED(arg->id)) ? arg->id->lib->name : ""); | ||||
| if (arg->id) | if (arg->id) | ||||
| UI_but_drag_set_id(but, arg->id); | UI_but_drag_set_id(but, arg->id); | ||||
| } | } | ||||
| } | } | ||||
| static void UNUSED_FUNCTION(tselem_draw_gp_icon_uibut)(struct DrawIconArg *arg, ID *id, bGPDlayer *gpl) | |||||
| { | |||||
| /* restrict column clip - skip it for now... */ | |||||
| if (arg->x >= arg->xmax) { | |||||
| /* pass */ | |||||
| } | |||||
| else { | |||||
| PointerRNA ptr; | |||||
| const float eps = 0.001f; | |||||
| const bool is_stroke_visible = (gpl->color[3] > eps); | |||||
| const bool is_fill_visible = (gpl->fill[3] > eps); | |||||
| float w = 0.5f * UI_UNIT_X; | |||||
| float h = 0.85f * UI_UNIT_Y; | |||||
| RNA_pointer_create(id, &RNA_GPencilLayer, gpl, &ptr); | |||||
| UI_block_align_begin(arg->block); | |||||
| UI_block_emboss_set(arg->block, is_stroke_visible ? UI_EMBOSS : UI_EMBOSS_NONE); | |||||
| uiDefButR(arg->block, UI_BTYPE_COLOR, 1, "", arg->xb, arg->yb, w, h, | |||||
| &ptr, "color", -1, | |||||
| 0, 0, 0, 0, NULL); | |||||
| UI_block_emboss_set(arg->block, is_fill_visible ? UI_EMBOSS : UI_EMBOSS_NONE); | |||||
| uiDefButR(arg->block, UI_BTYPE_COLOR, 1, "", arg->xb + w, arg->yb, w, h, | |||||
| &ptr, "fill_color", -1, | |||||
| 0, 0, 0, 0, NULL); | |||||
| UI_block_emboss_set(arg->block, UI_EMBOSS_NONE); | |||||
| UI_block_align_end(arg->block); | |||||
| } | |||||
| } | |||||
| static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeStoreElem *tselem, TreeElement *te, | static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeStoreElem *tselem, TreeElement *te, | ||||
| float alpha) | float alpha) | ||||
| { | { | ||||
| struct DrawIconArg arg; | struct DrawIconArg arg; | ||||
| float aspect; | float aspect; | ||||
| /* make function calls a bit compacter */ | /* make function calls a bit compacter */ | ||||
| arg.block = block; | arg.block = block; | ||||
| ▲ Show 20 Lines • Show All 190 Lines • ▼ Show 20 Lines | switch (tselem->type) { | ||||
| ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */ | ICON_DRAW(ICON_MOD_MESHDEFORM); /* XXX, needs own icon */ | ||||
| break; | break; | ||||
| case eModifierType_DataTransfer: | case eModifierType_DataTransfer: | ||||
| ICON_DRAW(ICON_MOD_DATA_TRANSFER); | ICON_DRAW(ICON_MOD_DATA_TRANSFER); | ||||
| break; | break; | ||||
| case eModifierType_NormalEdit: | case eModifierType_NormalEdit: | ||||
| ICON_DRAW(ICON_MOD_NORMALEDIT); | ICON_DRAW(ICON_MOD_NORMALEDIT); | ||||
| break; | break; | ||||
| /* GPencil Modifiers */ | |||||
| case eModifierType_Gpencil_Noise: | |||||
| ICON_DRAW(ICON_RNDCURVE); | |||||
| break; | |||||
| case eModifierType_Gpencil_Subdiv: | |||||
| ICON_DRAW(ICON_MOD_SUBSURF); | |||||
| break; | |||||
| case eModifierType_Gpencil_Thick: | |||||
| ICON_DRAW(ICON_MAN_ROT); | |||||
| break; | |||||
| case eModifierType_Gpencil_Tint: | |||||
| ICON_DRAW(ICON_COLOR); | |||||
| break; | |||||
| case eModifierType_Gpencil_Instance: | |||||
| ICON_DRAW(ICON_MOD_ARRAY); | |||||
| break; | |||||
| case eModifierType_Gpencil_Build: | |||||
| ICON_DRAW(ICON_MOD_BUILD); | |||||
| break; | |||||
| case eModifierType_Gpencil_Opacity: | |||||
| ICON_DRAW(ICON_MOD_MASK); | |||||
| break; | |||||
| case eModifierType_Gpencil_Color: | |||||
| ICON_DRAW(ICON_GROUP_VCOL); | |||||
| break; | |||||
| case eModifierType_Gpencil_Lattice: | |||||
| ICON_DRAW(ICON_MOD_LATTICE); | |||||
| break; | |||||
| case eModifierType_Gpencil_Simplify: | |||||
| ICON_DRAW(ICON_MOD_DECIM); | |||||
| break; | |||||
| case eModifierType_Gpencil_Smooth: | |||||
| ICON_DRAW(ICON_MOD_SMOOTH); | |||||
| break; | |||||
| case eModifierType_Gpencil_Hook: | |||||
| ICON_DRAW(ICON_HOOK); | |||||
| break; | |||||
| case eModifierType_Gpencil_Offset: | |||||
| ICON_DRAW(ICON_MOD_DISPLACE); | |||||
| break; | |||||
| /* Default */ | /* Default */ | ||||
| case eModifierType_None: | case eModifierType_None: | ||||
| case eModifierType_ShapeKey: | case eModifierType_ShapeKey: | ||||
| case NUM_MODIFIER_TYPES: | case NUM_MODIFIER_TYPES: | ||||
| ICON_DRAW(ICON_DOT); | ICON_DRAW(ICON_DOT); | ||||
| break; | break; | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| case TSE_POSE_BASE: | case TSE_POSE_BASE: | ||||
| ICON_DRAW(ICON_ARMATURE_DATA); | ICON_DRAW(ICON_ARMATURE_DATA); | ||||
| ▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | switch (tselem->type) { | ||||
| } | } | ||||
| break; | break; | ||||
| case TSE_LAYER_COLLECTION: | case TSE_LAYER_COLLECTION: | ||||
| case TSE_SCENE_COLLECTION_BASE: | case TSE_SCENE_COLLECTION_BASE: | ||||
| case TSE_VIEW_COLLECTION_BASE: | case TSE_VIEW_COLLECTION_BASE: | ||||
| ICON_DRAW(ICON_GROUP); | ICON_DRAW(ICON_GROUP); | ||||
| break; | break; | ||||
| /* Removed the icons from outliner. Need a better structure with Layers, Palettes and Colors */ | /* Removed the icons from outliner. Need a better structure with Layers, Palettes and Colors */ | ||||
| #if 0 | |||||
| case TSE_GP_LAYER: | case TSE_GP_LAYER: | ||||
| tselem_draw_gp_icon_uibut(&arg, tselem->id, te->directdata); | { | ||||
| /* indicate whether layer is active */ | |||||
| bGPDlayer *gpl = te->directdata; | |||||
| if (gpl->flag & GP_LAYER_ACTIVE) { | |||||
| ICON_DRAW(ICON_GREASEPENCIL); | |||||
| } | |||||
| else { | |||||
| ICON_DRAW(ICON_DOT); | |||||
| } | |||||
| break; | break; | ||||
| #endif | } | ||||
| default: | default: | ||||
| ICON_DRAW(ICON_DOT); | ICON_DRAW(ICON_DOT); | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| else if (tselem->id) { | else if (tselem->id) { | ||||
| if (GS(tselem->id->name) == ID_OB) { | if (GS(tselem->id->name) == ID_OB) { | ||||
| Object *ob = (Object *)tselem->id; | Object *ob = (Object *)tselem->id; | ||||
| Show All 23 Lines | if (GS(tselem->id->name) == ID_OB) { | ||||
| case OB_EMPTY: | case OB_EMPTY: | ||||
| if (ob->dup_group) { | if (ob->dup_group) { | ||||
| tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_GROUP_INSTANCE); | tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_GROUP_INSTANCE); | ||||
| } | } | ||||
| else { | else { | ||||
| tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_EMPTY); | tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_EMPTY); | ||||
| } | } | ||||
| break; | break; | ||||
| case OB_GPENCIL: | |||||
| tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_GREASEPENCIL); | |||||
| break; | |||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* TODO(sergey): Casting to short here just to handle ID_NLA which is | /* TODO(sergey): Casting to short here just to handle ID_NLA which is | ||||
| * NOT inside of IDType enum. | * NOT inside of IDType enum. | ||||
| */ | */ | ||||
| switch ((short)GS(tselem->id->name)) { | switch ((short)GS(tselem->id->name)) { | ||||
| case ID_SCE: | case ID_SCE: | ||||
| ▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | else { | ||||
| } | } | ||||
| else { | else { | ||||
| tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_DIRECT); | tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_DIRECT); | ||||
| } | } | ||||
| break; | break; | ||||
| case ID_LS: | case ID_LS: | ||||
| tselem_draw_icon_uibut(&arg, ICON_LINE_DATA); break; | tselem_draw_icon_uibut(&arg, ICON_LINE_DATA); break; | ||||
| case ID_GD: | case ID_GD: | ||||
| tselem_draw_icon_uibut(&arg, ICON_GREASEPENCIL); break; | tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_GREASEPENCIL); break; | ||||
| case ID_LP: | case ID_LP: | ||||
| { | { | ||||
| LightProbe * lp = (LightProbe *)tselem->id; | LightProbe * lp = (LightProbe *)tselem->id; | ||||
| switch (lp->type) { | switch (lp->type) { | ||||
| case LIGHTPROBE_TYPE_CUBE: | case LIGHTPROBE_TYPE_CUBE: | ||||
| tselem_draw_icon_uibut(&arg, ICON_LIGHTPROBE_CUBEMAP); break; | tselem_draw_icon_uibut(&arg, ICON_LIGHTPROBE_CUBEMAP); break; | ||||
| case LIGHTPROBE_TYPE_PLANAR: | case LIGHTPROBE_TYPE_PLANAR: | ||||
| tselem_draw_icon_uibut(&arg, ICON_LIGHTPROBE_PLANAR); break; | tselem_draw_icon_uibut(&arg, ICON_LIGHTPROBE_PLANAR); break; | ||||
| ▲ Show 20 Lines • Show All 777 Lines • Show Last 20 Lines | |||||