rename Grid.ScrollPos to Grid.Range

This commit is contained in:
Peter Fajdiga
2023-12-02 13:55:39 +01:00
parent 8915e8a9da
commit 5d83c6dd2c
4 changed files with 49 additions and 53 deletions

View File

@@ -221,7 +221,7 @@ namespace Actions {
gridScrollLeftColumn: () => {
world.do((clientManager, desktopManager) => {
const grid = desktopManager.getCurrentDesktop().grid;
const column = grid.getLeftmostVisibleColumn(grid.desktop.getCurrentScrollPos(), true);
const column = grid.getLeftmostVisibleColumn(grid.desktop.getCurrentVisibleRange(), true);
if (column === null) {
return;
}
@@ -238,7 +238,7 @@ namespace Actions {
gridScrollRightColumn: () => {
world.do((clientManager, desktopManager) => {
const grid = desktopManager.getCurrentDesktop().grid;
const column = grid.getRightmostVisibleColumn(grid.desktop.getCurrentScrollPos(), true);
const column = grid.getRightmostVisibleColumn(grid.desktop.getCurrentVisibleRange(), true);
if (column === null) {
return;
}

View File

@@ -237,13 +237,13 @@ class Column {
return true;
}
public isVisible(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
public isVisible(visibleRange: Desktop.Range, fullyVisible: boolean) {
if (fullyVisible) {
return this.getLeft() >= scrollPos.getLeft() &&
this.getRight() <= scrollPos.getRight();
return this.getLeft() >= visibleRange.getLeft() &&
this.getRight() <= visibleRange.getRight();
} else {
return this.getRight() + this.grid.config.gapsInnerHorizontal > scrollPos.getLeft() &&
this.getLeft() - this.grid.config.gapsInnerHorizontal < scrollPos.getRight();
return this.getRight() + this.grid.config.gapsInnerHorizontal > visibleRange.getLeft() &&
this.getLeft() - this.grid.config.gapsInnerHorizontal < visibleRange.getRight();
}
}

View File

@@ -52,30 +52,30 @@ class Desktop {
)
}
// calculates Desktop.Pos that scrolls the column into view
public getScrollPosForColumn(column: Column) {
// calculates Desktop.Range that scrolls the column into view
public getVisibleRangeForColumn(column: Column) {
const left = column.getLeft();
const right = column.getRight();
const initialScrollPos = this.getCurrentScrollPos();
const initialVisibleRange = this.getCurrentVisibleRange();
let targetScrollX: number;
if (left < initialScrollPos.getLeft()) {
if (left < initialVisibleRange.getLeft()) {
targetScrollX = left;
} else if (right > initialScrollPos.getRight()) {
} else if (right > initialVisibleRange.getRight()) {
targetScrollX = right - this.tilingArea.width;
} else {
return this.getScrollPos(this.clampScrollX(this.scrollX));
return this.getVisibleRange(this.clampScrollX(this.scrollX));
}
const overscroll = this.getTargetOverscroll(targetScrollX, left < initialScrollPos.getLeft());
return this.getScrollPos(this.clampScrollX(targetScrollX + overscroll));
const overscroll = this.getTargetOverscroll(targetScrollX, left < initialVisibleRange.getLeft());
return this.getVisibleRange(this.clampScrollX(targetScrollX + overscroll));
}
private getTargetOverscroll(targetScrollX: number, scrollLeft: boolean) {
if (this.config.overscroll === 0) {
return 0;
}
const visibleColumnsWidth = this.grid.getVisibleColumnsWidth(this.getScrollPos(targetScrollX), true);
const visibleColumnsWidth = this.grid.getVisibleColumnsWidth(this.getVisibleRange(targetScrollX), true);
const remainingSpace = this.tilingArea.width - visibleColumnsWidth;
const overscrollX = Math.min(this.config.overscroll, Math.round(remainingSpace / 2));
const direction = scrollLeft ? -1 : 1;
@@ -83,7 +83,7 @@ class Desktop {
}
public scrollToColumn(column: Column) {
this.setScroll(this.getScrollPosForColumn(column).x, true);
this.setScroll(this.getVisibleRangeForColumn(column).x, true);
}
public scrollCenterColumn(column: Column) {
@@ -106,12 +106,12 @@ class Desktop {
this.scrollToColumn(focusedColumn);
}
private getScrollPos(scrollX: number) {
return new Desktop.ScrollPos(scrollX, this.tilingArea.width);
private getVisibleRange(scrollX: number) {
return new Desktop.Range(scrollX, this.tilingArea.width);
}
public getCurrentScrollPos() {
return this.getScrollPos(this.scrollX);
public getCurrentVisibleRange() {
return this.getVisibleRange(this.scrollX);
}
private clampScrollX(x: number) {
@@ -133,10 +133,6 @@ class Desktop {
}
}
private applyScrollPos(scrollPos: Desktop.ScrollPos) {
this.setScroll(scrollPos.x, true);
}
public adjustScroll(dx: number, force: boolean) {
this.setScroll(this.scrollX + dx, force);
}
@@ -146,8 +142,8 @@ class Desktop {
}
public equalizeVisibleColumnsWidths() {
const scrollPos = this.getCurrentScrollPos();
const visibleColumns = Array.from(this.grid.getVisibleColumns(scrollPos, true));
const visibleRange = this.getCurrentVisibleRange();
const visibleColumns = Array.from(this.grid.getVisibleColumns(visibleRange, true));
let remainingWidth = this.tilingArea.width - (visibleColumns.length-1) * this.grid.config.gapsInnerHorizontal;
let remainingColumns = visibleColumns.length;
@@ -192,7 +188,7 @@ namespace Desktop {
overscroll: number,
};
export class ScrollPos {
export class Range {
public readonly x: number;
public readonly width: number;

View File

@@ -88,8 +88,8 @@ class Grid {
this.width = x - this.config.gapsInnerHorizontal;
}
public getLeftmostVisibleColumn(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
const scrollX = scrollPos.getLeft();
public getLeftmostVisibleColumn(visibleRange: Desktop.Range, fullyVisible: boolean) {
const scrollX = visibleRange.getLeft();
for (const column of this.columns.iterator()) {
const x = fullyVisible ? column.getLeft() : column.getRight() + (this.config.gapsInnerHorizontal - 1);
if (x >= scrollX) {
@@ -99,8 +99,8 @@ class Grid {
return null;
}
public getRightmostVisibleColumn(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
const scrollX = scrollPos.getRight();
public getRightmostVisibleColumn(visibleRange: Desktop.Range, fullyVisible: boolean) {
const scrollX = visibleRange.getRight();
let last = null;
for (const column of this.columns.iterator()) {
const x = fullyVisible ? column.getRight() : column.getLeft() - (this.config.gapsInnerHorizontal - 1);
@@ -113,18 +113,18 @@ class Grid {
return last;
}
public *getVisibleColumns(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
public *getVisibleColumns(visibleRange: Desktop.Range, fullyVisible: boolean) {
for (const column of this.columns.iterator()) {
if (column.isVisible(scrollPos, fullyVisible)) {
if (column.isVisible(visibleRange, fullyVisible)) {
yield column;
}
}
}
public getVisibleColumnsWidth(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
public getVisibleColumnsWidth(visibleRange: Desktop.Range, fullyVisible: boolean) {
let width = 0;
let nVisible = 0;
for (const column of this.getVisibleColumns(scrollPos, fullyVisible)) {
for (const column of this.getVisibleColumns(visibleRange, fullyVisible)) {
width += column.getWidth();
nVisible++;
}
@@ -136,16 +136,16 @@ class Grid {
return width;
}
private getLeftOffScreenColumn(scrollPos: Desktop.ScrollPos) {
const leftVisible = this.getLeftmostVisibleColumn(scrollPos, true);
private getLeftOffScreenColumn(visibleRange: Desktop.Range) {
const leftVisible = this.getLeftmostVisibleColumn(visibleRange, true);
if (leftVisible === null) {
return null;
}
return this.getPrevColumn(leftVisible);
}
private getRightOffScreenColumn(scrollPos: Desktop.ScrollPos) {
const rightVisible = this.getRightmostVisibleColumn(scrollPos, true);
private getRightOffScreenColumn(visibleRange: Desktop.Range) {
const rightVisible = this.getRightmostVisibleColumn(visibleRange, true);
if (rightVisible === null) {
return null;
}
@@ -153,17 +153,17 @@ class Grid {
}
public increaseColumnWidth(column: Column) {
const scrollPos = this.desktop.getScrollPosForColumn(column);
if (this.width < scrollPos.width) {
column.adjustWidth(scrollPos.width - this.width, true);
const visibleRange = this.desktop.getVisibleRangeForColumn(column);
if (this.width < visibleRange.width) {
column.adjustWidth(visibleRange.width - this.width, true);
return;
}
let leftColumn = this.getLeftmostVisibleColumn(scrollPos, false);
let leftColumn = this.getLeftmostVisibleColumn(visibleRange, false);
if (leftColumn === column) {
leftColumn = null;
}
let rightColumn = this.getRightmostVisibleColumn(scrollPos, false);
let rightColumn = this.getRightmostVisibleColumn(visibleRange, false);
if (rightColumn === column) {
rightColumn = null;
}
@@ -171,8 +171,8 @@ class Grid {
return;
}
const leftVisibleWidth = leftColumn === null ? Infinity : leftColumn.getRight() - scrollPos.getLeft();
const rightVisibleWidth = rightColumn === null ? Infinity : scrollPos.getRight() - rightColumn.getLeft();
const leftVisibleWidth = leftColumn === null ? Infinity : leftColumn.getRight() - visibleRange.getLeft();
const rightVisibleWidth = rightColumn === null ? Infinity : visibleRange.getRight() - rightColumn.getLeft();
const expandLeft = leftVisibleWidth < rightVisibleWidth;
const widthDelta = (expandLeft ? leftVisibleWidth : rightVisibleWidth) + this.config.gapsInnerHorizontal;
if (expandLeft) {
@@ -182,17 +182,17 @@ class Grid {
}
public decreaseColumnWidth(column: Column) {
const scrollPos = this.desktop.getScrollPosForColumn(column);
if (this.width <= scrollPos.width) {
const visibleRange = this.desktop.getVisibleRangeForColumn(column);
if (this.width <= visibleRange.width) {
column.setWidth(Math.round(column.getWidth() / 2), true);
return;
}
let leftColumn = this.getLeftOffScreenColumn(scrollPos);
let leftColumn = this.getLeftOffScreenColumn(visibleRange);
if (leftColumn === column) {
leftColumn = null;
}
let rightColumn = this.getRightOffScreenColumn(scrollPos);
let rightColumn = this.getRightOffScreenColumn(visibleRange);
if (rightColumn === column) {
rightColumn = null;
}
@@ -200,8 +200,8 @@ class Grid {
return;
}
const leftInvisibleWidth = leftColumn === null ? Infinity : scrollPos.getLeft() - leftColumn.getLeft();
const rightInvisibleWidth = rightColumn === null ? Infinity : rightColumn.getRight() - scrollPos.getRight();
const leftInvisibleWidth = leftColumn === null ? Infinity : visibleRange.getLeft() - leftColumn.getLeft();
const rightInvisibleWidth = rightColumn === null ? Infinity : rightColumn.getRight() - visibleRange.getRight();
const shrinkLeft = leftInvisibleWidth < rightInvisibleWidth;
const widthDelta = (shrinkLeft ? leftInvisibleWidth : rightInvisibleWidth);
if (shrinkLeft) {