-
Notifications
You must be signed in to change notification settings - Fork 341
Flow
Hristo Kanchev edited this page Oct 29, 2024
·
7 revisions
The h2d.Flow
class allows to properly arrange child objects (h2d.Object
).
As you can see every child is placed without overlapping each other. The default layout is Horizontal
(h2d.Flow.FlowLayout.Horizontal
), thus the elements are placed next to each other and that horizontally.
class FlowsDemo extends hxd.App {
static function main() {new FlowsDemo();}
override function init() {
// the mere container
var flow = new h2d.Flow( s2d );
flow.setPosition( 50, 50 );
// setting the flow design
// by default will be:
//flow.layout = h2d.Flow.FlowLayout.Horizontal;
// these objects below get added to the flow
var t = new h2d.Text( hxd.res.DefaultFont.get(), flow );
t.text = "Some text.";
var tile = h2d.Tile.fromColor( 0x0000FF, 96, 32 );
var b = new h2d.Bitmap( tile, flow );
var t = new h2d.Text( hxd.res.DefaultFont.get(), flow );
t.text = "A bigger text.";
t.scale(3);
var ia = new h2d.Interactive( 50, 50, flow );
ia.backgroundColor = 0xFF808080;
ia.onClick = (e)->{trace("Click!");};
// red line to draw the flow borders
var t = new h2d.Text( hxd.res.DefaultFont.get(), s2d );
t.text = "Red-lined rectangle represents the h2d.Flow object.";
var g = new h2d.Graphics( s2d );
g.lineStyle( 1, 0xFF0000 );
var bounds = flow.getBounds();
g.drawRect( bounds.x, bounds.y, bounds.width, bounds.height );
}
}
The second sample code will give the h2d.Interactive
the ability to change the properties of the Flow. Each time you press the button "click me!" the Flow content changes and a trace()
prints the currently active Flow setting to the console.
class FlowsDemo2 extends hxd.App {
static function main() {new FlowsDemo2();}
override function init() {
// our Flow object
var flow = new h2d.Flow( s2d );
flow.setPosition( 50, 50 );
// these objects below get added to the flow
var t = new h2d.Text( hxd.res.DefaultFont.get(), flow );
t.text = "Some text.";
var tile = h2d.Tile.fromColor( 0x0000FF, 96, 32 );
var b = new h2d.Bitmap( tile, flow );
var t = new h2d.Text( hxd.res.DefaultFont.get(), flow );
t.text = "A bigger text.";
t.scale(3);
// red line to draw the flow borders
var t = new h2d.Text( hxd.res.DefaultFont.get(), s2d );
t.text = "Red-lined rectangle represents the h2d.Flow object.";
var g = new h2d.Graphics( s2d );
var draw_flow_borders = ()->{
g.clear();
g.lineStyle( 1, 0xFF0000 );
var bounds = flow.getBounds();
g.drawRect( bounds.x, bounds.y, bounds.width, bounds.height );
};
// this interactive will also be part of the Flow
// but also serves as button to change the Flow's properties
var ia = new h2d.Interactive( 50, 50, flow );
ia.backgroundColor = 0xFF00cc66;
ia.onClick = (e)->{
// random flow layout
var a = h2d.Flow.FlowLayout.createAll();
flow.layout = a[ Math.round( hxd.Math.random( a.length-1 ) ) ];
// random flow align
var a = h2d.Flow.FlowAlign.createAll();
flow.horizontalAlign = a[ Math.round( hxd.Math.random( a.length-1 ) ) ];
flow.verticalAlign = a[ Math.round( hxd.Math.random( a.length-1 ) ) ];
// random spacing
var s = Math.floor( hxd.Math.random(48) );
flow.horizontalSpacing = s;
var s = Math.floor( hxd.Math.random(48) );
flow.verticalSpacing = s;
trace("Flow's propterties have been changed");
trace( "\nlayout = "+flow.layout, "\nhorizontalAlign = "+flow.horizontalAlign, "\nverticalAlign = "+ flow.verticalAlign, "\nhorizontalSpacing = "+flow.horizontalSpacing, "\nverticalSpacing = "+flow.verticalSpacing );
draw_flow_borders();
};
var t = new h2d.Text( hxd.res.DefaultFont.get(), ia );
t.text = "click me!";
draw_flow_borders();
}
}
There are other samples you can look at and learn from:
- Another interactive example to understand the use of Flows
- The most detailed sample at this moment can be found in our repository (which you'll also find on your local machine:
HaxeToolkit\haxe\lib\heaps\git\samples\Flows.hx
)