aboutsummaryrefslogtreecommitdiff
path: root/src/layout.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout.js')
-rw-r--r--src/layout.js27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/layout.js b/src/layout.js
index ea4dbd1..9137a88 100644
--- a/src/layout.js
+++ b/src/layout.js
@@ -243,7 +243,7 @@ const staticRectLayout = {
};
const sweepToSideLayout = {
genLayout(node, x, y, w, h, hideHeader, parentArea = null){
- let SWEEP_LEFT_ONLY = false, ALLOW_PARENT_AREA = true;
+ let SWEEP_LEFT_ONLY = true, ALLOW_PARENT_AREA = true;
//separate leaf and non-leaf nodes
let leaves = [], nonLeaves = [];
node.children.forEach(n => (n.children.length == 0 ? leaves : nonLeaves).push(n));
@@ -257,14 +257,18 @@ const sweepToSideLayout = {
} else {
let ratio = leaves.length / (leaves.length + nonLeaves.map(e => e.tileCount).reduce((x,y) => x+y));
let headerSz = (hideHeader ? 0 : HEADER_SZ);
- let area = {x: x, y: y+headerSz, w: w, h: h-headerSz};
let sweptLayout, nonLeavesLayout, sweptLeft = false, leftOverArea;
//get swept-area layout
let usingParentArea = false;
if (ALLOW_PARENT_AREA && parentArea != null){
tempTree = {tolNode: null, children: leaves};
- sweptLayout = staticSqrLayout.genLayout(tempTree, 0, 0, parentArea.w, parentArea.h, true);
+ sweptLeft = parentArea.sweptLeft;
+ sweptLayout = staticSqrLayout.genLayout(tempTree, 0, 0, parentArea.w, parentArea.h, sweptLeft);
if (sweptLayout != null){
+ let area = {x: x, y: y+headerSz, w: w, h: h-headerSz};
+ if (!parentArea.sweptLeft){ //no remaining-area header if swept-upward
+ area.y = y; area.h = h;
+ }
//get remaining-area layout
tempTree = {tolNode: null, children: nonLeaves};
if (nonLeaves.length > 1){
@@ -274,25 +278,26 @@ const sweepToSideLayout = {
//get leftover swept-layout-area to propagate
let leftOverWidth = parentArea.w - sweptLayout.contentW;
let leftOverHeight = parentArea.h - sweptLayout.contentH;
- leftOverArea = (leftOverWidth > leftOverHeight) ?
- {...parentArea, parentX:parentArea.parentX+sweptLayout.contentW-TILE_SPACING,
- w:leftOverWidth-TILE_SPACING} :
- {...parentArea, parentY:parentArea.parentY+sweptLayout.contentH-TILE_SPACING,
- h:leftOverHeight-TILE_SPACING};
- leftOverArea.parentY += -headerSz;
+ leftOverArea = (leftOverWidth < leftOverHeight) ?
+ {...parentArea, parentY:parentArea.parentY+sweptLayout.contentH-TILE_SPACING-headerSz,
+ h:leftOverHeight-TILE_SPACING} :
+ {...parentArea,
+ parentX:parentArea.parentX+sweptLayout.contentW-TILE_SPACING,
+ parentY:parentArea.parentY + headerSz,
+ w:leftOverWidth-TILE_SPACING, h:parentArea.h - headerSz};
//call genLayout
nonLeavesLayout = staticRectLayout.genLayout(
tempTree, 0, 0, area.w, area.h, true,
(n,x,y,w,h,hh) => sweepToSideLayout.genLayout(n,x,y,w,h,hh,leftOverArea));
}
if (nonLeavesLayout != null){
- nonLeavesLayout.children.forEach(layout => {layout.y += headerSz});
- sweptLeft = parentArea.sweptLeft;
+ nonLeavesLayout.children.forEach(layout => {layout.y += (sweptLeft ? headerSz : 0)});
usingParentArea = true;
}
}
}
if (!usingParentArea){
+ let area = {x: x, y: y+headerSz, w: w, h: h-headerSz};
tempTree = {tolNode: null, children: leaves};
let xyChg;
if (SWEEP_LEFT_ONLY){