NAME¶
Layout::Manager - 2D Layout Management
SYNOPSIS¶
Layout::Manager provides a simple interface for creating layout managers, or
classes that size and position components within 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¶
Layout::Manager relies on Graphics::Primitive::Container as a source for it's
components.
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 });
$driver->prepare($cont);
my $lm = new Layout::Manager::SomeImplementation;
$lm->do_layout($cont);
$driver->pack($cont);
$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.
PREPARATION¶
Subsequent calls to do_layout will be ignored if the Container is prepared. The
Container's "prepared" flag and the flags of all it's children are
checked, so any modifications to
any child component will cause the
entire container (and any container children) to be laid out again.
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 manager's components in the specified container.
AUTHOR¶
Cory Watson, "<gphat@cpan.org>"
SEE ALSO¶
perl(1), Graphics::Primitive
COPYRIGHT & LICENSE¶
Copyright 2008 - 2010 Cory G Watson
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.