devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
58 lines (57 loc) • 2.63 kB
JavaScript
import { RenderPageVertivalInfo } from '../view-settings/views-settings';
import { Size } from '@devexpress/utils/lib/geometry/size';
import { SearchUtils } from '@devexpress/utils/lib/utils/search';
import { DomUtils } from '@devexpress/utils/lib/utils/dom';
import { SizeUtils } from '../utils/size-utils';
export class CanvasSizeInfo {
constructor() {
this.topSpacing = -1;
this.betweenPageSpacing = 1;
this.visibleAreaSize = new Size(-1, -1);
this.scrollWidth = -1;
this.pageVerticalInfo = new RenderPageVertivalInfo();
this.scrollWidth = DomUtils.getVerticalScrollBarWidth();
}
isInitialized() {
return this.topSpacing >= 0;
}
initialize(page, canvas) {
this.pageVerticalInfo.init(DomUtils.getCurrentStyle(page));
this.topSpacing = this.pageVerticalInfo.topPageBorderWidth + this.pageVerticalInfo.topMargin;
this.betweenPageSpacing = this.pageVerticalInfo.betweenPageSpacing;
this.setVisibleAreaSize(SizeUtils.getClientWidth(canvas), SizeUtils.getClientHeight(canvas));
}
findPageIndexByOffsetY(pages, offsetY) {
return Math.max(0, SearchUtils.normedInterpolationIndexOf(pages, (p) => this.getPageOffsetY(p), offsetY));
}
getPageOffsetY(layoutPage) {
return layoutPage.y + (this.topSpacing + layoutPage.index * this.betweenPageSpacing);
}
setVisibleAreaSize(width, height) {
this.visibleAreaSize.width = width;
this.visibleAreaSize.height = height;
}
getVisibleAreaWidth(includeScrollBars) {
if (!includeScrollBars)
return this.visibleAreaSize.width;
return this.scrollYVisible ? this.visibleAreaSize.width + this.scrollWidth : this.visibleAreaSize.width;
}
getVisibleAreaHeight(includeScrollBars) {
if (!includeScrollBars)
return this.visibleAreaSize.height;
return this.scrollXVisible ? this.visibleAreaSize.height + this.scrollWidth : this.visibleAreaSize.height;
}
updateScrollVisibility(canvas) {
this.scrollXVisible = SizeUtils.getHeightInfo(canvas).scrollbarSize > 0;
this.scrollYVisible = SizeUtils.getWidthInfo(canvas).scrollbarSize > 0;
}
updateSize(canvas) {
const width = SizeUtils.getClientWidth(canvas);
const height = SizeUtils.getClientHeight(canvas);
if (this.visibleAreaSize.width !== width || this.visibleAreaSize.height !== height) {
this.setVisibleAreaSize(width, height);
return true;
}
return false;
}
}