line, arc, rectangle, border格式化属性:handedness, border, fill。
nominal extent:
model object所占的空间用nominal extent来表示。
我的理解:名义边界。一个object总有一个名义上的边界。这个名义边界的逻辑上的宽度是1。也就是说,
名义边界并不定义边界宽度。相反,边界宽度是定义在名义边界基础上的。按照下面提到的handedness不
同定义,边界宽度可能定义在nominal extent的左侧,右侧,或者同时向左右两侧方向。按照我的理解,
nominal extent应该就是定义extent的逻辑值。
handedness:
handedness本意是指"用左手或者右手的写作习惯", 这里指定义stroke宽度的方式。
首先,理解什么是stroke(笔划)。许多XFA elements,比如lines, rectangles, borders,都是由一到
多个stroke组成的。stroke就是组成这写xfa element得一笔。
其次,理解stroke?stroke有一个初始点,(orginal point),有一个方向,以及长度,同时还有沿着这
个方向的宽度。
handedness定义的就是宽度得定义标准。是向左,向两边,还是向右扩展宽度。
left handed: 向vector左边扩展宽度。
even handed: 向vector两边扩展宽度。
right handed: 向vector右边扩展宽度。
xfa spec, page34对此有详细的描述。
<draw x="1in" y="1in" w="0.6in" h="0.8in">
<value>
<line hand="left" slope="/">
<edge thickness="0.2in"/>
</line>
</value>
</draw>
对于border, rectangle对象,是从左上角开始,沿着顺时针方向,画成的。因此,对于border,相应的也
有三种handedness可能。分别是宽度向左,向两边,向右扩展。
两个邻接element得边界重合问题:
若两个邻接element都是even-handed类型,那么邻接的线条将显得完全重合,变成和其他边完全一样的宽
度。若两个邻接element不是even-handed,那么邻接的线条不会重合,将成为其他边2倍的宽度。
border:
为了在content周围显示rectangle, box model提供了独立的控件border。
border有自己的margins,独立于content的margins。??
border组成:
edges: border的边,每个边即是一个edge。
corners: intersections of edges。
fill:
所有封闭的图形都可以被filled(填充)。所谓封闭图形,包括box model border,还有一些content
element,比如rectangle, arc。fill element用来定义该封闭图形被怎样填充。fill的类型包括:
● None 不填充
● Solid 完全填充
● Hatching and cross hatching 阴影填充
● Stippling of two colors 点画填充
● Gradient fills: 径向填充
❚ Linear
❚ Radial
Margins and Borders of Widgets
除了button之外的所有widget,都有除了container提供的margins, borders之外的自身的margin和border
。当一个text widget有margin却没有定义margin值时候,margin依据border的定义确定自己的值。Text
widgets包括data, time, date-time, choice list, numeric edit, password edit, text edit,
signature edit。对于这些控件,当没有border定义时候,默认的margin值就是0。 当有border定义时候
,默认的margin值就是两倍的border宽度,并且在top margin上还要加上default font的长度。对于其他
控件,无论是否有border定义,四面margin总是为0.