package org.basex.gui.view.map;
/**
* Slice-and-Dice layout algorithm.
*
* @author BaseX Team 2005-12, BSD License
* @author Joerg Hauser
*/
final class SliceDiceAlgo extends MapAlgo {
@Override
MapRects calcMap(final MapRect r, final MapList ml,
final int ns, final int ne) {
// setting initial proportions
double xx = r.x;
double yy = r.y;
double ww = 0;
double hh = 0;
int tx = -1;
int ty = -1;
int th = -1;
int tw = -1;
final MapRects rects = new MapRects();
// calculate map for each rectangle on this level
final int is = ml.size();
for(int i = 0; i < is; ++i) {
if((r.level & 1) == 0) {
yy += hh;
hh = ml.weight[i] * r.h;
ww = r.w;
} else {
xx += ww;
ww = ml.weight[i] * r.w;
hh = r.h;
}
if(ww > 0 && hh > 0 && (tx != (int) xx || ty != (int) yy ||
th != (int) hh || tw != (int) ww))
rects.add(new MapRect((int) xx, (int) yy, (int) ww, (int) hh,
ml.get(i), r.level));
tx = (int) xx;
ty = (int) yy;
th = (int) hh;
tw = (int) ww;
}
return rects;
}
}