diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/TileTree.vue | 1 | ||||
| -rw-r--r-- | src/lib.ts | 13 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/components/TileTree.vue b/src/components/TileTree.vue index 36180c0..4969c2c 100644 --- a/src/components/TileTree.vue +++ b/src/components/TileTree.vue @@ -26,6 +26,7 @@ let defaultLayoutOptions: LayoutOptions = { rectMode: 'auto', //'horz' | 'vert' | 'linear' | 'auto' rectSpaceShifting: true, sweepMode: 'left', //'left' | 'top' | 'shorter' | 'auto' + sweptNodesPrio: 'sqrt', //'linear' | 'sqrt' | 'sqrt-when-high' sweepingToParent: true, }; let defaultOtherOptions = { @@ -90,6 +90,7 @@ export type LayoutOptions = { rectMode: 'horz' | 'vert' | 'linear' | 'auto'; rectSpaceShifting: boolean; sweepMode: 'left' | 'top' | 'shorter' | 'auto'; + sweptNodesPrio: 'linear' | 'sqrt' | 'sqrt-when-high'; sweepingToParent: boolean; }; export class LayoutNode { @@ -359,7 +360,17 @@ let sweepLayoutFn: LayoutFn = function (node, pos, dims, showHeader, opts, ownOp } else if (leaves.length == 0){ return rectLayoutFn(node, pos, dims, showHeader, opts, {subLayoutFn:sweepLayoutFn}); } else { - let ratio = leaves.length / (leaves.length + nonLeaves.map(n => n.dCount).reduce((x,y) => x+y)); + let ratio: number, numNonLeaves = nonLeaves.map(n => n.dCount).reduce((x,y) => x+y); + if (opts.sweptNodesPrio == 'linear'){ + ratio = leaves.length / (leaves.length + numNonLeaves); + } else if (opts.sweptNodesPrio == 'sqrt'){ + ratio = Math.sqrt(leaves.length) / (Math.sqrt(leaves.length) + Math.sqrt(numNonLeaves)); + } else { + ratio = (leaves.length < nonLeaves.length) ? + leaves.length / (leaves.length + numNonLeaves) : + Math.sqrt(leaves.length) / (Math.sqrt(leaves.length) + Math.sqrt(numNonLeaves)); + } + // let headerSz = showHeader ? opts.headerSz : 0; let sweptLayout = null, nonLeavesLayout = null, sweptLeft = false; //get swept-area layout |
