UI: Asset Shelf (Experimental Feature) #104831
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
/** \} */
|
||||
|
||||
|
|
|
@ -384,22 +384,22 @@ void ED_asset_shelf_region_draw(const bContext *C, ARegion *region)
|
|||
UI_view2d_scrollers_draw(®ion->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));
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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", ""},
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue