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.5 by root, Tue Jun 5 13:42:59 2012 UTC vs.
Revision 1.6 by root, Tue Jun 5 13:56:42 2012 UTC

1#! perl 1#! perl
2 2
3our $EXPR = 'move load "/root/pix/das_fette_schwein.jpg", repeat_wrap, X, Y'; 3our $EXPR = 'move load "/root/pix/das_fette_schwein.jpg", repeat_wrap, X, Y';
4$EXPR = 'rotate load "/root/pix/das_fette_schwein.jpg", W, H, 50, 50, counter 1/60, repeat_mirror'; 4$EXPR = 'rotate (move (load "/root/pix/das_fette_schwein.jpg", X, Y), W, H, 50, 50, counter 1/60, repeat_mirror)';
5#$EXPR = 'blur root, 10, 10' 5#$EXPR = 'blur root, 10, 10'
6#$EXPR = 'blur move (root, -x, -y), 5, 5' 6#$EXPR = 'blur move (root, -x, -y), 5, 5'
7#resize load "/root/pix/das_fette_schwein.jpg", w, h 7#resize load "/root/pix/das_fette_schwein.jpg", w, h
8 8
9use Safe; 9use Safe;
125 125
126# evaluate the current bg expression 126# evaluate the current bg expression
127sub recalculate { 127sub recalculate {
128 my ($self) = @_; 128 my ($self) = @_;
129 129
130 #TODO: rate limit calls
131
130 local $bgdsl_self = $self; 132 local $bgdsl_self = $self;
131 133
132 local $old = $self->{state}; 134 local $old = $self->{state};
133 local $new = my $state = $self->{state} = {}; 135 local $new = my $state = $self->{state} = {};
134 136
136 $self->get_geometry; 138 $self->get_geometry;
137 139
138 my $img = eval { $self->{expr}->() }; 140 my $img = eval { $self->{expr}->() };
139 warn $@ if $@;#d# 141 warn $@ if $@;#d#
140 142
141 %$old = ();
142
143 my $repeat; 143 my $repeat;
144 144
145 if (my $again = $state->{again}) { 145 if (my $again = $state->{again}) {
146 $repeat = 1; 146 $repeat = 1;
147 $state->{again} = urxvt::timer->new->after ($again)->cb (sub { $self->recalculate }); 147 $state->{timer} = $again == $old->{again}
148 ? $old->{timer}
149 : urxvt::timer->new->after ($again)->interval ($again)->cb (sub { $self->recalculate });
148 } 150 }
149 151
150 if (delete $state->{position_sensitive}) { 152 if (delete $state->{position_sensitive}) {
151 $repeat = 1; 153 $repeat = 1;
152 $self->enable (position_change => sub { $_[0]->recalculate }); 154 $self->enable (position_change => sub { $_[0]->recalculate });
158 $repeat = 1; 160 $repeat = 1;
159 $self->enable (size_change => sub { $_[0]->recalculate }); 161 $self->enable (size_change => sub { $_[0]->recalculate });
160 } else { 162 } else {
161 $self->disable ("size_change"); 163 $self->disable ("size_change");
162 } 164 }
165
166 %$old = ();
163 167
164 unless ($repeat) { 168 unless ($repeat) {
165 delete $self->{state}; 169 delete $self->{state};
166 delete $self->{expr}; 170 delete $self->{expr};
167 } 171 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines