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

Comparing kgsueme/bin/kgsueme (file contents):
Revision 1.7 by pcg, Thu May 29 07:30:17 2003 UTC vs.
Revision 1.10 by pcg, Thu May 29 10:35:58 2003 UTC

27# new_from_file Gtk::Gdk::Pixbuf "$IMGDIR/$_[0]" 27# new_from_file Gtk::Gdk::Pixbuf "$IMGDIR/$_[0]"
28 load_image Gtk::Gdk::ImlibImage "$IMGDIR/$_[0]" 28 load_image Gtk::Gdk::ImlibImage "$IMGDIR/$_[0]"
29 or die "$IMGDIR/$_[0]: $!"; 29 or die "$IMGDIR/$_[0]: $!";
30} 30}
31 31
32our @black_img = load_img "b01-100x102.png"; 32our @black_img = load_img "b-01.png";
33our @white_img = map +(load_img "w0$_-100x102_retouched.png"), 1,2,3; 33our @white_img = map +(load_img "w-0$_.png"), 1,2,3,4,5;
34our $board_img = load_img "woodgrain-01.jpg"; 34our $board_img = load_img "woodgrain-01.jpg";
35 35
36{ 36{
37 use Storable (); 37 use Storable ();
38 use Scalar::Util (); 38 use Scalar::Util ();
44 44
45 $config = $state->{config} ||= {}; 45 $config = $state->{config} ||= {};
46 46
47 # grr... more gtk+ brokenness 47 # grr... more gtk+ brokenness
48 my %get = ( 48 my %get = (
49 hpane_position => sub { ($_[0]->children)[0]->allocation->[2] },
50 vpane_position => sub { ($_[0]->children)[0]->allocation->[3] },
49 window_size => sub { [ @{$_[0]->allocation}[2,3] ] }, 51 window_size => sub { [ @{$_[0]->allocation}[2,3] ] },
50 #window_pos => sub { die PApp::Util::dumpval [ $_[0]->get_root_origin ] }, 52 #window_pos => sub { die PApp::Util::dumpval [ $_[0]->get_root_origin ] },
51 clist_column_widths => sub { 53 clist_column_widths => sub {
52 $_[0]{column_widths}; 54 $_[0]{column_widths};
53 }, 55 },
296 298
297 $self->msg(list_rooms => group => $_) for 0..5; # fetch all room names (should not!) 299 $self->msg(list_rooms => group => $_) for 0..5; # fetch all room names (should not!)
298 $self->{window}->show_all; 300 $self->{window}->show_all;
299} 301}
300 302
301sub event_update { 303sub event_update_rooms {
302 my ($self) = @_; 304 my ($self) = @_;
303 305
304 $self->{event_update} ||= Gtk->timeout_add(200, sub { 306 $self->{event_update} ||= Gtk->timeout_add(200, sub {
305 my $l = $self->{roomlist}; 307 my $l = $self->{roomlist};
306 308
383 ::state $self->{userlist}, "room::userlist", $self->{name}, clist_column_widths => [120, 30]; 385 ::state $self->{userlist}, "room::userlist", $self->{name}, clist_column_widths => [120, 30];
384 386
385 $self; 387 $self;
386} 388}
387 389
388sub event_update { 390sub event_update_users {
389 my ($self) = @_; 391 my ($self) = @_;
390 392
391 $self->{event_update} ||= Gtk->timeout_add(200, sub { 393 $self->{event_update} ||= Gtk->timeout_add(200, sub {
392 my $l = $self->{userlist}; 394 my $l = $self->{userlist};
393 395
473############################################################################# 475#############################################################################
474 476
475package game; 477package game;
476 478
477use KGS::Constants; 479use KGS::Constants;
480use KGS::Game::Board;
478 481
479use base KGS::Listener::Game; 482use base KGS::Listener::Game;
480use base KGS::Game; 483use base KGS::Game;
481 484
482sub new { 485sub new {
492 $self->{window}->signal_connect(delete_event => sub { $self->part; 1 }); 495 $self->{window}->signal_connect(delete_event => sub { $self->part; 1 });
493 496
494 $self->{window}->add(my $hpane = new Gtk::HPaned); 497 $self->{window}->add(my $hpane = new Gtk::HPaned);
495 ::state $hpane, "game::hpane", undef, hpane_position => 500; 498 ::state $hpane, "game::hpane", undef, hpane_position => 500;
496 499
497 $::config{aa}++; 500 $::config{aa} = 0;
498 $self->{canvas} = $::config{aa} ? new_aa Gnome::Canvas : new Gnome::Canvas; 501 $self->{canvas} = $::config{aa} ? new_aa Gnome::Canvas : new Gnome::Canvas;
499 $hpane->add($self->{canvas}); 502 $hpane->add($self->{canvas});
500 503
501 $self->{canvas}->signal_connect(size_allocate => sub { 504 {
502 warn "@_ @{$_[1]}";
503 #$self->{canvas}->set_pixels_per_unit(
504 });
505
506 my $line_colour = $::config{line_colour} || "darkbrown"; 505 my $line_colour = $::config{line_colour} || "darkbrown";
507 my $border = 0.1; 506 my $border = 0.1;
508 507 my $ofs = 0.5 / $self->{size};
509 $self->{canvas}->set_pixels_per_unit(300);
510 $self->{canvas}->set_scroll_region(-$border,-$border,1+$border,1+$border);
511 508
512 { 509 $self->{canvas}->set_pixels_per_unit(1000);
510 $self->{canvas}->set_scroll_region(-$border,-$border,1+$border,1+$border);
511
512 $self->{canvas}->signal_connect(size_allocate => sub {
513 my ($w, $h) = @{$_[1]}[2,3];
514
515 $self->{canvas}->set_pixels_per_unit(($w > $h ? $h : $w)/(1+$border*2));
516
517 1;
518 });
519
513 my $croot = $self->{canvas}->root; 520 my $croot = $self->{canvas}->root;
514 my $cgroup = $croot; #->new($croot, "Gnome::CanvasGroup"); 521 my $cgroup = $croot; #->new($croot, "Gnome::CanvasGroup");
515 522
516 if ($::board_img) { 523 if ($::board_img) {
517 $cgroup->new($cgroup, "Gnome::CanvasImage", 524 $cgroup->new($cgroup, "Gnome::CanvasImage",
519 width => 1+$border*2, height => 1+$border*2, 526 width => 1+$border*2, height => 1+$border*2,
520 image => $::board_img, 527 image => $::board_img,
521 anchor => "nw" 528 anchor => "nw"
522 ); 529 );
523 } else { 530 } else {
524 die;
525 $cgroup->new($cgroup, "Gnome::CanvasRect", 531 $cgroup->new($cgroup, "Gnome::CanvasRect",
526 x1 => -$border, x2 => 1+$border, 532 x1 => -$border, x2 => 1+$border,
527 y1 => -$border, y2 => 1+$border, 533 y1 => -$border, y2 => 1+$border,
528 outline_color => "black", 534 outline_color => "black",
529 fill_color => "brown", 535 fill_color => "brown",
530 width_pixels => 2, 536 width_pixels => 2,
531 ); 537 );
532 } 538 }
533 539
534 my $x1 = $pad * 2; # == my $y1 = 30;
535 my $x2 = $w - ($pad * 2); # == my $y2 = 270;
536 my $w = $x2 - $x1;
537 my $s = $self->{size} - 1;
538 my $ofs = 0.5 / $self->{size};
539
540 my $a = "A"; 540 my $a = "A";
541 for my $i (1 .. $self->{size}) { # one more iteration for the last lines 541 for my $i (1 .. $self->{size}) { # one more iteration for the last lines
542 my $k = $i / $self->{size} - $ofs; 542 my $k = $i / $self->{size} - $ofs;
543 543
544 $cgroup->new($cgroup, "Gnome::CanvasLine", 544 $cgroup->new($cgroup, "Gnome::CanvasLine",
556 556
557 my $text = $cgroup->new($cgroup, "Gnome::CanvasText", 557 my $text = $cgroup->new($cgroup, "Gnome::CanvasText",
558 x => 0, y => 0, text => $text, 558 x => 0, y => 0, text => $text,
559 justification => "center", 559 justification => "center",
560 anchor => "center", 560 anchor => "center",
561 font => "-*-helvetica-medium-r-*--34-*", 561 font => $::config{aa} ? "-*-helvetica-medium-r-*--34-*" : "-*-helvetica-bold-r-*--17-*",
562 fill_color => $line_colour); 562 fill_color => $line_colour);
563 563
564 $text->affine_relative($border*0.015,0, 0,$border*0.015, $x,$y); 564 $text->affine_relative($border*0.015,0, 0,$border*0.015, $x,$y);
565 } 565 }
566 566
588 x => $xk, y => $yk, 588 x => $xk, y => $yk,
589 width => $ofs*2, height => $ofs*2, 589 width => $ofs*2, height => $ofs*2,
590 image => $::white_img[int rand @::white_img], 590 image => $::white_img[int rand @::white_img],
591 anchor => "center"); 591 anchor => "center");
592 } else { 592 } else {
593 die "need pixmaps\n";
593 # too large, scale has NO effect 594 # too large, scale has NO effect
594 $col->[0] = 595 $col->[0] =
595 $cgroup->new($cgroup, "Gnome::CanvasEllipse", 596 $cgroup->new($cgroup, "Gnome::CanvasEllipse",
596 x1 => $xk, x2 => $xk + 0.001, 597 x1 => $xk, x2 => $xk + 0.001,
597 y1 => $yk, y2 => $yk + 0.001, 598 y1 => $yk, y2 => $yk + 0.001,
605 fill_color => "white"); 606 fill_color => "white");
606 } 607 }
607 } 608 }
608 } 609 }
609 610
610 $self->{board_gfx}->{stones} = $stones; 611 $self->{board_gfx}{stones} = $stones;
611 } 612 }
612 613
613 $hpane->add(my $vpane = new Gtk::VPaned); 614 $hpane->add(my $vpane = new Gtk::VPaned);
614 ::state $vpane, "game", $self->{name}, vpane_position => 80; 615 ::state $vpane, "game", $self->{name}, vpane_position => 80;
615 616
635 }); 636 });
636 637
637 $self; 638 $self;
638} 639}
639 640
640sub event_update { 641sub event_update_users {
641 my ($self) = @_; 642 my ($self) = @_;
642 643
643 $self->{event_update} ||= Gtk->timeout_add(200, sub { 644 room::event_update_users $self;
644 my $l = $self->{userlist};
645
646 $l->freeze;
647 my $pos = $l->get_vadjustment->get_value;
648 $l->clear;
649
650 my $row = 0;
651 for (values %{$self->{users}}) {
652 $l->append($_->{name});
653 $l->set_row_data($row++, $_);
654 }
655 $l->sort;
656 $l->get_vadjustment->set_value($pos);
657 $l->thaw;
658
659 delete $self->{event_update};
660 0;
661 });
662} 645}
663 646
664sub join { 647sub join {
665 my ($self) = @_; 648 my ($self) = @_;
666 $self->SUPER::join; 649 $self->SUPER::join;
670 653
671sub part { 654sub part {
672 my ($self) = @_; 655 my ($self) = @_;
673 $self->SUPER::part; 656 $self->SUPER::part;
674 657
675 $self->{window}->hide_all; 658 $self->{window}->hide;
676 $self->event_update;
677} 659}
678 660
679sub event_update_tree { 661sub event_update_tree {
680 my ($self) = @_; 662 my ($self) = @_;
681 663
682 my $board = new KGS::Game::Board $self->{size}; 664 my $board = new KGS::Game::Board $self->{size};
683 $board->interpret_path ($self->get_path); 665 $board->interpret_path ($self->get_path);
684
685# if (not defined $self->{board_pm}) {
686# $self->{board_pm} = new Gtk::Gdk::Pixmap ($self->{board}->window, 100, 100, -1);
687# $self->{board_pm}->draw_rectangle($self->{board}->style->white_gc, 1, 0, 0, 100, 100);
688# }
689# my $red = $self->{board}->window->get_colormap->color_alloc( { red => 65000, green => 0, blue => 0 } );
690# my $red_gc = new Gtk::Gdk::GC ( $self->{board}->window );
691# $red_gc->set_foreground( $red );
692#
693# my $px = $self->{board_pm};
694 666
695 for my $x (0 .. $self->{size} - 1) { 667 for my $x (0 .. $self->{size} - 1) {
696 for my $y (0 .. $self->{size} - 1) { 668 for my $y (0 .. $self->{size} - 1) {
697 my $v = $board->{board}[$x][$y]; 669 my $v = $board->{board}[$x][$y];
698 670
702 $v & MARK_W 674 $v & MARK_W
703 ? $self->{board_gfx}->{stones}->[$x][$y][1]->show 675 ? $self->{board_gfx}->{stones}->[$x][$y][1]->show
704 : $self->{board_gfx}->{stones}->[$x][$y][1]->hide; 676 : $self->{board_gfx}->{stones}->[$x][$y][1]->hide;
705 } 677 }
706 } 678 }
679
680 $self->{text}->backward_delete($self->{text}->get_length);
681 $self->{text}->insert(undef, undef, undef, $board->{comment}.PApp::Util::dumpval([$board->{time},$board->{captures}]));
707} 682}
708 683
7091; 6841;
710 685
711 686

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines