---
name: "Layout::Manager"
section: "3pm"
platform: "linux"
package: "liblayout-manager-perl"
version: "0.35-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Layout::Manager"
---

# Layout::Manager(3pm)

2D Layout Management

## 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)](/perl/1.md), 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.
