.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" .\" 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" '' . ds C` . ds C' '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 >0, 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. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" 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 "Tickit::Rect 3pm" .TH Tickit::Rect 3pm "2018-11-01" "perl v5.28.0" "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" "Tickit::Rect" \- a lightweight data structure representing a rectangle .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Tickit::Rect; \& \& my $rect = Tickit::Rect\->new( \& top => 0, left => 5, lines => 3, cols => 10 \& ); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Objects in this class represent a rectangle, by storing the top left corner coordinate and the size in lines and columns. This data structure is purely abstract and not tied to a particular window or coordinate system. It exists simply as a convenient data store containing some useful utility methods. .SH "CONSTRUCTORS" .IX Header "CONSTRUCTORS" .SS "new" .IX Subsection "new" .Vb 1 \& $rect = Tickit::Rect\->new( %args ) .Ve .PP Construct a new rectangle of the given geometry, given by \f(CW\*(C`top\*(C'\fR, \f(CW\*(C`left\*(C'\fR and either \f(CW\*(C`lines\*(C'\fR and \f(CW\*(C`cols\*(C'\fR, or \f(CW\*(C`bottom\*(C'\fR and \f(CW\*(C`right\*(C'\fR. .PP .Vb 1 \& $rect = Tickit::Rect\->new( $str ) .Ve .PP If given a single string, this will be parsed in the form .PP .Vb 1 \& (left,top)..(right,bottom) .Ve .SS "intersect" .IX Subsection "intersect" .Vb 1 \& $rect = $existing_rect\->intersect( $other_rect ) .Ve .PP If there is an intersection between the given rectangles, return it. If not, return \f(CW\*(C`undef\*(C'\fR. .SS "translate" .IX Subsection "translate" .Vb 1 \& $rect = $existing_rect\->translate( $downward, $rightward ) .Ve .PP Returns a new rectangle of the same size as the given one, moved down and to the right by the given argmuents (which may be negative) .SH "ACCESSORS" .IX Header "ACCESSORS" .SS "top" .IX Subsection "top" .SS "left" .IX Subsection "left" .SS "bottom" .IX Subsection "bottom" .SS "right" .IX Subsection "right" .Vb 1 \& $top = $rect\->top \& \& $left = $rect\->left \& \& $bottom = $rect\->bottom \& \& $right = $rect\->right .Ve .PP Return the edge boundaries of the rectangle. .SS "lines" .IX Subsection "lines" .SS "cols" .IX Subsection "cols" .Vb 1 \& $lines = $rect\->lines \& \& $cols = $rect\->cols .Ve .PP Return the size of the rectangle. .SS "linerange" .IX Subsection "linerange" .Vb 1 \& @lines = $rect\->linerange( $min, $max ) .Ve .PP A convenient shortcut to generate the list of lines covered that are within the given bounds (either bound may be given as \f(CW\*(C`undef\*(C'\fR). Without bounds, equivalent to: .PP .Vb 1 \& $rect\->top .. $rect\->bottom \- 1 .Ve .SH "METHODS" .IX Header "METHODS" .SS "equals" .IX Subsection "equals" .Vb 1 \& $bool = $rect\->equals( $other ) \& \& $bool = ( $rect == $other ) .Ve .PP Returns true if \f(CW$other\fR represents the same area as \f(CW$rect\fR. This method overloads the numerical equality operator (\f(CW\*(C`==\*(C'\fR). .SS "contains" .IX Subsection "contains" .Vb 1 \& $bool = $rect\->contains( $other ) .Ve .PP Returns true if \f(CW$other\fR is entirely contained within the bounds of \f(CW$rect\fR. .SS "intersects" .IX Subsection "intersects" .Vb 1 \& $bool = $rect\->intersects( $other ) .Ve .PP Returns true if \f(CW$other\fR and \f(CW$rect\fR intersect at all, even if they overlap. .SS "add" .IX Subsection "add" .Vb 1 \& @r = $rect\->add( $other ) .Ve .PP Returns a list of the non-overlapping regions covered by either \f(CW$rect\fR or \&\f(CW$other\fR. .PP In the trivial case that the two given rectangles do not touch, the result will simply be a list of the two initial rectangles. Otherwise a list of newly-constructed rectangles will be returned that covers the same area as the original two. This list will contain anywhere between 1 and 3 rectangles. .SS "subtract" .IX Subsection "subtract" .Vb 1 \& @r = $rect\->subtract( $other ) .Ve .PP Returns a list of the non-overlapping regions covered by \f(CW$rect\fR but not by \&\f(CW$other\fR. .PP In the trivial case that \f(CW$other\fR completely covers \f(CW$rect\fR then the empty list is returned. In the trivial case that \f(CW$other\fR and \f(CW$rect\fR do not intersect then a list containing \f(CW$rect\fR is returned. Otherwise, a list of newly-constructed rectangles will be returned that covers the required area. This list will contain anywhere between 1 and 4 rectangles. .SH "AUTHOR" .IX Header "AUTHOR" Paul Evans