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.4 by root, Tue Jun 5 13:39:26 2012 UTC vs.
Revision 1.8 by root, Tue Jun 5 14:07:47 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 = '
5 blur 10, 10,
6 rotate W, H, 50, 50, counter 1/60, repeat_mirror,
7 clip X, Y, W, H, repeat_mirror,
8 load "/root/pix/das_fette_schwein.jpg"
9';
5#$EXPR = 'blur root, 10, 10' 10#$EXPR = 'blur root, 10, 10'
6#$EXPR = 'blur move (root, -x, -y), 5, 5' 11#$EXPR = 'blur move (root, -x, -y), 5, 5'
7#resize load "/root/pix/das_fette_schwein.jpg", w, h 12#resize load "/root/pix/das_fette_schwein.jpg", w, h
8 13
9use Safe; 14use Safe;
31 36
32# sub clone($) { 37# sub clone($) {
33# $_[0]->clone 38# $_[0]->clone
34# } 39# }
35 40
36 sub subrect($$$$$;$) { 41 sub clip($$$$$;$) {
42 my $img = pop;
37 $_[0]->sub_rect ($_[1], $_[2], $_[3], $_[4], $_[5]) 43 $img->sub_rect ($_[0], $_[1], $_[2], $_[3], $_[4])
38 } 44 }
39 45
40 sub resize($$$) { 46 sub resize($$$) {
41 $_[0]->scale ($_[1], $_[2]) 47 my $img = pop;
48 $img->scale ($_[0], $_[1])
42 } 49 }
43 50
51 # TODO: ugly
44 sub move($$$;$) { 52 sub move($$;$) {
45 # TODO: must be simpler 53 my $img = pop;
46 $_[0]->transform ($_[0]->w, $_[0]->h, 54 $img->sub_rect (
47 1, 0, $_[1], 55 $_[0], $_[1],
48 0, 1, $_[2], 56 $img->w, $img->h,
49 0, 0, 1,
50 $_[3], 57 $_[2],
51 ) 58 )
52 } 59 }
53 60
54 sub rotate($$$$$$;$) { 61 sub rotate($$$$$$;$) {
62 my $img = pop;
55 $_[0]->rotate ( 63 $img->rotate (
64 $_[0],
56 $_[1], 65 $_[1],
57 $_[2],
58 $_[3] * $_[0]->w * .01, 66 $_[2] * $img->w * .01,
59 $_[4] * $_[0]->h * .01, 67 $_[3] * $img->h * .01,
60 $_[5] * (3.14159265 / 180), 68 $_[4] * (3.14159265 / 180),
61 $_[6], 69 $_[5],
62 ) 70 )
63 } 71 }
64 72
65 sub blur($$$) { 73 sub blur($$$) {
66 my ($img, $rh, $rv) = @_; 74 my ($rh, $rv, $img) = @_;
67 75
68 $img = $img->clone; 76 $img = $img->clone;
69 $img->blur ($rh, $rv); 77 $img->blur ($rh, $rv);
70 $img 78 $img
71 } 79 }
72 80
73 sub contrast($$;$$;$) { 81 sub contrast($$;$$;$) {
82 my $img = pop;
74 my ($img, $r, $g, $b, $a) = @_; 83 my ($r, $g, $b, $a) = @_;
75 84
76 ($g, $b) = ($r, $r) if @_ < 4; 85 ($g, $b) = ($r, $r) if @_ < 4;
77 $a = 1 if @_ < 5; 86 $a = 1 if @_ < 5;
78 87
79 $img = $img->clone; 88 $img = $img->clone;
80 $img->contrast ($r, $g, $b, $a); 89 $img->contrast ($r, $g, $b, $a);
81 $img 90 $img
82 } 91 }
83 92
84 sub brightness($$;$$;$) { 93 sub brightness($$;$$;$) {
94 my $img = pop;
85 my ($img, $r, $g, $b, $a) = @_; 95 my ($r, $g, $b, $a) = @_;
86 96
87 ($g, $b) = ($r, $r) if @_ < 4; 97 ($g, $b) = ($r, $r) if @_ < 4;
88 $a = 1 if @_ < 5; 98 $a = 1 if @_ < 5;
89 99
90 $img = $img->clone; 100 $img = $img->clone;
103 $new->{again} = $_[0]; 113 $new->{again} = $_[0];
104 } 114 }
105 115
106 sub counter($) { 116 sub counter($) {
107 $new->{again} = $_[0]; 117 $new->{again} = $_[0];
108 $bgdsl_self->{counter}++ + 0 118 $bgdsl_self->{counter} + 0
109 } 119 }
110} 120}
111 121
112sub parse_expr { 122sub parse_expr {
113 my $expr = eval "sub {\npackage urxvt::bgdsl;\n#line 0 'background expression'\n$_[0]\n}"; 123 my $expr = eval "sub {\npackage urxvt::bgdsl;\n#line 0 'background expression'\n$_[0]\n}";
125 135
126# evaluate the current bg expression 136# evaluate the current bg expression
127sub recalculate { 137sub recalculate {
128 my ($self) = @_; 138 my ($self) = @_;
129 139
140 #TODO: rate limit calls
141
130 local $bgdsl_self = $self; 142 local $bgdsl_self = $self;
131 143
132 local $old = $self->{state}; 144 local $old = $self->{state};
133 local $new = my $state = $self->{state} = {}; 145 local $new = my $state = $self->{state} = {};
134 146
140 152
141 my $repeat; 153 my $repeat;
142 154
143 if (my $again = $state->{again}) { 155 if (my $again = $state->{again}) {
144 $repeat = 1; 156 $repeat = 1;
145 $state->{again} = urxvt::timer->new->after ($again)->cb (sub { $self->recalculate }); 157 $state->{timer} = $again == $old->{again}
158 ? $old->{timer}
159 : urxvt::timer->new->after ($again)->interval ($again)->cb (sub {
160 ++$self->{counter};
161 $self->recalculate
162 });
146 } 163 }
147 164
148 if (delete $state->{position_sensitive}) { 165 if (delete $state->{position_sensitive}) {
149 $repeat = 1; 166 $repeat = 1;
150 $self->enable (position_change => sub { $_[0]->recalculate }); 167 $self->enable (position_change => sub { $_[0]->recalculate });
157 $self->enable (size_change => sub { $_[0]->recalculate }); 174 $self->enable (size_change => sub { $_[0]->recalculate });
158 } else { 175 } else {
159 $self->disable ("size_change"); 176 $self->disable ("size_change");
160 } 177 }
161 178
179 %$old = ();
180
181 unless ($repeat) {
182 delete $self->{state};
183 delete $self->{expr};
184 }
185
162 $img = $img->sub_rect (0, 0, $w, $h) 186 $img = $img->sub_rect (0, 0, $w, $h)
163 if $img->w != $w || $img->h != $h; 187 if $img->w != $w || $img->h != $h;
164 188
165 $self->set_background ($img); 189 $self->set_background ($img);
166 $self->scr_recolour (0); 190 $self->scr_recolour (0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines