… | |
… | |
285 | =cut |
285 | =cut |
286 | |
286 | |
287 | sub solid($;$$) { |
287 | sub solid($;$$) { |
288 | my $colour = pop; |
288 | my $colour = pop; |
289 | |
289 | |
290 | my $img = $self->new_img (urxvt::PictStandardARGB32, $_[0] || 1, $_[1] || 1); |
290 | my $img = $self->new_img (urxvt::PictStandardARGB32, 0, 0, $_[0] || 1, $_[1] || 1); |
291 | $img->fill ($colour); |
291 | $img->fill ($colour); |
292 | $img |
292 | $img |
293 | } |
293 | } |
294 | |
294 | |
295 | =item clone $img |
295 | =item clone $img |
… | |
… | |
299 | |
299 | |
300 | =cut |
300 | =cut |
301 | |
301 | |
302 | sub clone($) { |
302 | sub clone($) { |
303 | $_[0]->clone |
303 | $_[0]->clone |
|
|
304 | } |
|
|
305 | |
|
|
306 | =item merge $img ... |
|
|
307 | |
|
|
308 | Takes any number of images and merges them together, creating a single |
|
|
309 | image containing them all. |
|
|
310 | |
|
|
311 | =cut |
|
|
312 | |
|
|
313 | sub merge(@) { |
|
|
314 | # rather annoyingly clumsy, but optimisation is for another time |
|
|
315 | |
|
|
316 | my $x0 = +1e9; |
|
|
317 | my $y0 = +1e9; |
|
|
318 | my $x1 = -1e9; |
|
|
319 | my $y1 = -1e9; |
|
|
320 | |
|
|
321 | for (@_) { |
|
|
322 | my ($x, $y, $w, $h) = $_->geometry; |
|
|
323 | |
|
|
324 | $x0 = $x if $x0 > $x; |
|
|
325 | $y0 = $y if $y0 > $y; |
|
|
326 | |
|
|
327 | $x += $w; |
|
|
328 | $y += $h; |
|
|
329 | |
|
|
330 | $x1 = $x if $x1 < $x; |
|
|
331 | $y1 = $y if $y1 < $y; |
|
|
332 | } |
|
|
333 | |
|
|
334 | my $base = $self->new_img (urxvt::PictStandardARGB32, $x0, $y0, $x1 - $x0, $y1 - $y0); |
|
|
335 | $base->fill ([0, 0, 0, 0]); |
|
|
336 | |
|
|
337 | $base->draw ($_) |
|
|
338 | for @_; |
|
|
339 | |
|
|
340 | $base |
304 | } |
341 | } |
305 | |
342 | |
306 | =head2 TILING MODES |
343 | =head2 TILING MODES |
307 | |
344 | |
308 | The following operators modify the tiling mode of an image, that is, the |
345 | The following operators modify the tiling mode of an image, that is, the |
… | |
… | |
660 | =cut |
697 | =cut |
661 | |
698 | |
662 | sub rotate($$$$) { |
699 | sub rotate($$$$) { |
663 | my $img = pop; |
700 | my $img = pop; |
664 | $img->rotate ( |
701 | $img->rotate ( |
665 | $_[0] * $img->w, |
702 | $_[0] * ($img->w + $img->x), |
666 | $_[1] * $img->h, |
703 | $_[1] * ($img->h + $img->y), |
667 | $_[2] * (3.14159265 / 180), |
704 | $_[2] * (3.14159265 / 180), |
668 | ) |
705 | ) |
669 | } |
706 | } |
670 | |
707 | |
671 | =back |
708 | =back |
… | |
… | |
761 | |
798 | |
762 | =back |
799 | =back |
763 | |
800 | |
764 | =head2 OTHER STUFF |
801 | =head2 OTHER STUFF |
765 | |
802 | |
766 | Anything that didn't fit any of the other categories, even after appliyng |
803 | Anything that didn't fit any of the other categories, even after applying |
767 | force and closing our eyes. |
804 | force and closing our eyes. |
768 | |
805 | |
769 | =over 4 |
806 | =over 4 |
770 | |
807 | |
771 | =item once { ... } |
808 | =item once { ... } |