diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-04-11 07:05:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-04-11 07:05:39 +0300 |
commit | e199eae39df9742ab67e29c87d24eec244caf669 (patch) | |
tree | 36acb06cd068d43f685cd636b1141ec4833f69ca | |
parent | c8e2436734466841c2004263f13421b9c1d73b85 (diff) |
Draw Manager: Add center-color for linked/multiuser objects
Draws a blue center circle for library objects.
As with regular drawing, this uses a hard-coded color.
-rw-r--r-- | source/blender/draw/intern/draw_common.c | 10 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_common.h | 2 | ||||
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 38 |
3 files changed, 47 insertions, 3 deletions
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index 8d9012afa50..02722fa82e1 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -33,6 +33,14 @@ #include "draw_common.h" + +#if 0 +#define UI_COLOR_RGB_FROM_U8(r, g, b, v4) \ + ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, 1.0) +#endif +#define UI_COLOR_RGBA_FROM_U8(r, g, b, a, v4) \ + ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, (float)a / 255.0f) + /* Colors & Constant */ GlobalsUboStorage ts; struct GPUUniformBuffer *globals_ubo = NULL; @@ -47,6 +55,8 @@ void DRW_globals_update(void) UI_GetThemeColor4fv(TH_GROUP_ACTIVE, ts.colorGroupActive); UI_GetThemeColorShade4fv(TH_GROUP_ACTIVE, -25, ts.colorGroupSelect); UI_GetThemeColor4fv(TH_GROUP, ts.colorGroup); + UI_COLOR_RGBA_FROM_U8(0x88, 0xFF, 0xFF, 155, ts.colorLibrarySelect); + UI_COLOR_RGBA_FROM_U8(0x55, 0xCC, 0xCC, 155, ts.colorLibrary); UI_GetThemeColor4fv(TH_LAMP, ts.colorLamp); UI_GetThemeColor4fv(TH_SPEAKER, ts.colorSpeaker); UI_GetThemeColor4fv(TH_CAMERA, ts.colorCamera); diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h index ad8f312825a..b234adc7b99 100644 --- a/source/blender/draw/intern/draw_common.h +++ b/source/blender/draw/intern/draw_common.h @@ -45,6 +45,8 @@ typedef struct GlobalsUboStorage { float colorGroupActive[4]; float colorGroupSelect[4]; float colorGroup[4]; + float colorLibrarySelect[4]; + float colorLibrary[4]; float colorLamp[4]; float colorSpeaker[4]; float colorCamera[4]; diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index 1d89455e3ee..adf0de2f053 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -155,6 +155,8 @@ typedef struct g_data{ DRWShadingGroup *center_active; DRWShadingGroup *center_selected; DRWShadingGroup *center_deselected; + DRWShadingGroup *center_selected_lib; + DRWShadingGroup *center_deselected_lib; /* Camera */ DRWShadingGroup *camera; @@ -715,6 +717,16 @@ static void OBJECT_cache_init(void *vedata) grp = DRW_shgroup_point_batch_create(sh, psl->ob_center); DRW_shgroup_uniform_vec4(grp, "color", ts.colorDeselect, 1); stl->g_data->center_deselected = grp; + + /* Select (library) */ + grp = DRW_shgroup_point_batch_create(sh, psl->ob_center); + DRW_shgroup_uniform_vec4(grp, "color", ts.colorLibrarySelect, 1); + stl->g_data->center_selected_lib = grp; + + /* Deselect (library) */ + grp = DRW_shgroup_point_batch_create(sh, psl->ob_center); + DRW_shgroup_uniform_vec4(grp, "color", ts.colorLibrary, 1); + stl->g_data->center_deselected_lib = grp; } } @@ -1047,12 +1059,32 @@ static void DRW_shgroup_relationship_lines(OBJECT_StorageList *stl, Object *ob) static void DRW_shgroup_object_center(OBJECT_StorageList *stl, Object *ob) { + const bool is_library = ob->id.us > 1 || ID_IS_LINKED_DATABLOCK(ob); + DRWShadingGroup *shgroup; + if ((ob->base_flag & BASE_SELECTED) != 0) { - DRW_shgroup_dynamic_call_add(stl->g_data->center_selected, ob->obmat[3]); + if (is_library) { + shgroup = stl->g_data->center_selected_lib; + } + else { + shgroup = stl->g_data->center_selected; + } } - else if (0) { - DRW_shgroup_dynamic_call_add(stl->g_data->center_deselected, ob->obmat[3]); + else { +#if 0 + shgroup = stl->g_data->center_deselected; + if (is_library) { + shgroup = stl->g_data->center_deselected_lib; + } + else { + shgroup = stl->g_data->center_deselected; + } +#else + return; +#endif } + + DRW_shgroup_dynamic_call_add(shgroup, ob->obmat[3]); } static void OBJECT_cache_populate(void *vedata, Object *ob) |