UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

28 lines (27 loc) 1.5 kB
import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter'; import { ColumnIntervalFixed } from '../../../../../layout-formatter/table/grid-engine/calculators/column-interval'; import { Calculator } from '../../../../../layout-formatter/table/grid-engine/calculators/column-width-engine/calculator'; import { Columns } from '../../../../../layout-formatter/table/grid-engine/columns'; import { Grid } from '../../../../../layout-formatter/table/grid-engine/grid'; export function createRtfModelGrid(table) { const grid = new Grid(table); grid.columns = Columns.fromWidths(computeColumnWidthsFromModel(table)); return grid; } function computeColumnWidthsFromModel(table) { const tableWidthPx = table.preferredWidth.asNumberNoPercentType(UnitConverter.twipsToPixelsF); const widths = Calculator.getIntervals(table).map(interval => { const column = new ColumnIntervalFixed(interval); return column.isPercentBased ? tableWidthPx * column.width / 5000 : column.width; }); const knownWidth = widths.reduce((s, w) => s + w, 0); const zeros = widths.filter(w => w <= 0).length; if (zeros > 0) { const remaining = tableWidthPx > knownWidth ? tableWidthPx - knownWidth : zeros; const fallback = remaining / zeros; for (let i = 0; i < widths.length; i++) if (widths[i] <= 0) widths[i] = fallback; } return widths.map(w => Math.max(Math.round(w), 1)); }