summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Tk/pack.pod
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Tk/pack.pod')
-rw-r--r--Master/tlpkg/tlperl/lib/Tk/pack.pod324
1 files changed, 324 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Tk/pack.pod b/Master/tlpkg/tlperl/lib/Tk/pack.pod
new file mode 100644
index 00000000000..0449556265c
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Tk/pack.pod
@@ -0,0 +1,324 @@
+# Copyright (c) 1990-1994 The Regents of the University of California.
+# Copyright (c) 1994-1996 Sun Microsystems, Inc.
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#
+
+=head1 NAME
+
+Tk::pack - Geometry manager that packs around edges of cavity
+
+=for category Tk Geometry Management
+
+=head1 SYNOPSIS
+
+S< >I<$widget>-E<gt>B<pack>?(I<args>)?
+
+S< >I<$widget>-E<gt>B<pack>I<Option>?(I<args>)?
+
+=head1 DESCRIPTION
+
+The B<pack> method is used to communicate with the packer,
+a geometry manager that arranges the children of a parent by
+packing them in order around the edges of the parent.
+
+In this B<perl> port of Tk it is normal to pack widgets one-at-a-time
+using the widget object to be packed to invoke a method call.
+This is a slight distortion of underlying Tk interface (which
+can handle lists of windows to one pack method call) but has proven
+effective in practice.
+
+The B<pack> method can have any of several forms, depending
+on I<Option>:
+
+=over 4
+
+=item I<$slave>-E<gt>B<pack>?(I<options>)?
+
+The options consist of pairs of arguments that specify how
+to manage the slave.
+See L<"THE PACKER ALGORITHM"> below for details on how the options
+are used by the packer.
+The following options are supported:
+
+=over 8
+
+=item B<-after> =E<gt> I<$other>
+
+I<$other> must be another window.
+Use its master as the master for the slave, and insert
+the slave just after I<$other> in the packing order.
+
+=item B<-anchor> =E<gt> I<anchor>
+
+I<Anchor> must be a valid anchor position such as B<n>
+or B<sw>; it specifies where to position each slave in its
+parcel.
+Defaults to B<center>.
+
+=item B<-before> =E<gt> I<$other>
+
+I<$other> must be another window.
+Use its master as the master for the slave, and insert
+the slave just before I<$other> in the packing order.
+
+=item B<-expand> =E<gt> I<boolean>
+
+Specifies whether the slave should be expanded to consume
+extra space in their master.
+I<Boolean> may have any proper boolean value, such as B<1>
+or B<no>.
+Defaults to 0.
+
+=item B<-fill> =E<gt> I<style>
+
+If a slave's parcel is larger than its requested dimensions, this
+option may be used to stretch the slave.
+I<Style> must have one of the following values:
+
+=over 12
+
+=item B<none>
+
+Give the slave its requested dimensions plus any internal padding
+requested with B<-ipadx> or B<-ipady>. This is the default.
+
+=item B<x>
+
+Stretch the slave horizontally to fill the entire width of its
+parcel (except leave external padding as specified by B<-padx>).
+
+=item B<y>
+
+Stretch the slave vertically to fill the entire height of its
+parcel (except leave external padding as specified by B<-pady>).
+
+=item B<both>
+
+Stretch the slave both horizontally and vertically.
+
+=back
+
+=item B<-in> =E<gt> I<$master>
+
+Insert the slave(s) at the end of the packing order for the master
+window given by I<$master>.
+
+=item B<-ipadx> =E<gt> I<amount>
+
+I<Amount> specifies how much horizontal internal padding to
+leave on each side of the slave(s).
+I<Amount> must be a valid screen distance, such as B<2> or B<.5c>.
+It defaults to 0.
+
+=item B<-ipady> =E<gt> I<amount>
+
+I<Amount> specifies how much vertical internal padding to
+leave on each side of the slave(s).
+I<Amount> defaults to 0.
+
+=item B<-padx> =E<gt> I<amount>
+
+I<Amount> specifies how much horizontal external padding to
+leave on each side of the slave(s).
+I<Amount> defaults to 0.
+
+=item B<-pady> =E<gt> I<amount>
+
+I<Amount> specifies how much vertical external padding to
+leave on each side of the slave(s).
+I<Amount> defaults to 0.
+
+=item B<-side> =E<gt> I<side>
+
+Specifies which side of the master the slave(s) will be packed against.
+Must be B<left>, B<right>, B<top>, or B<bottom>.
+Defaults to B<top>.
+
+=back
+
+=back
+
+If no B<-in>, B<-after> or B<-before> option is specified
+then slave will be inserted at the end of the packing list
+for its parent unless it is already managed by the packer (in which
+case it will be left where it is).
+If one of these options is specified then slave will be
+inserted at the specified point.
+If the slave are already managed by the geometry manager
+then any unspecified options for them retain their previous values rather
+than receiving default values.
+
+=over 4
+
+=item I<$slave>-E<gt>B<packConfigure>?(I<options>)?
+
+Same as B<pack>.
+
+=item I<$slave>-E<gt>B<packForget>
+
+Removes I<slave> from the packing order for its
+master and unmaps its window.
+The slave will no longer be managed by the packer.
+
+=item I<$slave>-E<gt>B<packInfo>
+
+Returns a list whose elements are the current configuration state of
+the slave given by I<$slave> in the same option-value form that
+might be specified to B<packConfigure>.
+The first two elements of the list are ``B<-in>=E<gt>I<$master>'' where
+I<$master> is the slave's master.
+
+=item I<$master>-E<gt>B<packPropagate>?(I<boolean>)?
+
+If I<boolean> has a true boolean value such as B<1> or B<on>
+then propagation is enabled for I<$master>,
+(see L<"GEOMETRY PROPAGATION"> below).
+If I<boolean> has a false boolean value then propagation is
+disabled for I<$master>.
+In either of these cases an empty string is returned.
+If I<boolean> is omitted then the method returns B<0> or
+B<1> to indicate whether propagation is currently enabled
+for I<$master>.
+Propagation is enabled by default.
+
+=item I<$master>-E<gt>B<packSlaves>
+
+Returns a list of all of the slaves in the packing order for I<$master>.
+The order of the slaves in the list is the same as their order in
+the packing order.
+If I<$master> has no slaves then an empty list/string is returned in
+array/scalar context, respectively
+
+=back
+
+=head1 THE PACKER ALGORITHM
+
+For each master the packer maintains an ordered list of slaves
+called the I<packing list>.
+The B<-in>, B<-after>, and B<-before> configuration
+options are used to specify the master for each slave and the slave's
+position in the packing list.
+If none of these options is given for a slave then the slave
+is added to the end of the packing list for its parent.
+
+The packer arranges the slaves for a master by scanning the
+packing list in order.
+At the time it processes each slave, a rectangular area within
+the master is still unallocated.
+This area is called the I<cavity>; for the first slave it
+is the entire area of the master.
+
+For each slave the packer carries out the following steps:
+
+=over 4
+
+=item [1]
+
+The packer allocates a rectangular I<parcel> for the slave
+along the side of the cavity given by the slave's B<-side> option.
+If the side is top or bottom then the width of the parcel is
+the width of the cavity and its height is the requested height
+of the slave plus the B<-ipady> and B<-pady> options.
+For the left or right side the height of the parcel is
+the height of the cavity and the width is the requested width
+of the slave plus the B<-ipadx> and B<-padx> options.
+The parcel may be enlarged further because of the B<-expand>
+option (see L<"EXPANSION"> below)
+
+=item [2]
+
+The packer chooses the dimensions of the slave.
+The width will normally be the slave's requested width plus
+twice its B<-ipadx> option and the height will normally be
+the slave's requested height plus twice its B<-ipady>
+option.
+However, if the B<-fill> option is B<x> or B<both>
+then the width of the slave is expanded to fill the width of the parcel,
+minus twice the B<-padx> option.
+If the B<-fill> option is B<y> or B<both>
+then the height of the slave is expanded to fill the width of the parcel,
+minus twice the B<-pady> option.
+
+=item [3]
+
+The packer positions the slave over its parcel.
+If the slave is smaller than the parcel then the B<-anchor>
+option determines where in the parcel the slave will be placed.
+If B<-padx> or B<-pady> is non-zero, then the given
+amount of external padding will always be left between the
+slave and the edges of the parcel.
+
+Once a given slave has been packed, the area of its parcel
+is subtracted from the cavity, leaving a smaller rectangular
+cavity for the next slave.
+If a slave doesn't use all of its parcel, the unused space
+in the parcel will not be used by subsequent slaves.
+If the cavity should become too small to meet the needs of
+a slave then the slave will be given whatever space is
+left in the cavity.
+If the cavity shrinks to zero size, then all remaining slaves
+on the packing list will be unmapped from the screen until
+the master window becomes large enough to hold them again.
+
+=back
+
+=head1 EXPANSION
+
+If a master window is so large that there will be extra space
+left over after all of its slaves have been packed, then the
+extra space is distributed uniformly among all of the slaves
+for which the B<-expand> option is set.
+Extra horizontal space is distributed among the expandable
+slaves whose B<-side> is B<left> or B<right>,
+and extra vertical space is distributed among the expandable
+slaves whose B<-side> is B<top> or B<bottom>.
+
+=head1 GEOMETRY PROPAGATION
+
+The packer normally computes how large a master must be to
+just exactly meet the needs of its slaves, and it sets the
+requested width and height of the master to these dimensions.
+This causes geometry information to propagate up through a
+window hierarchy to a top-level window so that the entire
+sub-tree sizes itself to fit the needs of the leaf windows.
+However, the B<packPropagate> method may be used to
+turn off propagation for one or more masters.
+If propagation is disabled then the packer will not set
+the requested width and height of the packer.
+This may be useful if, for example, you wish for a master
+window to have a fixed size that you specify.
+
+=head1 RESTRICTIONS ON MASTER WINDOWS
+
+The master for each slave must either be the slave's parent
+(the default) or a descendant of the slave's parent.
+This restriction is necessary to guarantee that the
+slave can be placed over any part of its master that is
+visible without danger of the slave being clipped by its parent.
+
+=head1 PACKING ORDER
+
+If the master for a slave is not its parent then you must make sure
+that the slave is higher in the stacking order than the master.
+Otherwise the master will obscure the slave and it will appear as
+if the slave hasn't been packed correctly.
+The easiest way to make sure the slave is higher than the master is
+to create the master window first: the most recently created window
+will be highest in the stacking order.
+Or, you can use the B<raise> and B<lower> methods to change
+the stacking order of either the master or the slave.
+
+=head1 SEE ALSO
+
+L<Tk::form|Tk::form>
+L<Tk::grid|Tk::grid>
+L<Tk::place|Tk::place>
+
+=head1 KEYWORDS
+
+geometry manager, location, packer, parcel, propagation, size
+
+=cut
+