NAME
Layout::Manager - 2D Layout Management
SYNOPSIS
Layout::Manager provides a simple interface for creating layout managers, or classes that size and position components withing a container.
A few managers are provided for reference, but this module is primarily meant to serve as a base for outside implementations.
use Layout::Manager;
my $foo = Layout::Manager->new();
$foo->do_layout($component);
USING A LAYOUT MANAGER
Various implementations of Layout::Manager will require you do add components with slightly different second arguments, but the general case will be:
$lm->add_component($comp, $constraints);
The contents of $constraints must be discerned by reading the documentation for the layout manager you are using.
The $comp argument must be a Graphics::Primitive::Component.
Layout manager works hand-in-hand with Graphics::Primitive, so you'll want to check out the lifecyle documented in Graphics::Primitive::Component. It will look something like this:
$cont->add_component($foo, { some => metadata });
# You'll need a driver from Graphics::Primitive if there are any driver
# dependent doodads, like textboxes.
$cont->prepare($driver);
my $lm = new Layout::Manager::SomeImplementation;
$lm->do_layout($cont);
$cont->pack;
$driver->draw($cont);
When you are ready to lay out your container, you'll need to call the do_layout method with a single argument: the component in which you are laying things out. When do_layout returns all of the components should be resized and repositioned according to the rules of the Layout::Manager implementation.
WRITING A LAYOUT MANAGER
Layout::Manager provides all the methods necessary for your implementation, save the do_layout method. This method will be called when it is time to layout the components.
The add_component method takes two arguments: the component and a second, abritrary piece of data. If your layout manager is simple, like Compass, you may only require a simple variable like "NORTH". If you create something more complex the second argument may be a hashref or an object.
The value of the components method is an arrayref of hashrefs. The hashrefs have two keys:
- component
-
The component to be laid out.
- args
-
The argument provided to add_component.
TIPS
Layout manager implementations should honor the visible attribute of a component, as those components need to be ignored.
METHODS
- do_layout
-
Lays out this managers components in the specified container.
- do_prepare
-
Calls prepare on all this layout manager's child components.
AUTHOR
Cory Watson, <gphat@cpan.org>
Infinity Interactive, http://www.iinteractive.com
SEE ALSO
perl(1), Graphics::Primitive
COPYRIGHT & LICENSE
Copyright 2008 by Infinity Interactive, Inc.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.