Extend asset shelf region with a region for the catalogs & options
The new region is empty, except of a dummy button.
This commit is contained in:
parent
8ddf492e7c
commit
b3ee7ad2cc
|
@ -3918,15 +3918,27 @@ void blo_do_versions_300(FileData *fd, Library * /*lib*/, Main *bmain)
|
|||
if (sl->spacetype == SPACE_VIEW3D) {
|
||||
ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
|
||||
&sl->regionbase;
|
||||
ARegion *new_asset_shelf = do_versions_add_region_if_not_found(
|
||||
regionbase,
|
||||
RGN_TYPE_ASSET_SHELF,
|
||||
"asset shelf for view3d (versioning)",
|
||||
RGN_TYPE_UI);
|
||||
if (new_asset_shelf != nullptr) {
|
||||
new_asset_shelf->alignment = RGN_ALIGN_BOTTOM;
|
||||
new_asset_shelf->flag |= RGN_FLAG_HIDDEN;
|
||||
new_asset_shelf->flag = RGN_FLAG_HIDDEN | RGN_FLAG_DYNAMIC_SIZE;
|
||||
{
|
||||
ARegion *new_asset_shelf_footer = do_versions_add_region_if_not_found(
|
||||
regionbase,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER,
|
||||
"asset shelf footer for view3d (versioning)",
|
||||
RGN_TYPE_UI);
|
||||
if (new_asset_shelf_footer != nullptr) {
|
||||
new_asset_shelf_footer->alignment = RGN_ALIGN_BOTTOM;
|
||||
new_asset_shelf_footer->flag |= RGN_FLAG_HIDDEN;
|
||||
}
|
||||
}
|
||||
{
|
||||
ARegion *new_asset_shelf = do_versions_add_region_if_not_found(
|
||||
regionbase,
|
||||
RGN_TYPE_ASSET_SHELF,
|
||||
"asset shelf for view3d (versioning)",
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER);
|
||||
if (new_asset_shelf != nullptr) {
|
||||
new_asset_shelf->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
|
||||
new_asset_shelf->flag |= RGN_FLAG_DYNAMIC_SIZE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ set(SRC
|
|||
intern/asset_list.cc
|
||||
intern/asset_mark_clear.cc
|
||||
intern/asset_ops.cc
|
||||
intern/asset_shelf.cc
|
||||
intern/asset_temp_id_consumer.cc
|
||||
intern/asset_type.cc
|
||||
|
||||
|
@ -42,6 +43,7 @@ set(SRC
|
|||
ED_asset_list.h
|
||||
ED_asset_list.hh
|
||||
ED_asset_mark_clear.h
|
||||
ED_asset_shelf.h
|
||||
ED_asset_temp_id_consumer.h
|
||||
ED_asset_type.h
|
||||
intern/asset_library_reference.hh
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/** \file
|
||||
* \ingroup edasset
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct ARegionType;
|
||||
struct bContext;
|
||||
struct wmWindowManager;
|
||||
|
||||
void ED_region_asset_shelf_footer_init(struct wmWindowManager *wm, struct ARegion *region);
|
||||
void ED_region_asset_shelf_footer(const struct bContext *C, struct ARegion *region);
|
||||
|
||||
void ED_region_asset_shelf_listen(const struct wmRegionListenerParams *params);
|
||||
|
||||
void ED_asset_shelf_footer_register(struct ARegionType *region_type,
|
||||
const char *idname,
|
||||
const int space_type);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,52 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/** \file
|
||||
* \ingroup edasset
|
||||
*/
|
||||
|
||||
#include "BKE_screen.h"
|
||||
|
||||
#include "DNA_screen_types.h"
|
||||
|
||||
#include "ED_asset_list.h"
|
||||
#include "ED_screen.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "ED_asset_shelf.h"
|
||||
|
||||
static void asset_shelf_draw(const bContext * /*C*/, Header *header)
|
||||
{
|
||||
uiLayout *layout = header->layout;
|
||||
uiItemL(layout, "Fooo\n", ICON_ASSET_MANAGER);
|
||||
}
|
||||
|
||||
void ED_region_asset_shelf_listen(const wmRegionListenerParams *params)
|
||||
{
|
||||
if (ED_assetlist_listen(params->notifier)) {
|
||||
ED_region_tag_redraw_no_rebuild(params->region);
|
||||
}
|
||||
}
|
||||
|
||||
void ED_region_asset_shelf_footer_init(wmWindowManager * /*wm*/, ARegion *region)
|
||||
{
|
||||
ED_region_header_init(region);
|
||||
}
|
||||
|
||||
void ED_region_asset_shelf_footer(const bContext *C, ARegion *region)
|
||||
{
|
||||
ED_region_header(C, region);
|
||||
}
|
||||
|
||||
void ED_asset_shelf_footer_register(ARegionType *region_type,
|
||||
const char *idname,
|
||||
const int space_type)
|
||||
{
|
||||
HeaderType *ht = MEM_cnew<HeaderType>(__func__);
|
||||
strcpy(ht->idname, idname);
|
||||
ht->space_type = space_type;
|
||||
ht->region_type = RGN_TYPE_ASSET_SHELF_FOOTER;
|
||||
ht->draw = asset_shelf_draw;
|
||||
BLI_addtail(®ion_type->headertypes, ht);
|
||||
}
|
|
@ -122,8 +122,6 @@ void ED_region_header(const struct bContext *C, struct ARegion *region);
|
|||
void ED_region_header_layout(const struct bContext *C, struct ARegion *region);
|
||||
void ED_region_header_draw(const struct bContext *C, struct ARegion *region);
|
||||
|
||||
void ED_region_asset_shelf_listen(const struct wmRegionListenerParams *params);
|
||||
|
||||
void ED_region_cursor_set(struct wmWindow *win, struct ScrArea *area, struct ARegion *region);
|
||||
/**
|
||||
* Exported to all editors, uses fading default.
|
||||
|
@ -703,6 +701,7 @@ enum {
|
|||
ED_KEYMAP_FOOTER = (1 << 9),
|
||||
ED_KEYMAP_GPENCIL = (1 << 10),
|
||||
ED_KEYMAP_NAVBAR = (1 << 11),
|
||||
ED_KEYMAP_ASSET_SHELF_FOOTER = (1 << 12),
|
||||
};
|
||||
|
||||
/** #SCREEN_OT_space_context_cycle direction. */
|
||||
|
|
|
@ -2085,7 +2085,8 @@ static bool ui_but_drag_init(bContext *C,
|
|||
RGN_TYPE_NAV_BAR,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_TOOL_HEADER,
|
||||
RGN_TYPE_FOOTER)) {
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
const int region_alignment = RGN_ALIGN_ENUM_FROM_MASK(data->region->alignment);
|
||||
int lock_axis = -1;
|
||||
|
||||
|
|
|
@ -153,7 +153,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||
else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
|
||||
cp = ts->list;
|
||||
}
|
||||
else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
|
||||
else if (ELEM(g_theme_state.regionid,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
cp = ts->header;
|
||||
}
|
||||
else if (g_theme_state.regionid == RGN_TYPE_NAV_BAR) {
|
||||
|
@ -187,7 +190,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||
else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
|
||||
cp = ts->list_text;
|
||||
}
|
||||
else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
|
||||
else if (ELEM(g_theme_state.regionid,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
cp = ts->header_text;
|
||||
}
|
||||
else {
|
||||
|
@ -201,7 +207,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||
else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
|
||||
cp = ts->list_text_hi;
|
||||
}
|
||||
else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
|
||||
else if (ELEM(g_theme_state.regionid,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
cp = ts->header_text_hi;
|
||||
}
|
||||
else {
|
||||
|
@ -215,7 +224,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||
else if (g_theme_state.regionid == RGN_TYPE_CHANNELS) {
|
||||
cp = ts->list_title;
|
||||
}
|
||||
else if (ELEM(g_theme_state.regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
|
||||
else if (ELEM(g_theme_state.regionid,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
cp = ts->header_title;
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1264,7 +1264,8 @@ bool ED_region_is_overlap(int spacetype, int regiontype)
|
|||
RGN_TYPE_TOOL_PROPS,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_TOOL_HEADER,
|
||||
RGN_TYPE_ASSET_SHELF)) {
|
||||
RGN_TYPE_ASSET_SHELF,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1339,6 +1340,9 @@ static void region_rect_recursive(
|
|||
else if (region->regiontype == RGN_TYPE_FOOTER) {
|
||||
prefsizey = ED_area_footersize();
|
||||
}
|
||||
else if (region->regiontype == RGN_TYPE_ASSET_SHELF_FOOTER) {
|
||||
prefsizey = ED_area_footersize();
|
||||
}
|
||||
else if (ED_area_is_global(area)) {
|
||||
prefsizey = ED_region_global_size_y();
|
||||
}
|
||||
|
@ -1746,6 +1750,11 @@ static void ed_default_handlers(
|
|||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
|
||||
WM_event_add_keymap_handler(®ion->handlers, keymap);
|
||||
}
|
||||
if (flag & ED_KEYMAP_ASSET_SHELF_FOOTER) {
|
||||
/* standard keymap for Navigation bar regions */
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
|
||||
WM_event_add_keymap_handler(®ion->handlers, keymap);
|
||||
}
|
||||
|
||||
/* Keep last because of LMB/RMB handling, see: T57527. */
|
||||
if (flag & ED_KEYMAP_GPENCIL) {
|
||||
|
@ -3425,14 +3434,6 @@ void ED_region_header_init(ARegion *region)
|
|||
{
|
||||
UI_view2d_region_reinit(®ion->v2d, V2D_COMMONVIEW_HEADER, region->winx, region->winy);
|
||||
}
|
||||
|
||||
void ED_region_asset_shelf_listen(const wmRegionListenerParams *params)
|
||||
{
|
||||
if (ED_assetlist_listen(params->notifier)) {
|
||||
ED_region_tag_redraw_no_rebuild(params->region);
|
||||
}
|
||||
}
|
||||
|
||||
int ED_area_headersize(void)
|
||||
{
|
||||
/* Accommodate widget and padding. */
|
||||
|
|
|
@ -1436,7 +1436,8 @@ static bScreen *screen_state_to_nonnormal(bContext *C,
|
|||
RGN_TYPE_TOOLS,
|
||||
RGN_TYPE_NAV_BAR,
|
||||
RGN_TYPE_EXECUTE,
|
||||
RGN_TYPE_ASSET_SHELF)) {
|
||||
RGN_TYPE_ASSET_SHELF,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER)) {
|
||||
region->flag |= RGN_FLAG_HIDDEN;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2625,15 +2625,19 @@ static int area_max_regionsize(ScrArea *area, ARegion *scale_region, AZEdge edge
|
|||
dist -= region->winx;
|
||||
}
|
||||
else if (scale_region->alignment == RGN_ALIGN_TOP &&
|
||||
(region->alignment == RGN_ALIGN_BOTTOM ||
|
||||
ELEM(
|
||||
region->regiontype, RGN_TYPE_HEADER, RGN_TYPE_TOOL_HEADER, RGN_TYPE_FOOTER))) {
|
||||
(region->alignment == RGN_ALIGN_BOTTOM || ELEM(region->regiontype,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_TOOL_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER))) {
|
||||
dist -= region->winy;
|
||||
}
|
||||
else if (scale_region->alignment == RGN_ALIGN_BOTTOM &&
|
||||
(region->alignment == RGN_ALIGN_TOP ||
|
||||
ELEM(
|
||||
region->regiontype, RGN_TYPE_HEADER, RGN_TYPE_TOOL_HEADER, RGN_TYPE_FOOTER))) {
|
||||
(region->alignment == RGN_ALIGN_TOP || ELEM(region->regiontype,
|
||||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_TOOL_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER))) {
|
||||
dist -= region->winy;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
set(INC
|
||||
../include
|
||||
../asset
|
||||
../../blenfont
|
||||
../../blenkernel
|
||||
../../blenlib
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "BKE_viewer_path.h"
|
||||
#include "BKE_workspace.h"
|
||||
|
||||
#include "ED_asset_shelf.h"
|
||||
#include "ED_object.h"
|
||||
#include "ED_outliner.h"
|
||||
#include "ED_render.h"
|
||||
|
@ -289,13 +290,20 @@ static SpaceLink *view3d_create(const ScrArea * /*area*/, const Scene *scene)
|
|||
region->alignment = RGN_ALIGN_RIGHT;
|
||||
region->flag = RGN_FLAG_HIDDEN;
|
||||
|
||||
/* asset shelf footer */
|
||||
region = MEM_cnew<ARegion>("asset shelf footer for view3d");
|
||||
BLI_addtail(&v3d->regionbase, region);
|
||||
region->regiontype = RGN_TYPE_ASSET_SHELF_FOOTER;
|
||||
region->alignment = RGN_ALIGN_BOTTOM;
|
||||
region->flag = RGN_FLAG_HIDDEN;
|
||||
|
||||
/* asset shelf */
|
||||
region = MEM_cnew<ARegion>("asset shelf for view3d");
|
||||
|
||||
BLI_addtail(&v3d->regionbase, region);
|
||||
region->regiontype = RGN_TYPE_ASSET_SHELF;
|
||||
region->alignment = RGN_ALIGN_BOTTOM;
|
||||
region->flag = RGN_FLAG_HIDDEN;
|
||||
region->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
|
||||
region->flag |= RGN_FLAG_DYNAMIC_SIZE;
|
||||
|
||||
/* main region */
|
||||
region = MEM_cnew<ARegion>("main region for view3d");
|
||||
|
@ -2154,6 +2162,15 @@ void ED_spacetype_view3d()
|
|||
art->init = view3d_header_region_init;
|
||||
art->draw = ED_region_header;
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
/* regions: asset shelf footer */
|
||||
art = MEM_cnew<ARegionType>("spacetype view3d asset shelf footer region");
|
||||
art->regionid = RGN_TYPE_ASSET_SHELF_FOOTER;
|
||||
art->prefsizey = HEADERY;
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FOOTER;
|
||||
art->init = ED_region_asset_shelf_footer_init;
|
||||
art->draw = ED_region_asset_shelf_footer;
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
ED_asset_shelf_footer_register(art, "VIEW3D_HT_asset_shelf", SPACE_VIEW3D);
|
||||
|
||||
/* regions: hud */
|
||||
art = ED_area_type_hud(st->spaceid);
|
||||
|
|
|
@ -658,8 +658,9 @@ typedef enum eRegion_Type {
|
|||
* context (surface, mirror view). Does not represent any real region. */
|
||||
RGN_TYPE_XR = 13,
|
||||
RGN_TYPE_ASSET_SHELF = 14,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER = 15,
|
||||
|
||||
#define RGN_TYPE_NUM (RGN_TYPE_ASSET_SHELF + 1)
|
||||
#define RGN_TYPE_NUM (RGN_TYPE_ASSET_SHELF_FOOTER + 1)
|
||||
} eRegion_Type;
|
||||
|
||||
/* use for function args */
|
||||
|
@ -670,8 +671,8 @@ typedef enum eRegion_Type {
|
|||
|
||||
/* Check for any kind of header region. */
|
||||
#define RGN_TYPE_IS_HEADER_ANY(regiontype) \
|
||||
(((1 << (regiontype)) & \
|
||||
((1 << RGN_TYPE_HEADER) | 1 << (RGN_TYPE_TOOL_HEADER) | (1 << RGN_TYPE_FOOTER))) != 0)
|
||||
(((1 << (regiontype)) & ((1 << RGN_TYPE_HEADER) | 1 << (RGN_TYPE_TOOL_HEADER) | \
|
||||
(1 << RGN_TYPE_FOOTER) | (1 << RGN_TYPE_ASSET_SHELF_FOOTER))) != 0)
|
||||
|
||||
/** #ARegion.alignment */
|
||||
enum {
|
||||
|
|
|
@ -27,6 +27,7 @@ const EnumPropertyItem rna_enum_region_type_items[] = {
|
|||
{RGN_TYPE_TOOLS, "TOOLS", 0, "Tools", ""},
|
||||
{RGN_TYPE_TOOL_PROPS, "TOOL_PROPS", 0, "Tool Properties", ""},
|
||||
{RGN_TYPE_ASSET_SHELF, "ASSET_SHELF", 0, "Asset Shelf", ""},
|
||||
{RGN_TYPE_ASSET_SHELF_FOOTER, "ASSET_SHELF_FOOTER", 0, "Asset Shelf Footer", ""},
|
||||
{RGN_TYPE_PREVIEW, "PREVIEW", 0, "Preview", ""},
|
||||
{RGN_TYPE_HUD, "HUD", 0, "Floating Region", ""},
|
||||
{RGN_TYPE_NAV_BAR, "NAVIGATION_BAR", 0, "Navigation Bar", ""},
|
||||
|
|
|
@ -5982,6 +5982,7 @@ void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
|
|||
RGN_TYPE_HEADER,
|
||||
RGN_TYPE_TOOL_HEADER,
|
||||
RGN_TYPE_FOOTER,
|
||||
RGN_TYPE_ASSET_SHELF_FOOTER,
|
||||
RGN_TYPE_TEMPORARY,
|
||||
RGN_TYPE_HUD)) {
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue