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.

http://www.iinteractive.com

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.