UNPKG

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
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; } }