UI: Asset Shelf (Experimental Feature) #104831

Closed
Julian Eisel wants to merge 399 commits from asset-shelf into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
13 changed files with 64 additions and 66 deletions
Showing only changes of commit 522aecd7b5 - Show all commits

View File

@ -311,21 +311,21 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
&sl->regionbase;
if (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))
{
new_asset_shelf_footer->alignment = RGN_ALIGN_BOTTOM;
}
if (ARegion *new_asset_shelf = do_versions_add_region_if_not_found(
if (ARegion *new_shelf_region = do_versions_add_region_if_not_found(
regionbase,
RGN_TYPE_ASSET_SHELF,
"asset shelf for view3d (versioning)",
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_UI))
{
new_asset_shelf->alignment = RGN_ALIGN_BOTTOM;
new_shelf_region->alignment = RGN_ALIGN_BOTTOM;
}
if (ARegion *new_settings_region = do_versions_add_region_if_not_found(
regionbase,
RGN_TYPE_ASSET_SHELF_SETTINGS,
"asset shelf settings region for view3d (versioning)",
RGN_TYPE_ASSET_SHELF))
{
new_settings_region->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
}
}
}

View File

@ -24,18 +24,16 @@ struct RegionPollParams;
*
* Naming conventions:
* - #ED_asset_shelf_regions_xxx(): Applies to both regions (#RGN_TYPE_ASSET_SHELF and
* #RGN_TYPE_ASSET_SHELF_FOOTER).
* #RGN_TYPE_ASSET_SHELF_SETTINGS).
* - #ED_asset_shelf_region_xxx(): Applies to the main shelf region (#RGN_TYPE_ASSET_SHELF).
* - #ED_asset_shelf_footer_region_xxx(): Applies to the shelf footer region
* (#RGN_TYPE_ASSET_SHELF_FOOTER).
* - #ED_asset_shelf_footer_xxx(): Applies to the shelf footer region-type
* (#RGN_TYPE_ASSET_SHELF_FOOTER).
* - #ED_asset_shelf_settings_region_xxx(): Applies to the shelf settings region
* (#RGN_TYPE_ASSET_SHELF_SETTINGS).
*
* \{ */
bool ED_asset_shelf_regions_poll(const struct RegionPollParams *params);
/** Only needed for #RGN_TYPE_ASSET_SHELF (not #RGN_TYPE_ASSET_SHELF_FOOTER). */
/** Only needed for #RGN_TYPE_ASSET_SHELF (not #RGN_TYPE_ASSET_SHELF_SETTINGS). */
void ED_asset_shelf_region_init(struct wmWindowManager *wm, struct ARegion *region);
int ED_asset_shelf_region_snap(const struct ARegion *region, int size, int axis);
void ED_asset_shelf_region_listen(const struct wmRegionListenerParams *params);
@ -45,11 +43,11 @@ void ED_asset_shelf_region_layout(const bContext *C,
void ED_asset_shelf_region_draw(const bContext *C, struct ARegion *region);
int ED_asset_shelf_region_prefsizey(void);
void ED_asset_shelf_footer_region_init(struct wmWindowManager *wm, struct ARegion *region);
void ED_asset_shelf_footer_region(const struct bContext *C, struct ARegion *region);
void ED_asset_shelf_footer_region_listen(const struct wmRegionListenerParams *params);
int ED_asset_shelf_footer_size(void);
void ED_asset_shelf_footer_register(struct ARegionType *region_type, const int space_type);
void ED_asset_shelf_settings_region_init(struct wmWindowManager *wm, struct ARegion *region);
void ED_asset_shelf_settings_region(const struct bContext *C, struct ARegion *region);
void ED_asset_shelf_settings_region_listen(const struct wmRegionListenerParams *params);
int ED_asset_shelf_settings_region_size(void);
void ED_asset_shelf_settings_regiontype_register(struct ARegionType *region_type, const int space_type);
/** \} */

View File

@ -384,22 +384,22 @@ void ED_asset_shelf_region_draw(const bContext *C, ARegion *region)
UI_view2d_scrollers_draw(&region->v2d, nullptr);
}
void ED_asset_shelf_footer_region_listen(const wmRegionListenerParams *params)
void ED_asset_shelf_settings_region_listen(const wmRegionListenerParams *params)
{
asset_shelf_region_listen(params);
}
void ED_asset_shelf_footer_region_init(wmWindowManager * /*wm*/, ARegion *region)
void ED_asset_shelf_settings_region_init(wmWindowManager * /*wm*/, ARegion *region)
{
ED_region_header_init(region);
}
void ED_asset_shelf_footer_region(const bContext *C, ARegion *region)
void ED_asset_shelf_settings_region(const bContext *C, ARegion *region)
{
ED_region_header(C, region);
}
int ED_asset_shelf_footer_size()
int ED_asset_shelf_settings_region_size()
{
/* A little smaller than a regular header. */
return ED_area_headersize() * 0.85f;
@ -513,7 +513,7 @@ static uiBut *add_tab_button(uiBlock &block, StringRefNull name)
0,
"Enable catalog, making contained assets visible in the asset shelf");
UI_but_drawflag_enable(but, UI_BUT_ALIGN_TOP);
UI_but_drawflag_enable(but, UI_BUT_ALIGN_DOWN);
UI_but_flag_disable(but, UI_BUT_UNDO);
return but;
@ -555,12 +555,12 @@ static void add_catalog_toggle_buttons(AssetShelfSettings &shelf_settings, uiLay
/** \} */
/* -------------------------------------------------------------------- */
/** \name Asset Shelf Footer
/** \name Asset Shelf Settings Region
*
* Implemented as HeaderType for #RGN_TYPE_ASSET_SHELF_FOOTER.
* Implemented as HeaderType for #RGN_TYPE_ASSET_SHELF_SETTINGS.
* \{ */
static void asset_shelf_footer_draw(const bContext *C, Header *header)
static void asset_shelf_settings_draw(const bContext *C, Header *header)
{
uiLayout *layout = header->layout;
uiBlock *block = uiLayoutGetBlock(layout);
@ -587,13 +587,13 @@ static void asset_shelf_footer_draw(const bContext *C, Header *header)
uiItemPopoverPanel(layout, C, "ASSETSHELF_PT_display", "", ICON_IMGDISPLAY);
}
void ED_asset_shelf_footer_register(ARegionType *region_type, const int space_type)
void ED_asset_shelf_settings_regiontype_register(ARegionType *region_type, const int space_type)
{
HeaderType *ht = MEM_cnew<HeaderType>(__func__);
STRNCPY(ht->idname, "ASSETSHELF_HT_footer");
STRNCPY(ht->idname, "ASSETSHELF_HT_settings");
ht->space_type = space_type;
ht->region_type = RGN_TYPE_ASSET_SHELF_FOOTER;
ht->draw = asset_shelf_footer_draw;
ht->region_type = RGN_TYPE_ASSET_SHELF_SETTINGS;
ht->draw = asset_shelf_settings_draw;
ht->poll = [](const bContext *C, HeaderType *) {
return asset_shelf_space_poll(C, CTX_wm_space_data(C));
};

View File

@ -2127,7 +2127,7 @@ static bool ui_but_drag_init(bContext *C,
RGN_TYPE_HEADER,
RGN_TYPE_TOOL_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
const int region_alignment = RGN_ALIGN_ENUM_FROM_MASK(data->region->alignment);
int lock_axis = -1;

View File

@ -166,7 +166,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF) {
cp = ts->asset_shelf.back;
}
else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF_FOOTER) {
else if (g_theme_state.regionid == RGN_TYPE_ASSET_SHELF_SETTINGS) {
cp = ts->asset_shelf.header_back;
}
else {
@ -197,7 +197,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
else if (ELEM(g_theme_state.regionid,
RGN_TYPE_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
cp = ts->header_text;
}
@ -215,7 +215,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
else if (ELEM(g_theme_state.regionid,
RGN_TYPE_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
cp = ts->header_text_hi;
}
@ -233,7 +233,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
else if (ELEM(g_theme_state.regionid,
RGN_TYPE_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
cp = ts->header_title;
}

View File

@ -1246,7 +1246,7 @@ bool ED_region_is_overlap(int spacetype, int regiontype)
RGN_TYPE_FOOTER,
RGN_TYPE_TOOL_HEADER,
RGN_TYPE_ASSET_SHELF,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
return true;
}
@ -1326,8 +1326,8 @@ static void region_rect_recursive(
prefsizey = region->sizey > 1 ? (UI_SCALE_FAC * (region->sizey + 0.5f)) :
ED_asset_shelf_region_prefsizey();
}
else if (region->regiontype == RGN_TYPE_ASSET_SHELF_FOOTER) {
prefsizey = ED_asset_shelf_footer_size();
else if (region->regiontype == RGN_TYPE_ASSET_SHELF_SETTINGS) {
prefsizey = ED_asset_shelf_settings_region_size();
}
else if (ED_area_is_global(area)) {
prefsizey = ED_region_global_size_y();

View File

@ -1499,7 +1499,7 @@ static bScreen *screen_state_to_nonnormal(bContext *C,
RGN_TYPE_NAV_BAR,
RGN_TYPE_EXECUTE,
RGN_TYPE_ASSET_SHELF,
RGN_TYPE_ASSET_SHELF_FOOTER))
RGN_TYPE_ASSET_SHELF_SETTINGS))
{
region->flag |= RGN_FLAG_HIDDEN;
}

View File

@ -2678,7 +2678,7 @@ static int area_max_regionsize(ScrArea *area, ARegion *scale_region, AZEdge edge
RGN_TYPE_HEADER,
RGN_TYPE_TOOL_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER)))
RGN_TYPE_ASSET_SHELF_SETTINGS)))
{
dist -= region->winy;
}
@ -2687,7 +2687,7 @@ static int area_max_regionsize(ScrArea *area, ARegion *scale_region, AZEdge edge
RGN_TYPE_HEADER,
RGN_TYPE_TOOL_HEADER,
RGN_TYPE_FOOTER,
RGN_TYPE_ASSET_SHELF_FOOTER)))
RGN_TYPE_ASSET_SHELF_SETTINGS)))
{
dist -= region->winy;
}

