.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Layout::Manager 3pm" .TH Layout::Manager 3pm "2011-05-16" "perl v5.12.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Layout::Manager \- 2D Layout Management .SH "SYNOPSIS" .IX Header "SYNOPSIS" Layout::Manager provides a simple interface for creating layout managers, or classes that size and position components within a container. .PP A few managers are provided for reference, but this module is primarily meant to serve as a base for outside implementations. .PP .Vb 1 \& use Layout::Manager; \& \& my $foo = Layout::Manager\->new; \& $foo\->do_layout($component); .Ve .SH "USING A LAYOUT MANAGER" .IX Header "USING A LAYOUT MANAGER" Layout::Manager relies on Graphics::Primitive::Container as a source for it's components. .PP Various implementations of Layout::Manager will require you do add components with slightly different second arguments, but the general case will be: .PP .Vb 1 \& $lm\->add_component($comp, $constraints); .Ve .PP The contents of \fB\f(CB$constraints\fB\fR must be discerned by reading the documentation for the layout manager you are using. .PP The \fB\f(CB$comp\fB\fR argument must be a Graphics::Primitive::Component. .PP 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: .PP .Vb 6 \& $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); .Ve .PP 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 \fIdo_layout\fR returns all of the components should be resized and repositioned according to the rules of the Layout::Manager implementation. .SS "\s-1PREPARATION\s0" .IX Subsection "PREPARATION" Subsequent calls to do_layout will be ignored if the Container is prepared. The Container's \f(CW\*(C`prepared\*(C'\fR flag and the flags of all it's children are checked, so any modifications to \fBany\fR child component will cause the entire container (and any container children) to be laid out again. .SH "WRITING A LAYOUT MANAGER" .IX Header "WRITING A LAYOUT MANAGER" Layout::Manager provides all the methods necessary for your implementation, save the \fIdo_layout\fR method. This method will be called when it is time to layout the components. .PP The \fIadd_component\fR 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 \*(L"\s-1NORTH\s0\*(R". If you create something more complex the second argument may be a hashref or an object. .PP The value of the \fIcomponents\fR method is an arrayref of hashrefs. The hashrefs have two keys: .IP "\fBcomponent\fR" 4 .IX Item "component" The component to be laid out. .IP "\fBargs\fR" 4 .IX Item "args" The argument provided to \fIadd_component\fR. .SH "TIPS" .IX Header "TIPS" Layout manager implementations should honor the \fIvisible\fR attribute of a component, as those components need to be ignored. .SH "METHODS" .IX Header "METHODS" .SS "do_layout" .IX Subsection "do_layout" Lays out this manager's components in the specified container. .SH "AUTHOR" .IX Header "AUTHOR" Cory Watson, \f(CW\*(C`\*(C'\fR .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIperl\fR\|(1), Graphics::Primitive .SH "COPYRIGHT & LICENSE" .IX Header "COPYRIGHT & LICENSE" Copyright 2008 \- 2010 Cory G Watson .PP This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.