aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/TileTree.vue1
-rw-r--r--src/lib.ts13
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 = {
diff --git a/src/lib.ts b/src/lib.ts
index b23ccc0..e27b7d1 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -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