View File

@ -296,12 +296,6 @@ 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;
/* asset shelf */
region = MEM_cnew<ARegion>("asset shelf for view3d");
@ -309,6 +303,12 @@ static SpaceLink *view3d_create(const ScrArea * /*area*/, const Scene *scene)
region->regiontype = RGN_TYPE_ASSET_SHELF;
region->alignment = RGN_ALIGN_BOTTOM;
/* asset shelf settings region */
region = MEM_cnew<ARegion>("asset shelf settings region for view3d");
BLI_addtail(&v3d->regionbase, region);
region->regiontype = RGN_TYPE_ASSET_SHELF_SETTINGS;
region->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
/* main region */
region = MEM_cnew<ARegion>("main region for view3d");
@ -2284,17 +2284,17 @@ void ED_spacetype_view3d()
art->draw = ED_asset_shelf_region_draw;
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;
/* regions: asset shelf settings */
art = MEM_cnew<ARegionType>("spacetype view3d asset shelf settings region");
art->regionid = RGN_TYPE_ASSET_SHELF_SETTINGS;
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_ASSET_SHELF | ED_KEYMAP_VIEW2D | ED_KEYMAP_FOOTER;
art->init = ED_asset_shelf_footer_region_init;
art->init = ED_asset_shelf_settings_region_init;
art->poll = ED_asset_shelf_regions_poll;
art->draw = ED_asset_shelf_footer_region;
art->listener = ED_asset_shelf_footer_region_listen;
art->draw = ED_asset_shelf_settings_region;
art->listener = ED_asset_shelf_settings_region_listen;
art->context = view3d_asset_shelf_context;
BLI_addhead(&st->regiontypes, art);
ED_asset_shelf_footer_register(art, SPACE_VIEW3D);
ED_asset_shelf_settings_regiontype_register(art, SPACE_VIEW3D);
/* regions: hud */
art = ED_area_type_hud(st->spaceid);

