Skip to content

Commit

Permalink
connect nested grids absolute offsets
Browse files Browse the repository at this point in the history
  • Loading branch information
joaomoreno committed Oct 25, 2021
1 parent 2ea55a5 commit 910511b
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 33 deletions.
14 changes: 7 additions & 7 deletions src/vs/base/browser/ui/centered/centeredViewLayout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const GOLDEN_RATIO = {
rightMarginRatio: 0.1909
};

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

function toSplitViewView(view: IView, getHeight: () => number): ISplitViewView {
function toSplitViewView(view: IView, getHeight: () => number): ISplitViewView<{ top: number, left: number }> {
return {
element: view.element,
get maximumSize() { return view.maximumWidth; },
get minimumSize() { return view.minimumWidth; },
onDidChange: Event.map(view.onDidChange, e => e && e.width),
layout: (size, offset) => view.layout(size, getHeight(), 0, offset)
layout: (size, offset, ctx) => view.layout(size, getHeight(), ctx?.top ?? 0, (ctx?.left ?? 0) + offset)
};
}

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

export class CenteredViewLayout implements IDisposable {

private splitView?: SplitView;
private splitView?: SplitView<{ top: number, left: number }>;
private width: number = 0;
private height: number = 0;
private style!: ICenteredViewStyles;
private didLayout = false;
private emptyViews: ISplitViewView[] | undefined;
private emptyViews: ISplitViewView<{ top: number, left: number }>[] | undefined;
private readonly splitViewDisposables = new DisposableStore();

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

layout(width: number, height: number): void {
layout(width: number, height: number, top: number, left: number): void {
this.width = width;
this.height = height;
if (this.splitView) {
Expand All @@ -95,7 +95,7 @@ export class CenteredViewLayout implements IDisposable {
this.resizeMargins();
}
} else {
this.view.layout(width, height, 0, 0);
this.view.layout(width, height, top, left);
}
this.didLayout = true;
}
Expand Down
8 changes: 4 additions & 4 deletions src/vs/base/browser/ui/grid/grid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,8 @@ export class Grid<T extends IView = IView> extends Disposable {
this.gridview.style(styles);
}

layout(width: number, height: number): void {
this.gridview.layout(width, height);
layout(width: number, height: number, top: number = 0, left: number = 0): void {
this.gridview.layout(width, height, top, left);
this.didLayout = true;
}

Expand Down Expand Up @@ -556,8 +556,8 @@ export class SerializableGrid<T extends ISerializableView> extends Grid<T> {
};
}

override layout(width: number, height: number): void {
super.layout(width, height);
override layout(width: number, height: number, top: number = 0, left: number = 0): void {
super.layout(width, height, top, left);

if (this.initialLayoutContext) {
this.initialLayoutContext = false;
Expand Down
6 changes: 3 additions & 3 deletions src/vs/base/browser/ui/grid/gridview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -980,11 +980,11 @@ export class GridView implements IDisposable {
this.root.style(styles);
}

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

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

addView(view: IView, size: number | Sizing, location: number[]): void {
Expand Down
2 changes: 1 addition & 1 deletion src/vs/workbench/browser/part.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ export abstract class Part extends Component implements ISerializableView {
abstract minimumHeight: number;
abstract maximumHeight: number;

layout(width: number, height: number): void {
layout(width: number, height: number, _top: number, _left: number): void {
this._dimension = new Dimension(width, height);
}

Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/browser/parts/compositePart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -469,8 +469,8 @@ export abstract class CompositePart<T extends Composite> extends Part {
return AnchorAlignment.RIGHT;
}

override layout(width: number, height: number): void {
super.layout(width, height);
override layout(width: number, height: number, top: number, left: number): void {
super.layout(width, height, top, left);

// Layout contents
this.contentAreaSize = Dimension.lift(super.layoutContents(width, height).contentSize);
Expand Down
14 changes: 7 additions & 7 deletions src/vs/workbench/browser/parts/editor/editorPart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ class GridWidgetView<T extends IView> implements IView {
this._gridWidget = grid;
}

layout(width: number, height: number): void {
layout(width: number, height: number, top: number, left: number): void {
if (this.gridWidget) {
this.gridWidget.layout(width, height);
this.gridWidget.layout(width, height, top, left);
}
}

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

// Layout
this.doLayout(this._contentDimension);
this.doLayout(this._contentDimension, 0, 0);

// Update container
this.updateContainer();
Expand Down Expand Up @@ -1117,20 +1117,20 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro
this.centeredLayoutWidget.boundarySashes = sashes;
}

override layout(width: number, height: number): void {
override layout(width: number, height: number, top: number, left: number): void {

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

// Layout editor container
this.doLayout(Dimension.lift(contentAreaSize));
this.doLayout(Dimension.lift(contentAreaSize), top, left);
}

private doLayout(dimension: Dimension): void {
private doLayout(dimension: Dimension, top: number, left: number): void {
this._contentDimension = dimension;

// Layout Grid
this.centeredLayoutWidget.layout(this._contentDimension.width, this._contentDimension.height);
this.centeredLayoutWidget.layout(this._contentDimension.width, this._contentDimension.height, top, left);

// Event
this._onDidLayout.fire(dimension);
Expand Down
8 changes: 4 additions & 4 deletions src/vs/workbench/browser/parts/panel/panelPart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -596,15 +596,15 @@ export abstract class BasePanelPart extends CompositePart<PaneComposite> impleme
this.layoutCompositeBar();
}

override layout(width: number, height: number): void {
override layout(width: number, height: number, top: number, left: number): void {
if (!this.layoutService.isVisible(this.partId)) {
return;
}

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

// Layout contents
super.layout(this.contentDimension.width, this.contentDimension.height);
super.layout(this.contentDimension.width, this.contentDimension.height, top, left);

// Layout composite bar
this.layoutCompositeBar();
Expand Down Expand Up @@ -897,7 +897,7 @@ export class PanelPart extends BasePanelPart {
return super.getToolbarWidth() + (this.globalToolBar?.getItemsWidth() ?? 0);
}

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

// Layout contents
super.layout(dimensions.width, dimensions.height);
super.layout(dimensions.width, dimensions.height, top, left);
}

private updateGlobalToolbarActions(): void {
Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/browser/parts/sidebar/sidebarPart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,12 +204,12 @@ export class SidebarPart extends CompositePart<PaneComposite> implements IPaneCo
container.style.outlineColor = this.getColor(SIDE_BAR_DRAG_AND_DROP_BACKGROUND) ?? '';
}

override layout(width: number, height: number): void {
override layout(width: number, height: number, top: number, left: number): void {
if (!this.layoutService.isVisible(Parts.SIDEBAR_PART)) {
return;
}

super.layout(width, height);
super.layout(width, height, top, left);
}

// Viewlet service
Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/browser/parts/statusbar/statusbarPart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -520,8 +520,8 @@ export class StatusbarPart extends Part implements IStatusbarService {
this.styleElement.textContent = `.monaco-workbench .part.statusbar > .items-container > .statusbar-item.has-beak:before { border-bottom-color: ${backgroundColor}; }`;
}

override layout(width: number, height: number): void {
super.layout(width, height);
override layout(width: number, height: number, top: number, left: number): void {
super.layout(width, height, top, left);
super.layoutContents(width, height);
}

Expand Down
2 changes: 1 addition & 1 deletion src/vs/workbench/test/browser/workbenchTestServices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1635,7 +1635,7 @@ export class TestEditorPart extends EditorPart {
export async function createEditorPart(instantiationService: IInstantiationService, disposables: DisposableStore): Promise<TestEditorPart> {
const part = disposables.add(instantiationService.createInstance(TestEditorPart));
part.create(document.createElement('div'));
part.layout(1080, 800);
part.layout(1080, 800, 0, 0);

await part.whenReady;

Expand Down

0 comments on commit 910511b

Please sign in to comment.