--- rxvt-unicode/src/perl/background 2012/06/14 16:48:57 1.55 +++ rxvt-unicode/src/perl/background 2012/06/15 13:21:59 1.60 @@ -287,7 +287,7 @@ sub solid($;$$) { my $colour = pop; - my $img = $self->new_img (urxvt::PictStandardARGB32, $_[0] || 1, $_[1] || 1); + my $img = $self->new_img (urxvt::PictStandardARGB32, 0, 0, $_[0] || 1, $_[1] || 1); $img->fill ($colour); $img } @@ -303,6 +303,43 @@ $_[0]->clone } +=item merge $img ... + +Takes any number of images and merges them together, creating a single +image containing them all. + +=cut + + sub merge(@) { + # rather annoyingly clumsy, but optimisation is for another time + + my $x0 = +1e9; + my $y0 = +1e9; + my $x1 = -1e9; + my $y1 = -1e9; + + for (@_) { + my ($x, $y, $w, $h) = $_->geometry; + + $x0 = $x if $x0 > $x; + $y0 = $y if $y0 > $y; + + $x += $w; + $y += $h; + + $x1 = $x if $x1 < $x; + $y1 = $y if $y1 < $y; + } + + my $base = $self->new_img (urxvt::PictStandardARGB32, $x0, $y0, $x1 - $x0, $y1 - $y0); + $base->fill ([0, 0, 0, 0]); + + $base->draw ($_) + for @_; + + $base + } + =head2 TILING MODES The following operators modify the tiling mode of an image, that is, the @@ -662,8 +699,8 @@ sub rotate($$$$) { my $img = pop; $img->rotate ( - $_[0] * $img->w, - $_[1] * $img->h, + $_[0] * ($img->w + $img->x), + $_[1] * ($img->h + $img->y), $_[2] * (3.14159265 / 180), ) } @@ -763,7 +800,7 @@ =head2 OTHER STUFF -Anything that didn't fit any of the other categories, even after appliyng +Anything that didn't fit any of the other categories, even after applying force and closing our eyes. =over 4