diff --git a/packages/editor/index.html b/packages/editor/index.html index 57e8ee13..119d76a2 100644 --- a/packages/editor/index.html +++ b/packages/editor/index.html @@ -17,7 +17,6 @@ * { scrollbar-width: thin; scrollbar-color: hsla(var(--pt-intent-primary-hsl, 215,65%,50%), 0.7) rgba(50, 64, 64, 0.3); - scrollbar-gutter: stable; } *::-webkit-scrollbar { diff --git a/packages/editor/src/renderer.scss b/packages/editor/src/renderer.scss index 6e95e190..c3867a0d 100644 --- a/packages/editor/src/renderer.scss +++ b/packages/editor/src/renderer.scss @@ -206,6 +206,18 @@ button.kite3d-status-chip { line-height: inherit; } +// The left slot's tab panel. The Objects tree scrolls in it, so it keeps the scrollbar's width +// whether the tree overflows or not, and the rows do not jump as branches open and close. +.hierarchy-stack{ + scrollbar-gutter: stable; +} + +// The Resources tab holds its own scroll box below, so this panel never scrolls and reserves +// nothing. +.hierarchy-stack:has(.resources-panel){ + scrollbar-gutter: auto; +} + .hierarchy-stack .folderContent{ flex: 1 1 auto; max-width: 100%; @@ -219,6 +231,8 @@ button.kite3d-status-chip { flex-direction: column; height: 100%; overflow-y: auto; + // The sections scroll here, so the rows keep their width when the scrollbar comes and goes. + scrollbar-gutter: stable; } .resources-section-header{ align-items: center; @@ -482,6 +496,8 @@ button.kite3d-status-chip { width: 100%; flex: 1 1; overflow-y: auto; + // The grid is the Files tab's scroller, so the items keep their columns as the folder changes. + scrollbar-gutter: stable; --file-item-button-text-height: 14px; } .file-item-button-group{ @@ -660,11 +676,10 @@ button.kite3d-status-chip { // tab list's two paddings plus a tab's line height, the three values it is built from above. --center-tab-strip-height: calc(#{$pt-grid-size} * 3); - // The viewport clips what leaves it and never scrolls, so it keeps no scrollbar gutter; index.html - // asks every scroll container for a stable one, and that gutter would narrow the canvas. + // The viewport clips what leaves it and never scrolls. Its content stands 4 px past the panel, so + // a scroll container here would let a key press nudge the canvas out of place. > .window-panels-tabs > .bp5-tab-panel { overflow: hidden; - scrollbar-gutter: auto; } > .interactionControlsButtonContainer { diff --git a/packages/uiconfig-blueprint/src/renderer.scss b/packages/uiconfig-blueprint/src/renderer.scss index 73e2ae09..31e84db3 100644 --- a/packages/uiconfig-blueprint/src/renderer.scss +++ b/packages/uiconfig-blueprint/src/renderer.scss @@ -129,6 +129,9 @@ .bp5-panel-stack2-view { background-color: $light-gray4 !important; transition: var(--background-color-transition); + // The panel's content scrolls here, so the rows keep their width whether the scrollbar is there + // or not. It is the only box in the stack that ever shows one. + scrollbar-gutter: stable; } .bp5-dark{ @@ -141,7 +144,7 @@ height: 100%; flex-grow: 1; position: relative; - overflow-y: scroll; + overflow-y: auto; padding: 0 0 0 0; .bp5-panel-stack2-header{