diff options
author | Harley Acheson <harley.acheson@gmail.com> | 2022-06-27 16:45:49 +0300 |
---|---|---|
committer | Harley Acheson <harley.acheson@gmail.com> | 2022-06-27 16:46:29 +0300 |
commit | 6243972319289d86c70ce9946d10909e7eddfdaf (patch) | |
tree | eb97c7a34dc100b515ab6be74c71c4b85d9494a4 /source/blender/editors/screen | |
parent | 279e7dac7dcfc0a7d4126c55a23a745362c293dc (diff) |
UI: Scrollbar Behavior Changes
Changes to scrollbars so that they are always visible, but thin and
dim, and widen and become more visible as your mouse approaches.
See D6505 for details and examples.
Differential Revision: https://developer.blender.org/D6505
Reviewed by Campbell Barton
Diffstat (limited to 'source/blender/editors/screen')
-rw-r--r-- | source/blender/editors/screen/area.c | 18 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index f58baa0e25c..def6c38f5ca 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1075,6 +1075,7 @@ static void region_azone_scrollbar_init(ScrArea *area, { rcti scroller_vert = (direction == AZ_SCROLL_VERT) ? region->v2d.vert : region->v2d.hor; AZone *az = MEM_callocN(sizeof(*az), __func__); + float hide_width; BLI_addtail(&area->actionzones, az); az->type = AZONE_REGION_SCROLL; @@ -1083,16 +1084,18 @@ static void region_azone_scrollbar_init(ScrArea *area, if (direction == AZ_SCROLL_VERT) { az->region->v2d.alpha_vert = 0; + hide_width = V2D_SCROLL_HIDE_HEIGHT; } else if (direction == AZ_SCROLL_HOR) { az->region->v2d.alpha_hor = 0; + hide_width = V2D_SCROLL_HIDE_WIDTH; } BLI_rcti_translate(&scroller_vert, region->winrct.xmin, region->winrct.ymin); - az->x1 = scroller_vert.xmin - AZONEFADEIN; - az->y1 = scroller_vert.ymin - AZONEFADEIN; - az->x2 = scroller_vert.xmax + AZONEFADEIN; - az->y2 = scroller_vert.ymax + AZONEFADEIN; + az->x1 = scroller_vert.xmin - ((direction == AZ_SCROLL_VERT) ? hide_width : 0); + az->y1 = scroller_vert.ymin - ((direction == AZ_SCROLL_HOR) ? hide_width : 0); + az->x2 = scroller_vert.xmax + ((direction == AZ_SCROLL_VERT) ? hide_width : 0); + az->y2 = scroller_vert.ymax + ((direction == AZ_SCROLL_HOR) ? hide_width : 0); BLI_rcti_init(&az->rect, az->x1, az->x2, az->y1, az->y2); } @@ -3125,7 +3128,12 @@ void ED_region_panels_draw(const bContext *C, ARegion *region) UI_view2d_mask_from_win(v2d, &mask); mask.xmax -= UI_PANEL_CATEGORY_MARGIN_WIDTH; } - UI_view2d_scrollers_draw(v2d, use_mask ? &mask : NULL); + bool use_full_hide = false; + if (region->overlap) { + /* Don't always show scrollbars for transparent regions as it's distracting. */ + use_full_hide = true; + } + UI_view2d_scrollers_draw_ex(v2d, use_mask ? &mask : NULL, use_full_hide); } void ED_region_panels_ex(const bContext *C, ARegion *region, const char *contexts[]) diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 212fb846b43..d35bd5ab2fe 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -887,14 +887,16 @@ static AZone *area_actionzone_refresh_xy(ScrArea *area, const int xy[2], const b float dist_fac = 0.0f, alpha = 0.0f; if (az->direction == AZ_SCROLL_HOR) { - dist_fac = BLI_rcti_length_y(&v2d->hor, local_xy[1]) / AZONEFADEIN; + float hide_width = (az->y2 - az->y1) / 2.0f; + dist_fac = BLI_rcti_length_y(&v2d->hor, local_xy[1]) / hide_width; CLAMP(dist_fac, 0.0f, 1.0f); alpha = 1.0f - dist_fac; v2d->alpha_hor = alpha * 255; } else if (az->direction == AZ_SCROLL_VERT) { - dist_fac = BLI_rcti_length_x(&v2d->vert, local_xy[0]) / AZONEFADEIN; + float hide_width = (az->x2 - az->x1) / 2.0f; + dist_fac = BLI_rcti_length_x(&v2d->vert, local_xy[0]) / hide_width; CLAMP(dist_fac, 0.0f, 1.0f); alpha = 1.0f - dist_fac; |