View File

@ -665,9 +665,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,
RGN_TYPE_ASSET_SHELF_SETTINGS = 15,
#define RGN_TYPE_NUM (RGN_TYPE_ASSET_SHELF_FOOTER + 1)
#define RGN_TYPE_NUM (RGN_TYPE_ASSET_SHELF_SETTINGS + 1)
} eRegion_Type;
/* use for function args */
@ -679,7 +679,7 @@ 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) | (1 << RGN_TYPE_ASSET_SHELF_FOOTER))) != 0)
(1 << RGN_TYPE_FOOTER) | (1 << RGN_TYPE_ASSET_SHELF_SETTINGS))) != 0)
/** #ARegion.alignment */
enum {

View File

@ -29,7 +29,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_ASSET_SHELF_SETTINGS, "ASSET_SHELF_SETTINGS", 0, "Asset Shelf Settings", ""},
{RGN_TYPE_PREVIEW, "PREVIEW", 0, "Preview", ""},
{RGN_TYPE_HUD, "HUD", 0, "Floating Region", ""},
{RGN_TYPE_NAV_BAR, "NAVIGATION_BAR", 0, "Navigation Bar", ""},

View File

@ -868,7 +868,7 @@ static void rna_Space_show_regions_asset_shelf_set(PointerRNA *ptr, bool value)
{
rna_Space_bool_from_region_flag_set_by_type(ptr, RGN_TYPE_ASSET_SHELF, RGN_FLAG_HIDDEN, !value);
rna_Space_bool_from_region_flag_set_by_type(
ptr, RGN_TYPE_ASSET_SHELF_FOOTER, RGN_FLAG_HIDDEN, !value);
ptr, RGN_TYPE_ASSET_SHELF_SETTINGS, RGN_FLAG_HIDDEN, !value);
}
static void rna_Space_show_regions_asset_shelf_update(bContext *C, PointerRNA *ptr)
{
@ -3486,8 +3486,8 @@ static void rna_def_space_generic_show_region_toggles(StructRNA *srna, int regio
region_type_mask &= ~(1 << RGN_TYPE_HUD);
DEF_SHOW_REGION_PROPERTY(show_region_hud, "Adjust Last Operation", "");
}
if (region_type_mask & ((1 << RGN_TYPE_ASSET_SHELF) | (1 << RGN_TYPE_ASSET_SHELF_FOOTER))) {
region_type_mask &= ~((1 << RGN_TYPE_ASSET_SHELF) | (1 << RGN_TYPE_ASSET_SHELF_FOOTER));
if (region_type_mask & ((1 << RGN_TYPE_ASSET_SHELF) | (1 << RGN_TYPE_ASSET_SHELF_SETTINGS))) {
region_type_mask &= ~((1 << RGN_TYPE_ASSET_SHELF) | (1 << RGN_TYPE_ASSET_SHELF_SETTINGS));
DEF_SHOW_REGION_PROPERTY(show_regions_asset_shelf, "Asset Shelf", "");
}
BLI_assert(region_type_mask == 0);

View File

@ -6151,7 +6151,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_ASSET_SHELF_SETTINGS,
RGN_TYPE_TEMPORARY,
RGN_TYPE_HUD))
{