Adjust bounding box to accound for border and padding
This commit is contained in:
parent
edfe289983
commit
d31dad0e79
|
@ -982,13 +982,34 @@
|
||||||
if (scale*cbox.d - y > this.d) this.d = scale*cbox.d - y;
|
if (scale*cbox.d - y > this.d) this.d = scale*cbox.d - y;
|
||||||
if (y + scale*cbox.t > this.t) this.t = y + scale*cbox.t;
|
if (y + scale*cbox.t > this.t) this.t = y + scale*cbox.t;
|
||||||
if (scale*cbox.b - y > this.b) this.b = scale*cbox.b - y;
|
if (scale*cbox.b - y > this.b) this.b = scale*cbox.b - y;
|
||||||
|
},
|
||||||
|
adjust: function (m,x,X,M) {
|
||||||
|
this[x] += CHTML.length2em(m);
|
||||||
|
if (M == null) {
|
||||||
|
if (this[x] > this[X]) this[X] = this[x];
|
||||||
|
} else {
|
||||||
|
if (this[X] < M) this[X] = M;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
zero: function () {return CHTML.BBOX({h:0, d:0, w:0, l:0, r:0, t:0, b:0})},
|
zero: function () {return CHTML.BBOX({h:0, d:0, w:0, l:0, r:0, t:0, b:0})},
|
||||||
empty: function () {
|
empty: function () {
|
||||||
return CHTML.BBOX({h:-BIGDIMEN, d:-BIGDIMEN, w:0, l:BIGDIMEN, r:-BIGDIMEN,
|
return CHTML.BBOX({h:-BIGDIMEN, d:-BIGDIMEN, w:0, l:BIGDIMEN, r:-BIGDIMEN,
|
||||||
t:-BIGDIMEN, b:-BIGDIMEN});
|
t:-BIGDIMEN, b:-BIGDIMEN});
|
||||||
}
|
},
|
||||||
|
//
|
||||||
|
// CSS styles that affect BBOXes
|
||||||
|
//
|
||||||
|
styleAdjust: [
|
||||||
|
["borderTopWidth","h","t"],
|
||||||
|
["borderRightWidth","w","r"],
|
||||||
|
["borderBottomWidth","d","b"],
|
||||||
|
["borderLeftWidth","w","l",0],
|
||||||
|
["paddingTop","h","t"],
|
||||||
|
["paddingRight","w","r"],
|
||||||
|
["paddingBottom","d","b"],
|
||||||
|
["paddingLeft","w","l",0],
|
||||||
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
/**********************************************************/
|
/**********************************************************/
|
||||||
|
@ -1006,12 +1027,14 @@
|
||||||
CHTMLdefaultNode: function (node,options) {
|
CHTMLdefaultNode: function (node,options) {
|
||||||
if (!options) options = {};
|
if (!options) options = {};
|
||||||
node = this.CHTMLcreateNode(node);
|
node = this.CHTMLcreateNode(node);
|
||||||
if (!options.noBBox) this.CHTMLhandleSpace(node);
|
|
||||||
this.CHTMLhandleStyle(node);
|
|
||||||
this.CHTMLhandleColor(node);
|
|
||||||
var m = Math.max((options.minChildren||0),this.data.length);
|
var m = Math.max((options.minChildren||0),this.data.length);
|
||||||
for (var i = 0; i < m; i++) this.CHTMLaddChild(node,i,options);
|
for (var i = 0; i < m; i++) this.CHTMLaddChild(node,i,options);
|
||||||
if (!options.noBBox) this.CHTML.clean();
|
if (!options.noBBox) {
|
||||||
|
this.CHTML.clean();
|
||||||
|
this.CHTMLhandleSpace(node);
|
||||||
|
}
|
||||||
|
this.CHTMLhandleStyle(node);
|
||||||
|
this.CHTMLhandleColor(node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
CHTMLaddChild: function (node,i,options) {
|
CHTMLaddChild: function (node,i,options) {
|
||||||
|
@ -1109,9 +1132,13 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
CHTMLhandleStyle: function (node) {
|
CHTMLhandleStyle: function (node) {
|
||||||
if (this.style) node.style.cssText = this.style;
|
var BBOX = this.CHTML, style = node.style, w;
|
||||||
|
if (this.style) style.cssText = this.style;
|
||||||
|
for (var i = 0, m = CHTML.BBOX.styleAdjust.length; i < m; i++) {
|
||||||
|
var data = CHTML.BBOX.styleAdjust[i];
|
||||||
|
if (style[data[0]]) BBOX.adjust(style[data[0]],data[1],data[2],data[3]);
|
||||||
|
}
|
||||||
// ### FIXME: remove font size and other font settings from non-token elements?
|
// ### FIXME: remove font size and other font settings from non-token elements?
|
||||||
// ### FIXME: modify bounding box to handle border, padding, and margin.
|
|
||||||
},
|
},
|
||||||
|
|
||||||
CHTMLhandleColor: function (node) {
|
CHTMLhandleColor: function (node) {
|
||||||
|
@ -1220,7 +1247,7 @@
|
||||||
if (bbox.skew != null && text.length !== 1) delete bbox.skew;
|
if (bbox.skew != null && text.length !== 1) delete bbox.skew;
|
||||||
if (bbox.r > bbox.w && text.length === 1 /*&& !variant.noIC*/) { // ### FIXME: handle variants
|
if (bbox.r > bbox.w && text.length === 1 /*&& !variant.noIC*/) { // ### FIXME: handle variants
|
||||||
bbox.ic = bbox.r - bbox.w; bbox.w = bbox.r;
|
bbox.ic = bbox.r - bbox.w; bbox.w = bbox.r;
|
||||||
node.style.paddingRight = CHTML.Em(bbox.ic);
|
node.lastChild.style.paddingRight = CHTML.Em(bbox.ic);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
@ -1383,8 +1410,6 @@
|
||||||
MML.mspace.Augment({
|
MML.mspace.Augment({
|
||||||
toCommonHTML: function (node) {
|
toCommonHTML: function (node) {
|
||||||
node = this.CHTMLcreateNode(node);
|
node = this.CHTMLcreateNode(node);
|
||||||
this.CHTMLhandleStyle(node);
|
|
||||||
this.CHTMLhandleColor(node);
|
|
||||||
var values = this.getValues("height","depth","width");
|
var values = this.getValues("height","depth","width");
|
||||||
var w = CHTML.length2em(values.width),
|
var w = CHTML.length2em(values.width),
|
||||||
h = CHTML.length2em(values.height),
|
h = CHTML.length2em(values.height),
|
||||||
|
@ -1395,6 +1420,8 @@
|
||||||
node.style.width = CHTML.Em(w);
|
node.style.width = CHTML.Em(w);
|
||||||
node.style.height = CHTML.Em(h+d);
|
node.style.height = CHTML.Em(h+d);
|
||||||
if (d) node.style.verticalAlign = CHTML.Em(-d);
|
if (d) node.style.verticalAlign = CHTML.Em(-d);
|
||||||
|
this.CHTMLhandleStyle(node);
|
||||||
|
this.CHTMLhandleColor(node);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1914,9 +1941,6 @@
|
||||||
MML.mfenced.Augment({
|
MML.mfenced.Augment({
|
||||||
toCommonHTML: function (node) {
|
toCommonHTML: function (node) {
|
||||||
node = this.CHTMLcreateNode(node);
|
node = this.CHTMLcreateNode(node);
|
||||||
this.CHTMLhandleSpace(node);
|
|
||||||
this.CHTMLhandleStyle(node);
|
|
||||||
this.CHTMLhandleColor(node);
|
|
||||||
//
|
//
|
||||||
// Make row of open, data, sep, ... data, close
|
// Make row of open, data, sep, ... data, close
|
||||||
//
|
//
|
||||||
|
@ -1936,6 +1960,9 @@
|
||||||
this.CHTMLstretchChildV(i,H,D);
|
this.CHTMLstretchChildV(i,H,D);
|
||||||
}
|
}
|
||||||
this.CHTMLstretchChildV("close",H,D);
|
this.CHTMLstretchChildV("close",H,D);
|
||||||
|
this.CHTMLhandleSpace(node);
|
||||||
|
this.CHTMLhandleStyle(node);
|
||||||
|
this.CHTMLhandleColor(node);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2035,10 +2062,10 @@
|
||||||
CHTMLdefaultNode: function (node,options) {
|
CHTMLdefaultNode: function (node,options) {
|
||||||
if (!options) options = {};
|
if (!options) options = {};
|
||||||
node = this.CHTMLcreateNode(node);
|
node = this.CHTMLcreateNode(node);
|
||||||
this.CHTMLhandleStyle(node);
|
|
||||||
this.CHTMLhandleColor(node);
|
|
||||||
// skip label for now
|
// skip label for now
|
||||||
for (var i = 1, m = this.data.length; i < m; i++) this.CHTMLaddChild(node,i,options);
|
for (var i = 1, m = this.data.length; i < m; i++) this.CHTMLaddChild(node,i,options);
|
||||||
|
this.CHTMLhandleStyle(node);
|
||||||
|
this.CHTMLhandleColor(node);
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user