… | |
… | |
648 | $drawable->draw_text ($font, $gc, $x - $w*0.5, $y + $h * 0.5, $t, length $t); |
648 | $drawable->draw_text ($font, $gc, $x - $w*0.5, $y + $h * 0.5, $t, length $t); |
649 | } |
649 | } |
650 | |
650 | |
651 | # create a stack of stones |
651 | # create a stack of stones |
652 | sub create_stack { |
652 | sub create_stack { |
653 | my ($self, $gc, $mark, $size) = @_; |
653 | my ($self, $gc, $mark, $size, $rand) = @_; |
654 | |
654 | |
655 | my $c = \$self->{stack}{$mark}; |
655 | my $c = \$self->{stack}{$mark}; |
656 | unless ($$c) { |
656 | unless ($$c) { |
657 | for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { |
657 | for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { |
658 | my $base = |
658 | my $base = |
… | |
… | |
670 | ); |
670 | ); |
671 | $base->put_pixels ($base->get_pixels ($_) & $row[$_ & 1], $_, 0) |
671 | $base->put_pixels ($base->get_pixels ($_) & $row[$_ & 1], $_, 0) |
672 | for 0 .. $size - 1; |
672 | for 0 .. $size - 1; |
673 | } |
673 | } |
674 | |
674 | |
675 | for ([MARK_SMALL_B, $::black_img[int rand @::black_img]], |
675 | for ([MARK_SMALL_B, $::black_img[$rand % @::black_img]], |
676 | [MARK_SMALL_W, $::white_img[int rand @::white_img]]) { |
676 | [MARK_SMALL_W, $::white_img[$rand % @::white_img]]) { |
677 | my ($mask, $img) = @$_; |
677 | my ($mask, $img) = @$_; |
678 | if ($mark & $mask) { |
678 | if ($mark & $mask) { |
679 | $img->composite ( |
679 | $img->composite ( |
680 | $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4) x 2, |
680 | $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4) x 2, |
681 | $size / $img->get_width / 2, $size / $img->get_height / 2, |
681 | $size / $img->get_width / 2, $size / $img->get_height / 2, |
… | |
… | |
701 | |
701 | |
702 | push @$$c, [$base->render_pixmap_and_mask (128)]; |
702 | push @$$c, [$base->render_pixmap_and_mask (128)]; |
703 | } |
703 | } |
704 | } |
704 | } |
705 | |
705 | |
706 | @{$$c->[int rand @$$c]}; |
706 | @{$$c->[$rand % @$$c]}; |
707 | } |
707 | } |
708 | |
708 | |
709 | sub repaint_board { |
709 | sub repaint_board { |
710 | my ($self) = @_; |
710 | my ($self) = @_; |
711 | my $canvas = $self->{canvas}; |
711 | my $canvas = $self->{canvas}; |
… | |
… | |
735 | |
735 | |
736 | $gc->rgb_gc_set_foreground($line_colour); |
736 | $gc->rgb_gc_set_foreground($line_colour); |
737 | $gc->set_line_attributes (int ($s / 300) + 1, 'solid', 'projecting', 'miter'); |
737 | $gc->set_line_attributes (int ($s / 300) + 1, 'solid', 'projecting', 'miter'); |
738 | |
738 | |
739 | my $size = $self->{size}; |
739 | my $size = $self->{size}; |
740 | my $border = int ($s / $size * 0.75); |
740 | my $border = int ($s / $size); |
741 | my $s2 = $s - $border * 2; |
741 | my $s2 = $s - $border * 2; |
742 | my $edge = int ($s2 / $size); |
742 | my $edge = int ($s2 / $size) | 1; |
743 | my $ofs = int ($s2 / $size * 0.5); |
743 | my $ofs = int ($edge / 2); |
744 | |
744 | |
745 | my $font = label_font $ofs; |
745 | my $font = label_font $ofs; |
746 | |
746 | |
747 | my @k = map int ($s2 * $_ / $size - $ofs + $border + 0.5), 0 .. $size; |
747 | my @k = map int ($s2 * $_ / $size - $ofs + $border + 0.5), 0 .. $size; |
748 | |
748 | |
… | |
… | |
769 | my $yk = $s2 * $x / $size - $ofs + $border; |
769 | my $yk = $s2 * $x / $size - $ofs + $border; |
770 | my $mark = $self->{board}{board}[$x-1][$y-1]; |
770 | my $mark = $self->{board}{board}[$x-1][$y-1]; |
771 | |
771 | |
772 | if ($mark) { |
772 | if ($mark) { |
773 | my ($dx, $dy) = ($k[$x] - $ofs, $k[$y] - $ofs); |
773 | my ($dx, $dy) = ($k[$x] - $ofs, $k[$y] - $ofs); |
774 | my ($pm, $bm) = $self->create_stack($gc, $mark, $edge); |
774 | my ($pm, $bm) = $self->create_stack($gc, $mark, $edge, $x * 17 + $y * 11 ); |
775 | |
775 | |
776 | $gc->set_clip_mask ($bm); |
776 | $gc->set_clip_mask ($bm); |
777 | $gc->set_clip_origin ($dx, $dy); |
777 | $gc->set_clip_origin ($dx, $dy); |
778 | $pixmap->draw_pixmap ($gc, $pm, 0, 0, $dx, $dy, $edge, $edge); |
778 | $pixmap->draw_pixmap ($gc, $pm, 0, 0, $dx, $dy, $edge, $edge); |
779 | } |
779 | } |