aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/TileTree.vue2
-rw-r--r--src/layout.ts40
2 files changed, 21 insertions, 21 deletions
diff --git a/src/components/TileTree.vue b/src/components/TileTree.vue
index 0e5b793..e1b1814 100644
--- a/src/components/TileTree.vue
+++ b/src/components/TileTree.vue
@@ -39,7 +39,7 @@ export default defineComponent({
return {
layoutOptions: defaultLayoutOptions,
otherOptions: defaultOtherOptions,
- layoutTree: new LayoutTree(tol as TolNode, 1, defaultLayoutOptions),
+ layoutTree: new LayoutTree(tol as TolNode, 0, defaultLayoutOptions),
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
resizeThrottled: false,
diff --git a/src/layout.ts b/src/layout.ts
index 961083b..7e44b64 100644
--- a/src/layout.ts
+++ b/src/layout.ts
@@ -21,9 +21,9 @@ export class LayoutTree {
tryLayout(pos: [number,number], dims: [number,number]){
let newLayout: LayoutNode | null;
switch (this.options.layoutType){
- case 'sqr': newLayout = sqrLayoutFn(this.root, pos, dims, false, this.options); break;
- case 'rect': newLayout = rectLayoutFn(this.root, pos, dims, false, this.options); break;
- case 'sweep': newLayout = sweepLayoutFn(this.root, pos, dims, false, this.options); break;
+ case 'sqr': newLayout = sqrLayoutFn(this.root, pos, dims, true, this.options); break;
+ case 'rect': newLayout = rectLayoutFn(this.root, pos, dims, true, this.options); break;
+ case 'sweep': newLayout = sweepLayoutFn(this.root, pos, dims, true, this.options); break;
}
if (newLayout == null)
return false;
@@ -77,7 +77,6 @@ export class LayoutTree {
}
export type LayoutOptions = {
tileSpacing: number;
- //showHeader: 'all' | 'non-root' | 'expanded' | 'expanded non-root' | 'leaf' | 'none'?
headerSz: number;
minTileSz: number;
maxTileSz: number;
@@ -133,6 +132,12 @@ type LayoutFn = (node: LayoutNode, pos: [number, number], dims: [number, number]
//lays out nodes as squares in a rectangle, with spacing
let sqrLayoutFn: LayoutFn = function (node, pos, dims, showHeader, opts){
+ if (node.children.length == 0){
+ let tileSz = Math.min(dims[0], dims[1], opts.maxTileSz);
+ if (tileSz < opts.minTileSz)
+ return null;
+ return new LayoutNode(node.tolNode, [], pos, [tileSz,tileSz], {usedDims: [tileSz,tileSz], empSpc: 0});
+ }
//get number-of-columns with lowest leftover empty space
let headerSz = showHeader ? opts.headerSz : 0;
let availW = dims[0] - opts.tileSpacing, availH = dims[1] - headerSz - opts.tileSpacing;
@@ -164,15 +169,10 @@ let sqrLayoutFn: LayoutFn = function (node, pos, dims, showHeader, opts){
let child = node.children[i];
let childX = opts.tileSpacing + (i % numCols)*(tileSize + opts.tileSpacing);
let childY = opts.tileSpacing + headerSz + Math.floor(i / numCols)*(tileSize + opts.tileSpacing);
- if (child.children.length == 0){
- childLayouts[i] = new LayoutNode(child.tolNode, [], [childX,childY], [tileSize,tileSize],
- {usedDims: [tileSize,tileSize], empSpc: 0});
- } else {
- childLayouts[i] = sqrLayoutFn(child, [childX,childY], [tileSize,tileSize], true, opts);
- if (childLayouts[i] == null)
- return null;
- lowestEmp += childLayouts[i].empSpc;
- }
+ childLayouts[i] = sqrLayoutFn(child, [childX,childY], [tileSize,tileSize], true, opts);
+ if (childLayouts[i] == null)
+ return null;
+ lowestEmp += childLayouts[i].empSpc;
}
let newNode = new LayoutNode(node.tolNode, childLayouts, pos, dims, {
showHeader,
@@ -373,7 +373,7 @@ let sweepLayoutFn: LayoutFn = function (node, pos, dims, showHeader, opts, ownOp
tempTree = new LayoutNode(new TolNode('SWEEP_' + node.tolNode.name), leaves);
//not updating the children to point to tempTree as a parent seems acceptable here
sweptLeft = parentArea.sweptLeft;
- sweptLayout = sqrLayoutFn(tempTree, [0,0], parentArea.dims, sweptLeft, opts);
+ sweptLayout = sqrLayoutFn(tempTree, [0,0], parentArea.dims, !sweptLeft, opts);
if (sweptLayout != null){
//move leaves to parent area
sweptLayout.children.map(n => {
@@ -486,12 +486,12 @@ let sweepLayoutFn: LayoutFn = function (node, pos, dims, showHeader, opts, ownOp
let newNode = new LayoutNode(node.tolNode, layoutsInOldOrder, pos, dims, {
showHeader,
usedDims: [
- usingParentArea ? nonLeavesLayout.dims[0] : (sweptLeft ?
- sweptLayout.dims[0] + nonLeavesLayout.dims[0] - opts.tileSpacing :
- Math.max(sweptLayout.dims[0], nonLeavesLayout.dims[0])),
- usingParentArea ? nonLeavesLayout.dims[1] + headerSz : (sweptLeft ?
- Math.max(sweptLayout.dims[1], nonLeavesLayout.dims[1]) + headerSz :
- sweptLayout.dims[1] + nonLeavesLayout.dims[1] - opts.tileSpacing + headerSz),
+ usingParentArea ? nonLeavesLayout.usedDims[0] : (sweptLeft ?
+ sweptLayout.usedDims[0] + nonLeavesLayout.usedDims[0] - opts.tileSpacing :
+ Math.max(sweptLayout.usedDims[0], nonLeavesLayout.usedDims[0])),
+ usingParentArea ? nonLeavesLayout.usedDims[1] + headerSz : (sweptLeft ?
+ Math.max(sweptLayout.usedDims[1], nonLeavesLayout.usedDims[1]) + headerSz :
+ sweptLayout.usedDims[1] + nonLeavesLayout.usedDims[1] - opts.tileSpacing + headerSz),
],
empSpc: sweptLayout.empSpc + nonLeavesLayout.empSpc,
sepSweptArea: (usingParentArea && parentArea) ? parentArea : null,