ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/game.pl
(Generate patch)

Comparing kgsueme/kgsueme/game.pl (file contents):
Revision 1.8 by pcg, Sat May 31 15:19:55 2003 UTC vs.
Revision 1.17 by pcg, Sun Jun 1 02:39:00 2003 UTC

5 5
6use base KGS::Listener::Game; 6use base KGS::Listener::Game;
7use base KGS::Game; 7use base KGS::Game;
8 8
9use base gtk::widget; 9use base gtk::widget;
10
11use POSIX qw(ceil);
10 12
11sub new { 13sub new {
12 my $self = shift; 14 my $self = shift;
13 $self = $self->SUPER::new(@_); 15 $self = $self->SUPER::new(@_);
14 16
38 { 40 {
39 # grrr... 41 # grrr...
40 $frame->add(my $vbox = new Gtk2::VBox); 42 $frame->add(my $vbox = new Gtk2::VBox);
41 $vbox->add($self->{title} = new Gtk2::Label $title); 43 $vbox->add($self->{title} = new Gtk2::Label $title);
42 44
43 $self->{moveadj} = new Gtk2::Adjustment 1, 0, 1, 0.01, 0.1, 0; 45 $self->{moveadj} = new Gtk2::Adjustment 1, 0, 1, 0.001, 0.05, 0;
44 46
45 $vbox->add(my $scale = new Gtk2::HScale $self->{moveadj}); 47 $vbox->add(my $scale = new Gtk2::HScale $self->{moveadj});
46 $scale->set_draw_value (0); 48 $scale->set_draw_value (0);
47 49
48 $self->{moveadj}->signal_connect (value_changed => sub { 50 $self->{moveadj}->signal_connect (value_changed => sub {
81 $sw->add(($self->{text} = new gtk::text)->widget); 83 $sw->add(($self->{text} = new gtk::text)->widget);
82 84
83 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0); 85 $vbox->pack_start(($self->{entry} = new Gtk2::Entry), 0, 1, 0);
84 $self->{entry}->signal_connect(activate => sub { 86 $self->{entry}->signal_connect(activate => sub {
85 my $text = $self->{entry}->get_text; 87 my $text = $self->{entry}->get_text;
86 # add message 88 $self->say($text) if $text =~ /\S/;
87 $self->{entry}->set_text(""); 89 $self->{entry}->set_text("");
88 }); 90 });
89 91
90 $self; 92 $self;
91} 93}
176 for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { 178 for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) {
177 my $base = new_pixbuf $size + $shadow, $size + $shadow, 1, 0x00000000; 179 my $base = new_pixbuf $size + $shadow, $size + $shadow, 1, 0x00000000;
178 180
179 # zeroeth the shadow 181 # zeroeth the shadow
180 if ($mark & (MARK_B | MARK_W)) { 182 if ($mark & (MARK_B | MARK_W)) {
181 $::black_img[0]->composite ( 183 $::shadow_img->composite (
182 $base, $shadow, $shadow, $size, $size, $shadow-0.5, $shadow-0.5, 184 $base, $shadow, $shadow, $size, $size, $shadow - 0.5, $shadow - 0.5,
183 $size / $stone->get_width, $size / $stone->get_height, 185 $size / $stone->get_width, $size / $stone->get_height,
184 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 128 186 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192
185 ); 187 );
186 } 188 }
187 189
188 # first the big stones (handicap stones different for effect) 190 # first the big stones (handicap stones different for effect)
189 for ([MARK_B, $mark & MARK_MOVE ? 255 : 192], 191 for ([MARK_B, $mark & MARK_MOVE ? 255 : 192],
191 [MARK_GRAY_B, 128], 193 [MARK_GRAY_B, 128],
192 [MARK_GRAY_W, 128]) { 194 [MARK_GRAY_W, 128]) {
193 my ($mask, $alpha) = @$_; 195 my ($mask, $alpha) = @$_;
194 if ($mark & $mask) { 196 if ($mark & $mask) {
195 $stone->composite ( 197 $stone->composite (
196 $base, 0, 0, $size, $size, -0.5, -0.5, 198 $base, 0, 0, $size, $size, 0, 0,
197 $size / $stone->get_width, $size / $stone->get_height, 199 $size / $stone->get_width, $size / $stone->get_height,
198 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, $alpha 200 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, $alpha
199 ); 201 );
200 } 202 }
201 } 203 }
202 204
203 # then the samll stones 205 # then the small stones
204 for ([MARK_SMALL_B, $::black_img[$rand % @::black_img]], 206 for ([MARK_SMALL_B, $::black_img[$rand % @::black_img]],
205 [MARK_SMALL_W, $::white_img[$rand % @::white_img]]) { 207 [MARK_SMALL_W, $::white_img[$rand % @::white_img]]) {
206 my ($mask, $img) = @$_; 208 my ($mask, $img) = @$_;
207 if ($mark & $mask) { 209 if ($mark & $mask) {
208 $img->composite ( 210 $img->composite (
209 $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4 - 0.5) x 2, 211 $base, (ceil ($size / 4)) x2, (ceil ($size / 2)) x2, (ceil ($size / 4)) x2,
210 $size / $img->get_width / 2, $size / $img->get_height / 2, 212 $size / $img->get_width / 2, $size / $img->get_height / 2,
211 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192 213 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 224
212 ); 214 );
213 } 215 }
214 } 216 }
215 217
216 # and lastly any markers 218 # and lastly any markers
251 $x -= ($W * $s + $spacing * (@c - 1)) * 0.5; 253 $x -= ($W * $s + $spacing * (@c - 1)) * 0.5;
252 $y -= $height * 0.5; 254 $y -= $height * 0.5;
253 255
254 for (@c) { 256 for (@c) {
255 my $w = $_->get_width * $s; 257 my $w = $_->get_width * $s;
258 # +2 == don't fight the rounding
256 $_->composite ($pixbuf, 259 $_->composite ($pixbuf,
257 $x, $y, $w+1, $height+1, $x, $y, $s, $s, 260 $x, $y, $w+2, $height+2, $x, $y, $s, $s,
258 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 255); 261 $::config->{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 255);
259 262
260 $x += $w + $spacing; 263 $x += $w + $spacing;
261 } 264 }
262 } 265 }
285 288
286 $self->{offsets} = [int (($w - $s) / 2), int (($h - $s) / 2), $s]; 289 $self->{offsets} = [int (($w - $s) / 2), int (($h - $s) / 2), $s];
287 290
288 my $size = $self->{size}; 291 my $size = $self->{size};
289 292
293 # we leave enough space for the shadows.. I like smaller stones, and we
294 # do no need to do the nifty recursive screen updates that goban2 does
290 my $border = int ($s / ($size + 3) * 0.5); 295 my $border = int ($s / ($size + 3) * 0.5);
291 my $s2 = $s - $border * 2; 296 my $s2 = $s - $border * 2;
292 my $edge = int ($s2 / ($size + 1) * 0.95) - ($::config->{randomize} ? 3 : 0); 297 my $edge = int ($s2 / ($size + 1) * 0.96) - ($::config->{randomize} ? 3 : 0);
293 my $ofs = int ($edge / 2); 298 my $ofs = int ($edge / 2);
294 299
295 my @k = map int ($s2 * $_ / ($size+1) + $border + 0.5), 0 .. $size; 300 my @k = map int ($s2 * $_ / ($size+1) + $border + 0.5), 0 .. $size;
296 301
297 my $pixbuf; 302 my $pixbuf;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines