ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/background
(Generate patch)

Comparing rxvt-unicode/src/perl/background (file contents):
Revision 1.51 by sf-exg, Sun Jun 10 19:01:03 2012 UTC vs.
Revision 1.54 by root, Thu Jun 14 16:22:20 2012 UTC

71 return scale load "$HOME/weekday.png"; 71 return scale load "$HOME/weekday.png";
72 } else { 72 } else {
73 return scale load "$HOME/sunday.png"; 73 return scale load "$HOME/sunday.png";
74 } 74 }
75 75
76This expression gets evaluated once per hour. It will set F<sunday.png> as 76This expression is evaluated once per hour. It will set F<sunday.png> as
77background on Sundays, and F<weekday.png> on all other days. 77background on Sundays, and F<weekday.png> on all other days.
78 78
79Fortunately, we expect that most expressions will be much simpler, with 79Fortunately, we expect that most expressions will be much simpler, with
80little Perl knowledge needed. 80little Perl knowledge needed.
81 81
202 202
203=back 203=back
204 204
205=cut 205=cut
206 206
207our %_IMGCACHE; 207our %_IMG_CACHE;
208our %_ONCE_CACHE;
208our $HOME; 209our $HOME;
209our ($self, $old, $new); 210our ($self, $old, $new);
210our ($x, $y, $w, $h); 211our ($x, $y, $w, $h);
211 212
212# enforce at least this interval between updates 213# enforce at least this interval between updates
228=item load $path 229=item load $path
229 230
230Loads the image at the given C<$path>. The image is set to plane tiling 231Loads the image at the given C<$path>. The image is set to plane tiling
231mode. 232mode.
232 233
233Loaded images will be cached for one cycle. 234Loaded images will be cached for one cycle, and shared between temrinals
235running in the same process (e.g. in C<urxvtd>).
234 236
237=item load_uc $path
238
239Load uncached - same as load, but does not cache the image. This function
240is most useufl if you want to optimise a background expression in some
241way.
242
235=cut 243=cut
244
245 sub load_uc($) {
246 my ($path) = @_;
247
248 $_IMG_CACHE{$path} || do {
249 my $img = $self->new_img_from_file ($path);
250 Scalar::Util::weaken ($_IMG_CACHE{$path} = $img);
251 $img
252 }
253 }
236 254
237 sub load($) { 255 sub load($) {
238 my ($path) = @_; 256 my ($path) = @_;
239 257
240 $new->{load}{$path} = $old->{load}{$path} || $self->new_img_from_file ($path); 258 $new->{load}{$path} = $old->{load}{$path} || load_uc $path;
241 } 259 }
242 260
243=item root 261=item root
244 262
245Returns the root window pixmap, that is, hopefully, the background image 263Returns the root window pixmap, that is, hopefully, the background image
250 268
251=cut 269=cut
252 270
253 sub root() { 271 sub root() {
254 $new->{rootpmap_sensitive} = 1; 272 $new->{rootpmap_sensitive} = 1;
255 die "root op not supported, exg, we need you"; 273 $self->new_img_from_root
256 } 274 }
257 275
258=item solid $colour 276=item solid $colour
259 277
260=item solid $width, $height, $colour 278=item solid $width, $height, $colour
283=cut 301=cut
284 302
285 sub clone($) { 303 sub clone($) {
286 $_[0]->clone 304 $_[0]->clone
287 } 305 }
288
289=back
290 306
291=head2 TILING MODES 307=head2 TILING MODES
292 308
293The following operators modify the tiling mode of an image, that is, the 309The following operators modify the tiling mode of an image, that is, the
294way that pixels outside the image area are painted when the image is used. 310way that pixels outside the image area are painted when the image is used.
433C<$seconds> seconds. 449C<$seconds> seconds.
434 450
435Example: load some image and rotate it according to the time of day (as if it were 451Example: load some image and rotate it according to the time of day (as if it were
436the hour pointer of a clock). Update this image every minute. 452the hour pointer of a clock). Update this image every minute.
437 453
438 again 60; rotate TW, TH, 50, 50, (now % 86400) * -720 / 86400, scale load "myclock.png" 454 again 60; rotate 50, 50, (now % 86400) * -720 / 86400, scale load "myclock.png"
439 455
440=item counter $seconds 456=item counter $seconds
441 457
442Like C<again>, but also returns an increasing counter value, starting at 458Like C<again>, but also returns an increasing counter value, starting at
4430, which might be useful for some simple animation effects. 4590, which might be useful for some simple animation effects.
630 646
631 sub rootalign($) { 647 sub rootalign($) {
632 move -TX, -TY, $_[0] 648 move -TX, -TY, $_[0]
633 } 649 }
634 650
651=item rotate $center_x, $center_y, $degrees
652
653Rotates the image by C<$degrees> degrees, counter-clockwise, around the
654pointer at C<$center_x> and C<$center_y> (specified as factor of image
655width/height).
656
657#TODO# new width, height, maybe more operators?
658
659Example: rotate the image by 90 degrees
660
661=cut
662
663 sub rotate($$$$) {
664 my $img = pop;
665 $img->rotate (
666 $_[0] * $img->w,
667 $_[1] * $img->h,
668 $_[2] * (3.14159265 / 180),
669 )
670 }
671
635=back 672=back
636 673
637=head2 COLOUR MODIFICATIONS 674=head2 COLOUR MODIFICATIONS
638 675
639The following operators change the pixels of the image. 676The following operators change the pixels of the image.
721 sub blur($$;$) { 758 sub blur($$;$) {
722 my $img = pop; 759 my $img = pop;
723 $img->blur ($_[0], @_ >= 2 ? $_[1] : $_[0]) 760 $img->blur ($_[0], @_ >= 2 ? $_[1] : $_[0])
724 } 761 }
725 762
726=item rotate $new_width, $new_height, $center_x, $center_y, $degrees 763=back
727 764
728Rotates the image by C<$degrees> degrees, counter-clockwise, around the 765=head2 OTHER STUFF
729pointer at C<$center_x> and C<$center_y> (specified as factor of image
730width/height), generating a new image with width C<$new_width> and height
731C<$new_height>.
732 766
733#TODO# new width, height, maybe more operators? 767Anything that didn't fit any of the other categories, even after appliyng
768force and closing our eyes.
734 769
735Example: rotate the image by 90 degrees 770=over 4
736 771
737=cut 772=item once { ... }
738 773
739 sub rotate($$$$$$) { 774This function takes a code block as argument, that is, one or more
740 my $img = pop; 775statements enclosed by braces.
741 $img->rotate ( 776
742 $_[0], 777The trick is that this code block is only evaluated once - future calls
743 $_[1], 778will simply return the original image (yes, it should only be used with
744 $_[2] * $img->w, 779images).
745 $_[3] * $img->h, 780
746 $_[4] * (3.14159265 / 180), 781This can be extremely useful to avoid redoign the same slow operations
747 ) 782again and again- for example, if your background expression takes the root
783background, blurs it and then root-aligns it it would have to blur the
784root background on every window move or resize.
785
786Putting the blur into a C<once> block will make sure the blur is only done
787once:
788
789 rootlign once { blur 10, root }
790
791This leaves the question of how to force reevaluation of the block, in
792case the root background changes: Right now, all once blocks forget that
793they ahve been executed before each time the root background changes (if
794the expression is sensitive to that) or when C<once_again> is called.
795
796=item once_again
797
798Resets all C<once> block as if they had never been called, i.e. on the
799next call they will be reevaluated again.
800
801=cut
802
803 sub once(&) {
804 $_ONCE_CACHE{$_[0]+0} ||= $_[0]()
805 }
806
807 sub once_again() {
808 %_ONCE_CACHE = ();
748 } 809 }
749 810
750=back 811=back
751 812
752=cut 813=cut

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines