… | |
… | |
81 | $sw->add(($self->{text} = new gtk::text)->widget); |
81 | $sw->add(($self->{text} = new gtk::text)->widget); |
82 | |
82 | |
83 | $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0); |
83 | $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0); |
84 | $self->{entry}->signal_connect(activate => sub { |
84 | $self->{entry}->signal_connect(activate => sub { |
85 | my $text = $self->{entry}->get_text; |
85 | my $text = $self->{entry}->get_text; |
86 | # add message |
86 | $self->say($text) if $text =~ /\S/; |
87 | $self->{entry}->set_text(""); |
87 | $self->{entry}->set_text(""); |
88 | }); |
88 | }); |
89 | |
89 | |
90 | $self; |
90 | $self; |
91 | } |
91 | } |
… | |
… | |
167 | |
167 | |
168 | # create a stack of stones |
168 | # create a stack of stones |
169 | sub create_stack { |
169 | sub create_stack { |
170 | my ($self, $mark, $size, $rand) = @_; |
170 | my ($self, $mark, $size, $rand) = @_; |
171 | |
171 | |
172 | my $shadow = $size * 0.06; |
172 | my $shadow = $size * 0.05; |
173 | |
173 | |
174 | my $c = \$self->{stack}{$mark}; |
174 | my $c = \$self->{stack}{$mark}; |
175 | unless ($$c) { |
175 | unless ($$c) { |
176 | for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { |
176 | for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { |
177 | my $base = new_pixbuf $size + $shadow, $size + $shadow, 1, 0x00000000; |
177 | my $base = new_pixbuf $size + $shadow, $size + $shadow, 1, 0x00000000; |
178 | |
178 | |
179 | # zeroeth the shadow |
179 | # zeroeth the shadow |
180 | if ($mark & (MARK_B | MARK_W)) { |
180 | if ($mark & (MARK_B | MARK_W)) { |
181 | $::black_img[0]->composite ( |
181 | $::black_img[0]->composite ( |
182 | $base, $shadow, $shadow, $size, $size, $shadow-0.5, $shadow-0.5, |
182 | $base, $shadow, $shadow, $size, $size, $shadow, $shadow, |
183 | $size / $stone->get_width, $size / $stone->get_height, |
183 | $size / $stone->get_width, $size / $stone->get_height, |
184 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 128 |
184 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192 |
185 | ); |
185 | ); |
186 | } |
186 | } |
187 | |
187 | |
188 | # first the big stones (handicap stones different for effect) |
188 | # first the big stones (handicap stones different for effect) |
189 | for ([MARK_B, $mark & MARK_MOVE ? 255 : 192], |
189 | for ([MARK_B, $mark & MARK_MOVE ? 255 : 192], |
… | |
… | |
191 | [MARK_GRAY_B, 128], |
191 | [MARK_GRAY_B, 128], |
192 | [MARK_GRAY_W, 128]) { |
192 | [MARK_GRAY_W, 128]) { |
193 | my ($mask, $alpha) = @$_; |
193 | my ($mask, $alpha) = @$_; |
194 | if ($mark & $mask) { |
194 | if ($mark & $mask) { |
195 | $stone->composite ( |
195 | $stone->composite ( |
196 | $base, 0, 0, $size, $size, -0.5, -0.5, |
196 | $base, 0, 0, $size, $size, 0, 0, |
197 | $size / $stone->get_width, $size / $stone->get_height, |
197 | $size / $stone->get_width, $size / $stone->get_height, |
198 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, $alpha |
198 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, $alpha |
199 | ); |
199 | ); |
200 | } |
200 | } |
201 | } |
201 | } |
202 | |
202 | |
203 | # then the samll stones |
203 | # then the small stones |
204 | for ([MARK_SMALL_B, $::black_img[$rand % @::black_img]], |
204 | for ([MARK_SMALL_B, $::black_img[$rand % @::black_img]], |
205 | [MARK_SMALL_W, $::white_img[$rand % @::white_img]]) { |
205 | [MARK_SMALL_W, $::white_img[$rand % @::white_img]]) { |
206 | my ($mask, $img) = @$_; |
206 | my ($mask, $img) = @$_; |
207 | if ($mark & $mask) { |
207 | if ($mark & $mask) { |
208 | $img->composite ( |
208 | $img->composite ( |
209 | $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4 - 0.5) x 2, |
209 | $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4) x 2, |
210 | $size / $img->get_width / 2, $size / $img->get_height / 2, |
210 | $size / $img->get_width / 2, $size / $img->get_height / 2, |
211 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192 |
211 | $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192 |
212 | ); |
212 | ); |
213 | } |
213 | } |
214 | } |
214 | } |
… | |
… | |
287 | |
287 | |
288 | my $size = $self->{size}; |
288 | my $size = $self->{size}; |
289 | |
289 | |
290 | my $border = int ($s / ($size + 3) * 0.5); |
290 | my $border = int ($s / ($size + 3) * 0.5); |
291 | my $s2 = $s - $border * 2; |
291 | my $s2 = $s - $border * 2; |
292 | my $edge = int ($s2 / ($size + 1) * 0.97) - ($::config->{randomize} ? 3 : 0); |
292 | my $edge = int ($s2 / ($size + 1) * 0.96) - ($::config->{randomize} ? 3 : 0); |
293 | my $ofs = int ($edge / 2); |
293 | my $ofs = int ($edge / 2); |
294 | |
294 | |
295 | my @k = map int ($s2 * $_ / ($size+1) + $border + 0.5), 0 .. $size; |
295 | my @k = map int ($s2 * $_ / ($size+1) + $border + 0.5), 0 .. $size; |
296 | |
296 | |
297 | my $pixbuf; |
297 | my $pixbuf; |
… | |
… | |
362 | if ($::config->{randomize}) { |
362 | if ($::config->{randomize}) { |
363 | $dx += ($rand % 7) - 3; |
363 | $dx += ($rand % 7) - 3; |
364 | $dy += ($rand / 3 % 7) - 3; |
364 | $dy += ($rand / 3 % 7) - 3; |
365 | } |
365 | } |
366 | |
366 | |
367 | my $shadow = $edge * 0.06; |
367 | my $shadow = $edge * 0.05; |
368 | my $area = [$dx, $dy, $edge + $shadow, $edge + $shadow]; |
368 | my $area = [$dx, $dy, $edge + $shadow, $edge + $shadow]; |
369 | |
369 | |
370 | my $mark = $self->{board}{board}[$x-1][$y-1]; |
370 | my $mark = $self->{board}{board}[$x-1][$y-1]; |
371 | my $old = $oldboard ? $oldboard->{board}[$x-1][$y-1] : 0; |
371 | my $old = $oldboard ? $oldboard->{board}[$x-1][$y-1] : 0; |
372 | |
372 | |