--- kgsueme/bin/kgsueme 2003/05/29 01:13:32 1.5 +++ kgsueme/bin/kgsueme 2003/05/29 03:11:56 1.6 @@ -1,9 +1,14 @@ -#!/opt/bin/perl +#!/usr/bin/perl -I../lib/ -use PApp::Util qw(dumpval); # debug only +#use PApp::Util qw(dumpval); # debug only use Gtk; use Gtk::Gdk; +use Gtk; +#use Gtk::Gdk::ImlibImage; +use Gnome; +init Gnome "kgsueme"; + use KGS::Protocol; use KGS::Listener::Debug; @@ -478,15 +483,76 @@ $self->{window}->add(my $hpane = new Gtk::HPaned); ::state $hpane, "game::hpane", undef, hpane_position => 500; - $hpane->add(my $board = new Gtk::Table $self->{size}, $self->{size}, 1); + $hpane->add(my $canvas = new Gnome::Canvas); + $self->{canvas} = $canvas; +# $canvas->set_pixels_per_unit(300); + $canvas->set_scroll_region(0,0,400,400); + $self->{board} = [[]]; +# $canvas->style->bg('normal', $canvas->style->white); + { + my $croot = $canvas->root; + my $cgroup = $croot->new($croot, "Gnome::CanvasGroup"); + my $w = 400; + my $pad = 26; + my $box = $cgroup->new($cgroup,"Gnome::CanvasRect", + x1 => 0, x2 => $w, + y1 => 0, y2 => $w, + outline_color => "green", + fill_color => "green", + width_pixels => 2, + ); + my $box2 = $cgroup->new($cgroup,"Gnome::CanvasRect", + x1 => $pad, x2 => $w - $pad, + y1 => $pad, y2 => $w - $pad, + outline_color => "brown", + fill_color => "brown", + width_pixels => 2, + ); + my @lines; + my $x1 = $pad * 2; # == my $y1 = 30; + my $x2 = $w - ($pad * 2); # == my $y2 = 270; + my $w = $x2 - $x1; + my $s = $self->{size} - 1; + + for (my $i = 0; $i <= $s; $i++) { # one more iteration for the finishing lines + push @lines, + $cgroup->new($cgroup,"Gnome::CanvasLine", + points => [ $x1, $x1 + ($w/$s)*$i, $x1 + $w, $x1 + ($w/$s)*$i ], + fill_color => "darkbrown", + width_pixels => 1); + push @lines, + $cgroup->new($cgroup,"Gnome::CanvasLine", + points => [ $x1 + ($w/$s)*$i, $x1, $x1 + ($w/$s)*$i, $x1 + $w ], + fill_color => "darkbrown", + width_pixels => 1); + } + $self->{board_gfx}->{lines} = \@lines; + my $stones = [[]]; + my $wf = ($w/$s); + for (my $x = 0; $x < $self->{size}; $x++) { + for (my $y = 0; $y < $self->{size}; $y++) { + $stones->[$x]->[$y]->[0] = # black stone + $cgroup->new($cgroup,"Gnome::CanvasEllipse", + x1 => $x1 + $wf*$x - ($wf/2.2), x2 => $x1 + $wf*$x + ($wf/2), + y1 => $x1 + $wf*$y - ($wf/2.2), y2 => $x1 + $wf*$y + ($wf/2), + fill_color => "black"); + $stones->[$x]->[$y]->[0]->hide; + $stones->[$x]->[$y]->[1] = # black stone + $cgroup->new($cgroup,"Gnome::CanvasEllipse", + x1 => $x1 + $wf*$x - ($wf/2.2), x2 => $x1 + $wf*$x + ($wf/2), + y1 => $x1 + $wf*$y - ($wf/2.2), y2 => $x1 + $wf*$y + ($wf/2), + fill_color => "white"); + $stones->[$x]->[$y]->[1]->hide; + } + } + $self->{board_gfx}->{stones} = $stones; + + # smooth => 1, + # spline_steps => 50 +# $line->hide; + } +$canvas->show(); - for my $x (0 .. $self->{size} - 1) { - for my $y (0 .. $self->{size} - 1) { - my $cell = new Gtk::Label; - $board->attach_defaults($cell, $x, $x + 1, $y, $y + 1); - $self->{board}[$x][$y] = $cell; - } - } $hpane->add(my $vpane = new Gtk::VPaned); ::state $vpane, "game", $self->{name}, vpane_position => 80; @@ -557,9 +623,21 @@ sub event_update_tree { my ($self) = @_; +# if (not defined $self->{board_pm}) { +# $self->{board_pm} = new Gtk::Gdk::Pixmap ($self->{board}->window, 100, 100, -1); +# $self->{board_pm}->draw_rectangle($self->{board}->style->white_gc, 1, 0, 0, 100, 100); +# } +# my $red = $self->{board}->window->get_colormap->color_alloc( { red => 65000, green => 0, blue => 0 } ); +# my $red_gc = new Gtk::Gdk::GC ( $self->{board}->window ); +# $red_gc->set_foreground( $red ); +# +# my $px = $self->{board_pm}; + for my $x (0 .. $self->{size} - 1) { for my $y (0 .. $self->{size} - 1) { - $self->{board}[$x][$y]->set_text(""); +# $self->{board}[$x][$y] = 0; + $self->{board_gfx}->{stones}->[$x]->[$y]->[0]->hide; + $self->{board_gfx}->{stones}->[$x]->[$y]->[1]->hide; } } @@ -567,7 +645,13 @@ while (my ($k, $v) = each %{$self->{tree}[$_]}) { if ($k eq "move7") { if ($v->[1] < 255) { - $self->{board}[$v->[1]][$v->[2]]->set_text(("X", "O", "-")[$v->[0]]); +# $self->{board_gfx}->{stones}[$x][$y]->[0]->show; + ($v->[0] == 0) && + $self->{board_gfx}->{stones}->[$v->[1]]->[$v->[2]]->[0]->show; + ($v->[0] == 1) && + $self->{board_gfx}->{stones}->[$v->[1]]->[$v->[2]]->[1]->show; + # $self->{board}[$v->[1]][$v->[2]] = ($v->[0] + 1); # ("X", "O", "-") + # 0 1 2 (+1) } } }