|
@@ -17,8 +17,8 @@ class FlowProperties {
|
|
|
public var paddingBottom = 0;
|
|
|
|
|
|
public var isAbsolute = false;
|
|
|
- public var halign : Null<FlowAlign>;
|
|
|
- public var valign : Null<FlowAlign>;
|
|
|
+ public var horizontalAlign : Null<FlowAlign>;
|
|
|
+ public var verticalAlign : Null<FlowAlign>;
|
|
|
|
|
|
public var offsetX = 0;
|
|
|
public var offsetY = 0;
|
|
@@ -49,21 +49,28 @@ class Flow extends Sprite {
|
|
|
Each change in one of the flow properties or addition/removal of elements will set needReflow to true.
|
|
|
**/
|
|
|
public var needReflow : Bool = true;
|
|
|
- public var halign(default,set) : Null<FlowAlign>;
|
|
|
- public var valign(default,set) : Null<FlowAlign>;
|
|
|
+
|
|
|
+ /**
|
|
|
+ Horizontal alignment of elements inside the flow.
|
|
|
+ **/
|
|
|
+ public var horizontalAlign(default, set) : Null<FlowAlign>;
|
|
|
+
|
|
|
+ /**
|
|
|
+ Vertical alignment of elements inside the flow.
|
|
|
+ **/
|
|
|
+ public var verticalAlign(default,set) : Null<FlowAlign>;
|
|
|
|
|
|
public var minWidth(default, set) : Null<Int>;
|
|
|
public var minHeight(default, set) : Null<Int>;
|
|
|
public var maxWidth(default, set) : Null<Int>;
|
|
|
public var maxHeight(default, set) : Null<Int>;
|
|
|
+ public var lineHeight(default, set) : Null<Int>;
|
|
|
+ public var colWidth(default, set) : Null<Int>;
|
|
|
|
|
|
/**
|
|
|
- Disabling overflow will make a flow report a size of maxWidth/maxHeight even if the elements go past this size.
|
|
|
+ Enabling overflow will treat maxWidth/maxHeight and lineHeight/colWidth constraints as absolute : bigger elements will overflow instead of expanding the limit.
|
|
|
**/
|
|
|
- public var overflow(default, set) : Bool = true;
|
|
|
-
|
|
|
- public var lineHeight(default, set) : Null<Int>;
|
|
|
- public var colWidth(default, set) : Null<Int>;
|
|
|
+ public var overflow(default, set) : Bool = false;
|
|
|
|
|
|
/**
|
|
|
Will set all padding values at the same time.
|
|
@@ -127,7 +134,12 @@ class Flow extends Sprite {
|
|
|
/**
|
|
|
When set to true, the debug will display red box around the flow, green box for the client space and blue boxes for each element.
|
|
|
**/
|
|
|
- public var debug(default,set) : Bool;
|
|
|
+ public var debug(default, set) : Bool;
|
|
|
+
|
|
|
+ /**
|
|
|
+ When set to true, uses specified lineHeight/colWidth instead of maxWidth/maxHeight for alignment.
|
|
|
+ **/
|
|
|
+ public var multiline(default,set) : Bool = false;
|
|
|
|
|
|
var background : h2d.ScaleGrid;
|
|
|
var debugGraphics : h2d.Graphics;
|
|
@@ -155,11 +167,11 @@ class Flow extends Sprite {
|
|
|
return isVertical = v;
|
|
|
}
|
|
|
|
|
|
- function set_halign(v) {
|
|
|
- if( halign == v )
|
|
|
+ function set_horizontalAlign(v) {
|
|
|
+ if( horizontalAlign == v )
|
|
|
return v;
|
|
|
needReflow = true;
|
|
|
- return halign = v;
|
|
|
+ return horizontalAlign = v;
|
|
|
}
|
|
|
|
|
|
function set_debug(v) {
|
|
@@ -176,11 +188,11 @@ class Flow extends Sprite {
|
|
|
return debug = v;
|
|
|
}
|
|
|
|
|
|
- function set_valign(v) {
|
|
|
- if( valign == v )
|
|
|
+ function set_verticalAlign(v) {
|
|
|
+ if( verticalAlign == v )
|
|
|
return v;
|
|
|
needReflow = true;
|
|
|
- return valign = v;
|
|
|
+ return verticalAlign = v;
|
|
|
}
|
|
|
|
|
|
function set_overflow(v) {
|
|
@@ -190,6 +202,13 @@ class Flow extends Sprite {
|
|
|
return overflow = v;
|
|
|
}
|
|
|
|
|
|
+ function set_multiline(v) {
|
|
|
+ if( multiline == v )
|
|
|
+ return v;
|
|
|
+ needReflow = true;
|
|
|
+ return multiline = v;
|
|
|
+ }
|
|
|
+
|
|
|
function set_lineHeight(v) {
|
|
|
if( lineHeight == v )
|
|
|
return v;
|
|
@@ -396,28 +415,30 @@ class Flow extends Sprite {
|
|
|
|
|
|
var cw, ch;
|
|
|
if( !isVertical ) {
|
|
|
-
|
|
|
- var halign = halign == null ? Left : halign;
|
|
|
- var valign = valign == null ? Bottom : valign;
|
|
|
+ var halign = horizontalAlign == null ? Left : horizontalAlign;
|
|
|
+ var valign = verticalAlign == null ? Bottom : verticalAlign;
|
|
|
|
|
|
var startX = paddingLeft + borderWidth;
|
|
|
var x : Float = startX;
|
|
|
var y : Float = paddingTop + borderHeight;
|
|
|
cw = x;
|
|
|
var maxLineHeight = 0.;
|
|
|
- var minLineHeight = this.lineHeight != null ? lineHeight : (this.minHeight != null && this.maxWidth == null) ? (this.minHeight - (paddingTop + paddingBottom + borderWidth * 2)) : 0;
|
|
|
+ var minLineHeight = this.lineHeight != null ? lineHeight : (this.minHeight != null && !multiline) ? (this.minHeight - (paddingTop + paddingBottom + borderHeight * 2)) : 0;
|
|
|
var tmpBounds = tmpBounds;
|
|
|
var maxWidth = maxWidth == null ? 100000000 : maxWidth - (paddingLeft + paddingRight + borderWidth * 2);
|
|
|
var lastIndex = 0;
|
|
|
|
|
|
inline function alignLine( maxIndex ) {
|
|
|
- if( maxLineHeight < minLineHeight ) maxLineHeight = minLineHeight;
|
|
|
+ if( maxLineHeight < minLineHeight )
|
|
|
+ maxLineHeight = minLineHeight;
|
|
|
+ else if( overflow && minLineHeight != 0 )
|
|
|
+ maxLineHeight = minLineHeight;
|
|
|
for( i in lastIndex...maxIndex ) {
|
|
|
var p = properties[i];
|
|
|
if( p.isAbsolute ) continue;
|
|
|
var c = childs[i];
|
|
|
if( !c.visible ) continue;
|
|
|
- var a = p.valign != null ? p.valign : valign;
|
|
|
+ var a = p.verticalAlign != null ? p.verticalAlign : valign;
|
|
|
c.y = y + p.offsetY + p.paddingTop;
|
|
|
switch( a ) {
|
|
|
case Bottom:
|
|
@@ -472,7 +493,7 @@ class Flow extends Sprite {
|
|
|
midSpace = 0;
|
|
|
}
|
|
|
var px;
|
|
|
- var align = p.halign == null ? halign : p.halign;
|
|
|
+ var align = p.horizontalAlign == null ? halign : p.horizontalAlign;
|
|
|
switch( align ) {
|
|
|
case Right:
|
|
|
if( midSpace != 0 ) {
|
|
@@ -509,27 +530,30 @@ class Flow extends Sprite {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var halign = halign == null ? Left : halign;
|
|
|
- var valign = valign == null ? Top : valign;
|
|
|
+ var halign = horizontalAlign == null ? Left : horizontalAlign;
|
|
|
+ var valign = verticalAlign == null ? Top : verticalAlign;
|
|
|
|
|
|
var startY = paddingTop + borderHeight;
|
|
|
var y : Float = startY;
|
|
|
var x : Float = paddingLeft + borderWidth;
|
|
|
ch = y;
|
|
|
var maxColWidth = 0.;
|
|
|
- var minColWidth = this.colWidth != null ? colWidth : (this.minWidth != null && this.maxHeight == null) ? (this.minWidth - (paddingLeft + paddingRight + borderWidth * 2)) : 0;
|
|
|
+ var minColWidth = this.colWidth != null ? colWidth : (this.minWidth != null && !multiline) ? (this.minWidth - (paddingLeft + paddingRight + borderWidth * 2)) : 0;
|
|
|
var tmpBounds = tmpBounds;
|
|
|
var maxHeight = maxHeight == null ? 100000000 : maxHeight - (paddingTop + paddingBottom + borderHeight * 2);
|
|
|
var lastIndex = 0;
|
|
|
|
|
|
inline function alignLine( maxIndex ) {
|
|
|
- if( maxColWidth < minColWidth ) maxColWidth = minColWidth;
|
|
|
+ if( maxColWidth < minColWidth )
|
|
|
+ maxColWidth = minColWidth;
|
|
|
+ else if( overflow && minColWidth != 0 )
|
|
|
+ maxColWidth = minColWidth;
|
|
|
for( i in lastIndex...maxIndex ) {
|
|
|
var p = properties[i];
|
|
|
if( p.isAbsolute ) continue;
|
|
|
var c = childs[i];
|
|
|
if( !c.visible ) continue;
|
|
|
- var a = p.halign != null ? p.halign : halign;
|
|
|
+ var a = p.horizontalAlign != null ? p.horizontalAlign : halign;
|
|
|
c.x = x + p.offsetX + p.paddingLeft;
|
|
|
switch( a ) {
|
|
|
case Right:
|
|
@@ -590,7 +614,7 @@ class Flow extends Sprite {
|
|
|
midSpace = 0;
|
|
|
}
|
|
|
var py;
|
|
|
- var align = p.valign == null ? valign : p.valign;
|
|
|
+ var align = p.verticalAlign == null ? valign : p.verticalAlign;
|
|
|
switch( align ) {
|
|
|
case Bottom:
|
|
|
if( midSpace != 0 ) {
|
|
@@ -628,7 +652,7 @@ class Flow extends Sprite {
|
|
|
|
|
|
if( minWidth != null && cw < minWidth ) cw = minWidth;
|
|
|
if( minHeight != null && ch < minHeight ) ch = minHeight;
|
|
|
- if( !overflow ) {
|
|
|
+ if( overflow ) {
|
|
|
if( maxWidth != null && cw > maxWidth ) cw = maxWidth;
|
|
|
if( maxHeight != null && ch > maxHeight ) ch = maxHeight;
|
|
|
}
|