1 | #! perl |
1 | #! perl |
2 | |
2 | |
3 | our $EXPR = 'move load "/root/pix/das_fette_schwein.jpg", repeat_wrap, X, Y'; |
3 | our $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 | |
9 | use Safe; |
9 | use Safe; |
… | |
… | |
125 | |
125 | |
126 | # evaluate the current bg expression |
126 | # evaluate the current bg expression |
127 | sub recalculate { |
127 | sub 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 | } |