Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-04-17 07:17:24 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-04-17 07:21:24 +0300
commite12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch)
tree8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/space_buttons/buttons_texture.c
parentb3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff)
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211. For details on usage and instructions for migrating branches without conflicts, see: https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/space_buttons/buttons_texture.c')
-rw-r--r--source/blender/editors/space_buttons/buttons_texture.c867
1 files changed, 463 insertions, 404 deletions
diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c
index 7c1355b6b3c..b9b83abf670 100644
--- a/source/blender/editors/space_buttons/buttons_texture.c
+++ b/source/blender/editors/space_buttons/buttons_texture.c
@@ -21,7 +21,6 @@
* \ingroup spbuttons
*/
-
#include <stdlib.h>
#include <string.h>
@@ -72,458 +71,518 @@
#include "../interface/interface_intern.h"
-#include "buttons_intern.h" // own include
+#include "buttons_intern.h" // own include
/************************* Texture User **************************/
-static void buttons_texture_user_property_add(ListBase *users, ID *id,
- PointerRNA ptr, PropertyRNA *prop,
- const char *category, int icon, const char *name)
+static void buttons_texture_user_property_add(ListBase *users,
+ ID *id,
+ PointerRNA ptr,
+ PropertyRNA *prop,
+ const char *category,
+ int icon,
+ const char *name)
{
- ButsTextureUser *user = MEM_callocN(sizeof(ButsTextureUser), "ButsTextureUser");
+ ButsTextureUser *user = MEM_callocN(sizeof(ButsTextureUser), "ButsTextureUser");
- user->id = id;
- user->ptr = ptr;
- user->prop = prop;
- user->category = category;
- user->icon = icon;
- user->name = name;
- user->index = BLI_listbase_count(users);
+ user->id = id;
+ user->ptr = ptr;
+ user->prop = prop;
+ user->category = category;
+ user->icon = icon;
+ user->name = name;
+ user->index = BLI_listbase_count(users);
- BLI_addtail(users, user);
+ BLI_addtail(users, user);
}
-static void buttons_texture_user_node_add(ListBase *users, ID *id,
- bNodeTree *ntree, bNode *node,
- const char *category, int icon, const char *name)
+static void buttons_texture_user_node_add(ListBase *users,
+ ID *id,
+ bNodeTree *ntree,
+ bNode *node,
+ const char *category,
+ int icon,
+ const char *name)
{
- ButsTextureUser *user = MEM_callocN(sizeof(ButsTextureUser), "ButsTextureUser");
+ ButsTextureUser *user = MEM_callocN(sizeof(ButsTextureUser), "ButsTextureUser");
- user->id = id;
- user->ntree = ntree;
- user->node = node;
- user->category = category;
- user->icon = icon;
- user->name = name;
- user->index = BLI_listbase_count(users);
+ user->id = id;
+ user->ntree = ntree;
+ user->node = node;
+ user->category = category;
+ user->icon = icon;
+ user->name = name;
+ user->index = BLI_listbase_count(users);
- BLI_addtail(users, user);
+ BLI_addtail(users, user);
}
-static void buttons_texture_users_find_nodetree(ListBase *users, ID *id,
- bNodeTree *ntree, const char *category)
+static void buttons_texture_users_find_nodetree(ListBase *users,
+ ID *id,
+ bNodeTree *ntree,
+ const char *category)
{
- bNode *node;
-
- if (ntree) {
- for (node = ntree->nodes.first; node; node = node->next) {
- if (node->typeinfo->nclass == NODE_CLASS_TEXTURE) {
- PointerRNA ptr;
- /* PropertyRNA *prop; */ /* UNUSED */
-
- RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
- /* prop = RNA_struct_find_property(&ptr, "texture"); */ /* UNUSED */
-
- buttons_texture_user_node_add(users, id, ntree, node,
- category, RNA_struct_ui_icon(ptr.type), node->name);
- }
- else if (node->type == NODE_GROUP && node->id) {
- buttons_texture_users_find_nodetree(users, id, (bNodeTree *)node->id, category);
- }
- }
- }
+ bNode *node;
+
+ if (ntree) {
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->typeinfo->nclass == NODE_CLASS_TEXTURE) {
+ PointerRNA ptr;
+ /* PropertyRNA *prop; */ /* UNUSED */
+
+ RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
+ /* prop = RNA_struct_find_property(&ptr, "texture"); */ /* UNUSED */
+
+ buttons_texture_user_node_add(
+ users, id, ntree, node, category, RNA_struct_ui_icon(ptr.type), node->name);
+ }
+ else if (node->type == NODE_GROUP && node->id) {
+ buttons_texture_users_find_nodetree(users, id, (bNodeTree *)node->id, category);
+ }
+ }
+ }
}
-static void buttons_texture_modifier_foreach(void *userData, Object *ob, ModifierData *md, const char *propname)
+static void buttons_texture_modifier_foreach(void *userData,
+ Object *ob,
+ ModifierData *md,
+ const char *propname)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- ListBase *users = userData;
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ ListBase *users = userData;
- RNA_pointer_create(&ob->id, &RNA_Modifier, md, &ptr);
- prop = RNA_struct_find_property(&ptr, propname);
+ RNA_pointer_create(&ob->id, &RNA_Modifier, md, &ptr);
+ prop = RNA_struct_find_property(&ptr, propname);
- buttons_texture_user_property_add(users, &ob->id, ptr, prop,
- N_("Modifiers"), RNA_struct_ui_icon(ptr.type), md->name);
+ buttons_texture_user_property_add(
+ users, &ob->id, ptr, prop, N_("Modifiers"), RNA_struct_ui_icon(ptr.type), md->name);
}
-static void buttons_texture_modifier_gpencil_foreach(void *userData, Object *ob, GpencilModifierData *md, const char *propname)
+static void buttons_texture_modifier_gpencil_foreach(void *userData,
+ Object *ob,
+ GpencilModifierData *md,
+ const char *propname)
{
- PointerRNA ptr;
- PropertyRNA *prop;
- ListBase *users = userData;
-
- RNA_pointer_create(&ob->id, &RNA_GpencilModifier, md, &ptr);
- prop = RNA_struct_find_property(&ptr, propname);
-
- buttons_texture_user_property_add(
- users, &ob->id, ptr, prop,
- N_("Grease Pencil Modifiers"), RNA_struct_ui_icon(ptr.type), md->name);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ ListBase *users = userData;
+
+ RNA_pointer_create(&ob->id, &RNA_GpencilModifier, md, &ptr);
+ prop = RNA_struct_find_property(&ptr, propname);
+
+ buttons_texture_user_property_add(users,
+ &ob->id,
+ ptr,
+ prop,
+ N_("Grease Pencil Modifiers"),
+ RNA_struct_ui_icon(ptr.type),
+ md->name);
}
-static void buttons_texture_users_from_context(ListBase *users, const bContext *C, SpaceProperties *sbuts)
+static void buttons_texture_users_from_context(ListBase *users,
+ const bContext *C,
+ SpaceProperties *sbuts)
{
- Scene *scene = NULL;
- Object *ob = NULL;
- FreestyleLineStyle *linestyle = NULL;
- Brush *brush = NULL;
- ID *pinid = sbuts->pinid;
- bool limited_mode = (sbuts->flag & SB_TEX_USER_LIMITED) != 0;
-
- /* get data from context */
- if (pinid) {
- if (GS(pinid->name) == ID_SCE) {
- scene = (Scene *)pinid;
- }
- else if (GS(pinid->name) == ID_OB) {
- ob = (Object *)pinid;
- }
- else if (GS(pinid->name) == ID_BR) {
- brush = (Brush *)pinid;
- }
- else if (GS(pinid->name) == ID_LS) {
- linestyle = (FreestyleLineStyle *)pinid;
- }
- }
-
- if (!scene) {
- scene = CTX_data_scene(C);
- }
-
- const ID_Type id_type = pinid != NULL ? GS(pinid->name) : -1;
- if (!pinid || id_type == ID_SCE) {
- wmWindow *win = CTX_wm_window(C);
- ViewLayer *view_layer = (win->scene == scene) ?
- WM_window_get_active_view_layer(win) :
- BKE_view_layer_default_view(scene);
-
- brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
- linestyle = BKE_linestyle_active_from_view_layer(view_layer);
- ob = OBACT(view_layer);
- }
-
- /* fill users */
- BLI_listbase_clear(users);
-
- if (linestyle && !limited_mode) {
- buttons_texture_users_find_nodetree(users, &linestyle->id, linestyle->nodetree, N_("Line Style"));
- }
-
- if (ob) {
- ParticleSystem *psys = psys_get_current(ob);
- MTex *mtex;
- int a;
-
- /* modifiers */
- modifiers_foreachTexLink(ob, buttons_texture_modifier_foreach, users);
-
- /* grease pencil modifiers */
- BKE_gpencil_modifiers_foreachTexLink(ob, buttons_texture_modifier_gpencil_foreach, users);
-
- /* particle systems */
- if (psys && !limited_mode) {
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = psys->part->mtex[a];
-
- if (mtex) {
- PointerRNA ptr;
- PropertyRNA *prop;
-
- RNA_pointer_create(&psys->part->id, &RNA_ParticleSettingsTextureSlot, mtex, &ptr);
- prop = RNA_struct_find_property(&ptr, "texture");
-
- buttons_texture_user_property_add(users, &psys->part->id, ptr, prop, N_("Particles"),
- RNA_struct_ui_icon(&RNA_ParticleSettings), psys->name);
- }
- }
- }
-
- /* field */
- if (ob->pd && ob->pd->forcefield == PFIELD_TEXTURE) {
- PointerRNA ptr;
- PropertyRNA *prop;
-
- RNA_pointer_create(&ob->id, &RNA_FieldSettings, ob->pd, &ptr);
- prop = RNA_struct_find_property(&ptr, "texture");
-
- buttons_texture_user_property_add(users, &ob->id, ptr, prop,
- N_("Fields"), ICON_FORCE_TEXTURE, IFACE_("Texture Field"));
- }
- }
-
- /* brush */
- if (brush) {
- PointerRNA ptr;
- PropertyRNA *prop;
-
- /* texture */
- RNA_pointer_create(&brush->id, &RNA_BrushTextureSlot, &brush->mtex, &ptr);
- prop = RNA_struct_find_property(&ptr, "texture");
-
- buttons_texture_user_property_add(users, &brush->id, ptr, prop,
- N_("Brush"), ICON_BRUSH_DATA, IFACE_("Brush"));
-
- /* mask texture */
- RNA_pointer_create(&brush->id, &RNA_BrushTextureSlot, &brush->mask_mtex, &ptr);
- prop = RNA_struct_find_property(&ptr, "texture");
-
- buttons_texture_user_property_add(users, &brush->id, ptr, prop,
- N_("Brush"), ICON_BRUSH_DATA, IFACE_("Brush Mask"));
- }
+ Scene *scene = NULL;
+ Object *ob = NULL;
+ FreestyleLineStyle *linestyle = NULL;
+ Brush *brush = NULL;
+ ID *pinid = sbuts->pinid;
+ bool limited_mode = (sbuts->flag & SB_TEX_USER_LIMITED) != 0;
+
+ /* get data from context */
+ if (pinid) {
+ if (GS(pinid->name) == ID_SCE) {
+ scene = (Scene *)pinid;
+ }
+ else if (GS(pinid->name) == ID_OB) {
+ ob = (Object *)pinid;
+ }
+ else if (GS(pinid->name) == ID_BR) {
+ brush = (Brush *)pinid;
+ }
+ else if (GS(pinid->name) == ID_LS) {
+ linestyle = (FreestyleLineStyle *)pinid;
+ }
+ }
+
+ if (!scene) {
+ scene = CTX_data_scene(C);
+ }
+
+ const ID_Type id_type = pinid != NULL ? GS(pinid->name) : -1;
+ if (!pinid || id_type == ID_SCE) {
+ wmWindow *win = CTX_wm_window(C);
+ ViewLayer *view_layer = (win->scene == scene) ? WM_window_get_active_view_layer(win) :
+ BKE_view_layer_default_view(scene);
+
+ brush = BKE_paint_brush(BKE_paint_get_active_from_context(C));
+ linestyle = BKE_linestyle_active_from_view_layer(view_layer);
+ ob = OBACT(view_layer);
+ }
+
+ /* fill users */
+ BLI_listbase_clear(users);
+
+ if (linestyle && !limited_mode) {
+ buttons_texture_users_find_nodetree(
+ users, &linestyle->id, linestyle->nodetree, N_("Line Style"));
+ }
+
+ if (ob) {
+ ParticleSystem *psys = psys_get_current(ob);
+ MTex *mtex;
+ int a;
+
+ /* modifiers */
+ modifiers_foreachTexLink(ob, buttons_texture_modifier_foreach, users);
+
+ /* grease pencil modifiers */
+ BKE_gpencil_modifiers_foreachTexLink(ob, buttons_texture_modifier_gpencil_foreach, users);
+
+ /* particle systems */
+ if (psys && !limited_mode) {
+ for (a = 0; a < MAX_MTEX; a++) {
+ mtex = psys->part->mtex[a];
+
+ if (mtex) {
+ PointerRNA ptr;
+ PropertyRNA *prop;
+
+ RNA_pointer_create(&psys->part->id, &RNA_ParticleSettingsTextureSlot, mtex, &ptr);
+ prop = RNA_struct_find_property(&ptr, "texture");
+
+ buttons_texture_user_property_add(users,
+ &psys->part->id,
+ ptr,
+ prop,
+ N_("Particles"),
+ RNA_struct_ui_icon(&RNA_ParticleSettings),
+ psys->name);
+ }
+ }
+ }
+
+ /* field */
+ if (ob->pd && ob->pd->forcefield == PFIELD_TEXTURE) {
+ PointerRNA ptr;
+ PropertyRNA *prop;
+
+ RNA_pointer_create(&ob->id, &RNA_FieldSettings, ob->pd, &ptr);
+ prop = RNA_struct_find_property(&ptr, "texture");
+
+ buttons_texture_user_property_add(
+ users, &ob->id, ptr, prop, N_("Fields"), ICON_FORCE_TEXTURE, IFACE_("Texture Field"));
+ }
+ }
+
+ /* brush */
+ if (brush) {
+ PointerRNA ptr;
+ PropertyRNA *prop;
+
+ /* texture */
+ RNA_pointer_create(&brush->id, &RNA_BrushTextureSlot, &brush->mtex, &ptr);
+ prop = RNA_struct_find_property(&ptr, "texture");
+
+ buttons_texture_user_property_add(
+ users, &brush->id, ptr, prop, N_("Brush"), ICON_BRUSH_DATA, IFACE_("Brush"));
+
+ /* mask texture */
+ RNA_pointer_create(&brush->id, &RNA_BrushTextureSlot, &brush->mask_mtex, &ptr);
+ prop = RNA_struct_find_property(&ptr, "texture");
+
+ buttons_texture_user_property_add(
+ users, &brush->id, ptr, prop, N_("Brush"), ICON_BRUSH_DATA, IFACE_("Brush Mask"));
+ }
}
void buttons_texture_context_compute(const bContext *C, SpaceProperties *sbuts)
{
- /* gather available texture users in context. runs on every draw of
- * properties editor, before the buttons are created. */
- ButsContextTexture *ct = sbuts->texuser;
- ID *pinid = sbuts->pinid;
-
- if (!ct) {
- ct = MEM_callocN(sizeof(ButsContextTexture), "ButsContextTexture");
- sbuts->texuser = ct;
- }
- else {
- BLI_freelistN(&ct->users);
- }
-
- buttons_texture_users_from_context(&ct->users, C, sbuts);
-
- if (pinid && GS(pinid->name) == ID_TE) {
- ct->user = NULL;
- ct->texture = (Tex *)pinid;
- }
- else {
- /* set one user as active based on active index */
- if (ct->index >= BLI_listbase_count_at_most(&ct->users, ct->index + 1)) {
- ct->index = 0;
- }
-
- ct->user = BLI_findlink(&ct->users, ct->index);
- ct->texture = NULL;
-
- if (ct->user) {
- if (ct->user->ptr.data) {
- PointerRNA texptr;
- Tex *tex;
-
- /* get texture datablock pointer if it's a property */
- texptr = RNA_property_pointer_get(&ct->user->ptr, ct->user->prop);
- tex = (RNA_struct_is_a(texptr.type, &RNA_Texture)) ? texptr.data : NULL;
-
- ct->texture = tex;
- }
- else if (ct->user->node && !(ct->user->node->flag & NODE_ACTIVE_TEXTURE)) {
- ButsTextureUser *user;
-
- /* detect change of active texture node in same node tree, in that
- * case we also automatically switch to the other node */
- for (user = ct->users.first; user; user = user->next) {
- if (user->ntree == ct->user->ntree && user->node != ct->user->node) {
- if (user->node->flag & NODE_ACTIVE_TEXTURE) {
- ct->user = user;
- ct->index = BLI_findindex(&ct->users, user);
- break;
- }
- }
- }
- }
- }
- }
+ /* gather available texture users in context. runs on every draw of
+ * properties editor, before the buttons are created. */
+ ButsContextTexture *ct = sbuts->texuser;
+ ID *pinid = sbuts->pinid;
+
+ if (!ct) {
+ ct = MEM_callocN(sizeof(ButsContextTexture), "ButsContextTexture");
+ sbuts->texuser = ct;
+ }
+ else {
+ BLI_freelistN(&ct->users);
+ }
+
+ buttons_texture_users_from_context(&ct->users, C, sbuts);
+
+ if (pinid && GS(pinid->name) == ID_TE) {
+ ct->user = NULL;
+ ct->texture = (Tex *)pinid;
+ }
+ else {
+ /* set one user as active based on active index */
+ if (ct->index >= BLI_listbase_count_at_most(&ct->users, ct->index + 1)) {
+ ct->index = 0;
+ }
+
+ ct->user = BLI_findlink(&ct->users, ct->index);
+ ct->texture = NULL;
+
+ if (ct->user) {
+ if (ct->user->ptr.data) {
+ PointerRNA texptr;
+ Tex *tex;
+
+ /* get texture datablock pointer if it's a property */
+ texptr = RNA_property_pointer_get(&ct->user->ptr, ct->user->prop);
+ tex = (RNA_struct_is_a(texptr.type, &RNA_Texture)) ? texptr.data : NULL;
+
+ ct->texture = tex;
+ }
+ else if (ct->user->node && !(ct->user->node->flag & NODE_ACTIVE_TEXTURE)) {
+ ButsTextureUser *user;
+
+ /* detect change of active texture node in same node tree, in that
+ * case we also automatically switch to the other node */
+ for (user = ct->users.first; user; user = user->next) {
+ if (user->ntree == ct->user->ntree && user->node != ct->user->node) {
+ if (user->node->flag & NODE_ACTIVE_TEXTURE) {
+ ct->user = user;
+ ct->index = BLI_findindex(&ct->users, user);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
}
static void template_texture_select(bContext *C, void *user_p, void *UNUSED(arg))
{
- /* callback when selecting a texture user in the menu */
- SpaceProperties *sbuts = CTX_wm_space_properties(C);
- ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
- ButsTextureUser *user = (ButsTextureUser *)user_p;
- PointerRNA texptr;
- Tex *tex;
-
- if (!ct) {
- return;
- }
-
- /* set user as active */
- if (user->node) {
- ED_node_set_active(CTX_data_main(C), user->ntree, user->node);
- ct->texture = NULL;
- }
- else {
- texptr = RNA_property_pointer_get(&user->ptr, user->prop);
- tex = (RNA_struct_is_a(texptr.type, &RNA_Texture)) ? texptr.data : NULL;
-
- ct->texture = tex;
-
- if (user->ptr.type == &RNA_ParticleSettingsTextureSlot) {
- /* stupid exception for particle systems which still uses influence
- * from the old texture system, set the active texture slots as well */
- ParticleSettings *part = user->ptr.id.data;
- int a;
-
- for (a = 0; a < MAX_MTEX; a++) {
- if (user->ptr.data == part->mtex[a]) {
- part->texact = a;
- }
- }
- }
-
- if (sbuts && tex) {
- sbuts->preview = 1;
- }
- }
-
- ct->user = user;
- ct->index = user->index;
+ /* callback when selecting a texture user in the menu */
+ SpaceProperties *sbuts = CTX_wm_space_properties(C);
+ ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
+ ButsTextureUser *user = (ButsTextureUser *)user_p;
+ PointerRNA texptr;
+ Tex *tex;
+
+ if (!ct) {
+ return;
+ }
+
+ /* set user as active */
+ if (user->node) {
+ ED_node_set_active(CTX_data_main(C), user->ntree, user->node);
+ ct->texture = NULL;
+ }
+ else {
+ texptr = RNA_property_pointer_get(&user->ptr, user->prop);
+ tex = (RNA_struct_is_a(texptr.type, &RNA_Texture)) ? texptr.data : NULL;
+
+ ct->texture = tex;
+
+ if (user->ptr.type == &RNA_ParticleSettingsTextureSlot) {
+ /* stupid exception for particle systems which still uses influence
+ * from the old texture system, set the active texture slots as well */
+ ParticleSettings *part = user->ptr.id.data;
+ int a;
+
+ for (a = 0; a < MAX_MTEX; a++) {
+ if (user->ptr.data == part->mtex[a]) {
+ part->texact = a;
+ }
+ }
+ }
+
+ if (sbuts && tex) {
+ sbuts->preview = 1;
+ }
+ }
+
+ ct->user = user;
+ ct->index = user->index;
}
static void template_texture_user_menu(bContext *C, uiLayout *layout, void *UNUSED(arg))
{
- /* callback when opening texture user selection menu, to create buttons. */
- SpaceProperties *sbuts = CTX_wm_space_properties(C);
- ButsContextTexture *ct = sbuts->texuser;
- ButsTextureUser *user;
- uiBlock *block = uiLayoutGetBlock(layout);
- const char *last_category = NULL;
-
- for (user = ct->users.first; user; user = user->next) {
- uiBut *but;
- char name[UI_MAX_NAME_STR];
-
- /* add label per category */
- if (!last_category || !STREQ(last_category, user->category)) {
- uiItemL(layout, IFACE_(user->category), ICON_NONE);
- but = block->buttons.last;
- but->drawflag = UI_BUT_TEXT_LEFT;
- }
-
- /* create button */
- if (user->prop) {
- PointerRNA texptr = RNA_property_pointer_get(&user->ptr, user->prop);
- Tex *tex = texptr.data;
-
- if (tex) {
- BLI_snprintf(name, UI_MAX_NAME_STR, " %s - %s", user->name, tex->id.name + 2);
- }
- else {
- BLI_snprintf(name, UI_MAX_NAME_STR, " %s", user->name);
- }
- }
- else {
- BLI_snprintf(name, UI_MAX_NAME_STR, " %s", user->name);
- }
-
- but = uiDefIconTextBut(block, UI_BTYPE_BUT, 0, user->icon, name, 0, 0, UI_UNIT_X * 4, UI_UNIT_Y,
- NULL, 0.0, 0.0, 0.0, 0.0, "");
- UI_but_funcN_set(but, template_texture_select, MEM_dupallocN(user), NULL);
-
- last_category = user->category;
- }
-
- UI_block_flag_enable(block, UI_BLOCK_NO_FLIP);
+ /* callback when opening texture user selection menu, to create buttons. */
+ SpaceProperties *sbuts = CTX_wm_space_properties(C);
+ ButsContextTexture *ct = sbuts->texuser;
+ ButsTextureUser *user;
+ uiBlock *block = uiLayoutGetBlock(layout);
+ const char *last_category = NULL;
+
+ for (user = ct->users.first; user; user = user->next) {
+ uiBut *but;
+ char name[UI_MAX_NAME_STR];
+
+ /* add label per category */
+ if (!last_category || !STREQ(last_category, user->category)) {
+ uiItemL(layout, IFACE_(user->category), ICON_NONE);
+ but = block->buttons.last;
+ but->drawflag = UI_BUT_TEXT_LEFT;
+ }
+
+ /* create button */
+ if (user->prop) {
+ PointerRNA texptr = RNA_property_pointer_get(&user->ptr, user->prop);
+ Tex *tex = texptr.data;
+
+ if (tex) {
+ BLI_snprintf(name, UI_MAX_NAME_STR, " %s - %s", user->name, tex->id.name + 2);
+ }
+ else {
+ BLI_snprintf(name, UI_MAX_NAME_STR, " %s", user->name);
+ }
+ }
+ else {
+ BLI_snprintf(name, UI_MAX_NAME_STR, " %s", user->name);
+ }
+
+ but = uiDefIconTextBut(block,
+ UI_BTYPE_BUT,
+ 0,
+ user->icon,
+ name,
+ 0,
+ 0,
+ UI_UNIT_X * 4,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ "");
+ UI_but_funcN_set(but, template_texture_select, MEM_dupallocN(user), NULL);
+
+ last_category = user->category;
+ }
+
+ UI_block_flag_enable(block, UI_BLOCK_NO_FLIP);
}
void uiTemplateTextureUser(uiLayout *layout, bContext *C)
{
- /* texture user selection dropdown menu. the available users have been
- * gathered before drawing in ButsContextTexture, we merely need to
- * display the current item. */
- SpaceProperties *sbuts = CTX_wm_space_properties(C);
- ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
- uiBlock *block = uiLayoutGetBlock(layout);
- uiBut *but;
- ButsTextureUser *user;
- char name[UI_MAX_NAME_STR];
-
- if (!ct) {
- return;
- }
-
- /* get current user */
- user = ct->user;
-
- if (!user) {
- uiItemL(layout, IFACE_("No textures in context"), ICON_NONE);
- return;
- }
-
- /* create button */
- BLI_strncpy(name, user->name, UI_MAX_NAME_STR);
-
- if (user->icon) {
- but = uiDefIconTextMenuBut(block, template_texture_user_menu, NULL,
- user->icon, name, 0, 0, UI_UNIT_X * 4, UI_UNIT_Y, "");
- }
- else {
- but = uiDefMenuBut(block, template_texture_user_menu, NULL,
- name, 0, 0, UI_UNIT_X * 4, UI_UNIT_Y, "");
- }
-
- /* some cosmetic tweaks */
- UI_but_type_set_menu_from_pulldown(but);
-
- but->flag &= ~UI_BUT_ICON_SUBMENU;
+ /* texture user selection dropdown menu. the available users have been
+ * gathered before drawing in ButsContextTexture, we merely need to
+ * display the current item. */
+ SpaceProperties *sbuts = CTX_wm_space_properties(C);
+ ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
+ uiBlock *block = uiLayoutGetBlock(layout);
+ uiBut *but;
+ ButsTextureUser *user;
+ char name[UI_MAX_NAME_STR];
+
+ if (!ct) {
+ return;
+ }
+
+ /* get current user */
+ user = ct->user;
+
+ if (!user) {
+ uiItemL(layout, IFACE_("No textures in context"), ICON_NONE);
+ return;
+ }
+
+ /* create button */
+ BLI_strncpy(name, user->name, UI_MAX_NAME_STR);
+
+ if (user->icon) {
+ but = uiDefIconTextMenuBut(block,
+ template_texture_user_menu,
+ NULL,
+ user->icon,
+ name,
+ 0,
+ 0,
+ UI_UNIT_X * 4,
+ UI_UNIT_Y,
+ "");
+ }
+ else {
+ but = uiDefMenuBut(
+ block, template_texture_user_menu, NULL, name, 0, 0, UI_UNIT_X * 4, UI_UNIT_Y, "");
+ }
+
+ /* some cosmetic tweaks */
+ UI_but_type_set_menu_from_pulldown(but);
+
+ but->flag &= ~UI_BUT_ICON_SUBMENU;
}
/************************* Texture Show **************************/
static void template_texture_show(bContext *C, void *data_p, void *prop_p)
{
- SpaceProperties *sbuts = CTX_wm_space_properties(C);
- ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
- ButsTextureUser *user;
-
- if (!ct) {
- return;
- }
-
- for (user = ct->users.first; user; user = user->next) {
- if (user->ptr.data == data_p && user->prop == prop_p) {
- break;
- }
- }
-
- if (user) {
- /* select texture */
- template_texture_select(C, user, NULL);
-
- /* change context */
- sbuts->mainb = BCONTEXT_TEXTURE;
- sbuts->mainbuser = sbuts->mainb;
- sbuts->preview = 1;
-
- /* redraw editor */
- ED_area_tag_redraw(CTX_wm_area(C));
- }
+ SpaceProperties *sbuts = CTX_wm_space_properties(C);
+ ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
+ ButsTextureUser *user;
+
+ if (!ct) {
+ return;
+ }
+
+ for (user = ct->users.first; user; user = user->next) {
+ if (user->ptr.data == data_p && user->prop == prop_p) {
+ break;
+ }
+ }
+
+ if (user) {
+ /* select texture */
+ template_texture_select(C, user, NULL);
+
+ /* change context */
+ sbuts->mainb = BCONTEXT_TEXTURE;
+ sbuts->mainbuser = sbuts->mainb;
+ sbuts->preview = 1;
+
+ /* redraw editor */
+ ED_area_tag_redraw(CTX_wm_area(C));
+ }
}
void uiTemplateTextureShow(uiLayout *layout, bContext *C, PointerRNA *ptr, PropertyRNA *prop)
{
- /* button to quickly show texture in texture tab */
- SpaceProperties *sbuts = CTX_wm_space_properties(C);
- ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
- ButsTextureUser *user;
-
- /* only show button in other tabs in properties editor */
- if (!ct || sbuts->mainb == BCONTEXT_TEXTURE) {
- return;
- }
-
- /* find corresponding texture user */
- for (user = ct->users.first; user; user = user->next) {
- if (user->ptr.data == ptr->data && user->prop == prop) {
- break;
- }
- }
-
- /* draw button */
- if (user) {
- uiBlock *block = uiLayoutGetBlock(layout);
- uiBut *but;
-
- but = uiDefIconBut(block, UI_BTYPE_BUT, 0, ICON_PROPERTIES, 0, 0, UI_UNIT_X, UI_UNIT_Y,
- NULL, 0.0, 0.0, 0.0, 0.0, TIP_("Show texture in texture tab"));
- UI_but_func_set(but, template_texture_show, user->ptr.data, user->prop);
- }
+ /* button to quickly show texture in texture tab */
+ SpaceProperties *sbuts = CTX_wm_space_properties(C);
+ ButsContextTexture *ct = (sbuts) ? sbuts->texuser : NULL;
+ ButsTextureUser *user;
+
+ /* only show button in other tabs in properties editor */
+ if (!ct || sbuts->mainb == BCONTEXT_TEXTURE) {
+ return;
+ }
+
+ /* find corresponding texture user */
+ for (user = ct->users.first; user; user = user->next) {
+ if (user->ptr.data == ptr->data && user->prop == prop) {
+ break;
+ }
+ }
+
+ /* draw button */
+ if (user) {
+ uiBlock *block = uiLayoutGetBlock(layout);
+ uiBut *but;
+
+ but = uiDefIconBut(block,
+ UI_BTYPE_BUT,
+ 0,
+ ICON_PROPERTIES,
+ 0,
+ 0,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ NULL,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ TIP_("Show texture in texture tab"));
+ UI_but_func_set(but, template_texture_show, user->ptr.data, user->prop);
+ }
}