Skip to content

Commit 910511b

Browse files
committed
connect nested grids absolute offsets
fix microsoft#129120
1 parent 2ea55a5 commit 910511b

File tree

10 files changed

+33
-33
lines changed

10 files changed

+33
-33
lines changed

src/vs/base/browser/ui/centered/centeredViewLayout.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const GOLDEN_RATIO = {
2121
rightMarginRatio: 0.1909
2222
};
2323

24-
function createEmptyView(background: Color | undefined): ISplitViewView {
24+
function createEmptyView(background: Color | undefined): ISplitViewView<{ top: number, left: number }> {
2525
const element = $('.centered-layout-margin');
2626
element.style.height = '100%';
2727
if (background) {
@@ -37,13 +37,13 @@ function createEmptyView(background: Color | undefined): ISplitViewView {
3737
};
3838
}
3939

40-
function toSplitViewView(view: IView, getHeight: () => number): ISplitViewView {
40+
function toSplitViewView(view: IView, getHeight: () => number): ISplitViewView<{ top: number, left: number }> {
4141
return {
4242
element: view.element,
4343
get maximumSize() { return view.maximumWidth; },
4444
get minimumSize() { return view.minimumWidth; },
4545
onDidChange: Event.map(view.onDidChange, e => e && e.width),
46-
layout: (size, offset) => view.layout(size, getHeight(), 0, offset)
46+
layout: (size, offset, ctx) => view.layout(size, getHeight(), ctx?.top ?? 0, (ctx?.left ?? 0) + offset)
4747
};
4848
}
4949

@@ -53,12 +53,12 @@ export interface ICenteredViewStyles extends ISplitViewStyles {
5353

5454
export class CenteredViewLayout implements IDisposable {
5555

56-
private splitView?: SplitView;
56+
private splitView?: SplitView<{ top: number, left: number }>;
5757
private width: number = 0;
5858
private height: number = 0;
5959
private style!: ICenteredViewStyles;
6060
private didLayout = false;
61-
private emptyViews: ISplitViewView[] | undefined;
61+
private emptyViews: ISplitViewView<{ top: number, left: number }>[] | undefined;
6262
private readonly splitViewDisposables = new DisposableStore();
6363

6464
constructor(private container: HTMLElement, private view: IView, public readonly state: CenteredViewState = { leftMarginRatio: GOLDEN_RATIO.leftMarginRatio, rightMarginRatio: GOLDEN_RATIO.rightMarginRatio }) {
@@ -86,7 +86,7 @@ export class CenteredViewLayout implements IDisposable {
8686
this.splitView.orthogonalEndSash = boundarySashes.bottom;
8787
}
8888

89-
layout(width: number, height: number): void {
89+
layout(width: number, height: number, top: number, left: number): void {
9090
this.width = width;
9191
this.height = height;
9292
if (this.splitView) {
@@ -95,7 +95,7 @@ export class CenteredViewLayout implements IDisposable {
9595
this.resizeMargins();
9696
}
9797
} else {
98-
this.view.layout(width, height, 0, 0);
98+
this.view.layout(width, height, top, left);
9999
}
100100
this.didLayout = true;
101101
}

src/vs/base/browser/ui/grid/grid.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ export class Grid<T extends IView = IView> extends Disposable {
254254
this.gridview.style(styles);
255255
}
256256

257-
layout(width: number, height: number): void {
258-
this.gridview.layout(width, height);
257+
layout(width: number, height: number, top: number = 0, left: number = 0): void {
258+
this.gridview.layout(width, height, top, left);
259259
this.didLayout = true;
260260
}
261261

@@ -556,8 +556,8 @@ export class SerializableGrid<T extends ISerializableView> extends Grid<T> {
556556
};
557557
}
558558

559-
override layout(width: number, height: number): void {
560-
super.layout(width, height);
559+
override layout(width: number, height: number, top: number = 0, left: number = 0): void {
560+
super.layout(width, height, top, left);
561561

562562
if (this.initialLayoutContext) {
563563
this.initialLayoutContext = false;

src/vs/base/browser/ui/grid/gridview.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -980,11 +980,11 @@ export class GridView implements IDisposable {
980980
this.root.style(styles);
981981
}
982982

983-
layout(width: number, height: number): void {
983+
layout(width: number, height: number, top: number = 0, left: number = 0): void {
984984
this.firstLayoutController.isLayoutEnabled = true;
985985

986-
const [size, orthogonalSize] = this.root.orientation === Orientation.HORIZONTAL ? [height, width] : [width, height];
987-
this.root.layout(size, 0, { orthogonalSize, absoluteOffset: 0, absoluteOrthogonalOffset: 0, absoluteSize: size, absoluteOrthogonalSize: orthogonalSize });
986+
const [size, orthogonalSize, offset, orthogonalOffset] = this.root.orientation === Orientation.HORIZONTAL ? [height, width, top, left] : [width, height, left, top];
987+
this.root.layout(size, offset, { orthogonalSize, absoluteOffset: offset, absoluteOrthogonalOffset: orthogonalOffset, absoluteSize: size, absoluteOrthogonalSize: orthogonalSize });
988988
}
989989

990990
addView(view: IView, size: number | Sizing, location: number[]): void {

src/vs/workbench/browser/part.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export abstract class Part extends Component implements ISerializableView {
136136
abstract minimumHeight: number;
137137
abstract maximumHeight: number;
138138

139-
layout(width: number, height: number): void {
139+
layout(width: number, height: number, _top: number, _left: number): void {
140140
this._dimension = new Dimension(width, height);
141141
}
142142

src/vs/workbench/browser/parts/compositePart.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,8 @@ export abstract class CompositePart<T extends Composite> extends Part {
469469
return AnchorAlignment.RIGHT;
470470
}
471471

472-
override layout(width: number, height: number): void {
473-
super.layout(width, height);
472+
override layout(width: number, height: number, top: number, left: number): void {
473+
super.layout(width, height, top, left);
474474

475475
// Layout contents
476476
this.contentAreaSize = Dimension.lift(super.layoutContents(width, height).contentSize);

src/vs/workbench/browser/parts/editor/editorPart.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ class GridWidgetView<T extends IView> implements IView {
7171
this._gridWidget = grid;
7272
}
7373

74-
layout(width: number, height: number): void {
74+
layout(width: number, height: number, top: number, left: number): void {
7575
if (this.gridWidget) {
76-
this.gridWidget.layout(width, height);
76+
this.gridWidget.layout(width, height, top, left);
7777
}
7878
}
7979

@@ -443,7 +443,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro
443443
this.doCreateGridControlWithState(gridDescriptor, activeGroup.id, currentGroupViews);
444444

445445
// Layout
446-
this.doLayout(this._contentDimension);
446+
this.doLayout(this._contentDimension, 0, 0);
447447

448448
// Update container
449449
this.updateContainer();
@@ -1117,20 +1117,20 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro
11171117
this.centeredLayoutWidget.boundarySashes = sashes;
11181118
}
11191119

1120-
override layout(width: number, height: number): void {
1120+
override layout(width: number, height: number, top: number, left: number): void {
11211121

11221122
// Layout contents
11231123
const contentAreaSize = super.layoutContents(width, height).contentSize;
11241124

11251125
// Layout editor container
1126-
this.doLayout(Dimension.lift(contentAreaSize));
1126+
this.doLayout(Dimension.lift(contentAreaSize), top, left);
11271127
}
11281128

1129-
private doLayout(dimension: Dimension): void {
1129+
private doLayout(dimension: Dimension, top: number, left: number): void {
11301130
this._contentDimension = dimension;
11311131

11321132
// Layout Grid
1133-
this.centeredLayoutWidget.layout(this._contentDimension.width, this._contentDimension.height);
1133+
this.centeredLayoutWidget.layout(this._contentDimension.width, this._contentDimension.height, top, left);
11341134

11351135
// Event
11361136
this._onDidLayout.fire(dimension);

src/vs/workbench/browser/parts/panel/panelPart.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -596,15 +596,15 @@ export abstract class BasePanelPart extends CompositePart<PaneComposite> impleme
596596
this.layoutCompositeBar();
597597
}
598598

599-
override layout(width: number, height: number): void {
599+
override layout(width: number, height: number, top: number, left: number): void {
600600
if (!this.layoutService.isVisible(this.partId)) {
601601
return;
602602
}
603603

604604
this.contentDimension = new Dimension(width, height);
605605

606606
// Layout contents
607-
super.layout(this.contentDimension.width, this.contentDimension.height);
607+
super.layout(this.contentDimension.width, this.contentDimension.height, top, left);
608608

609609
// Layout composite bar
610610
this.layoutCompositeBar();
@@ -897,7 +897,7 @@ export class PanelPart extends BasePanelPart {
897897
return super.getToolbarWidth() + (this.globalToolBar?.getItemsWidth() ?? 0);
898898
}
899899

900-
override layout(width: number, height: number): void {
900+
override layout(width: number, height: number, top: number, left: number): void {
901901
let dimensions: Dimension;
902902
if (this.layoutService.getPanelPosition() === Position.RIGHT) {
903903
dimensions = new Dimension(width - 1, height); // Take into account the 1px border when layouting
@@ -906,7 +906,7 @@ export class PanelPart extends BasePanelPart {
906906
}
907907

908908
// Layout contents
909-
super.layout(dimensions.width, dimensions.height);
909+
super.layout(dimensions.width, dimensions.height, top, left);
910910
}
911911

912912
private updateGlobalToolbarActions(): void {

src/vs/workbench/browser/parts/sidebar/sidebarPart.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,12 @@ export class SidebarPart extends CompositePart<PaneComposite> implements IPaneCo
204204
container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? '';
205205
}
206206

207-
override layout(width: number, height: number): void {
207+
override layout(width: number, height: number, top: number, left: number): void {
208208
if (!this.layoutService.isVisible(Parts.SIDEBAR_PART)) {
209209
return;
210210
}
211211

212-
super.layout(width, height);
212+
super.layout(width, height, top, left);
213213
}
214214

215215
// Viewlet service

src/vs/workbench/browser/parts/statusbar/statusbarPart.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,8 @@ export class StatusbarPart extends Part implements IStatusbarService {
520520
this.styleElement.textContent = `.monaco-workbench .part.statusbar > .items-container > .statusbar-item.has-beak:before { border-bottom-color: ${backgroundColor}; }`;
521521
}
522522

523-
override layout(width: number, height: number): void {
524-
super.layout(width, height);
523+
override layout(width: number, height: number, top: number, left: number): void {
524+
super.layout(width, height, top, left);
525525
super.layoutContents(width, height);
526526
}
527527

src/vs/workbench/test/browser/workbenchTestServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1635,7 +1635,7 @@ export class TestEditorPart extends EditorPart {
16351635
export async function createEditorPart(instantiationService: IInstantiationService, disposables: DisposableStore): Promise<TestEditorPart> {
16361636
const part = disposables.add(instantiationService.createInstance(TestEditorPart));
16371637
part.create(document.createElement('div'));
1638-
part.layout(1080, 800);
1638+
part.layout(1080, 800, 0, 0);
16391639

16401640
await part.whenReady;
16411641

0 commit comments

Comments
 (0)