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

Comparing kgsueme/bin/kgsueme (file contents):
Revision 1.19 by pcg, Fri May 30 10:54:26 2003 UTC vs.
Revision 1.23 by pcg, Fri May 30 11:53:24 2003 UTC

80 80
81 my $state = -r $staterc ? Storable::retrieve($staterc) : {}; 81 my $state = -r $staterc ? Storable::retrieve($staterc) : {};
82 my @widgets; 82 my @widgets;
83 83
84 $config = $state->{config} ||= {}; 84 $config = $state->{config} ||= {};
85
86 $config{speed} = 1;#d# optimize for speed or memory?
87 $config{conserve_memory} = 0;
85 88
86 # grr... more gtk+ brokenness 89 # grr... more gtk+ brokenness
87 my %get = ( 90 my %get = (
88 hpane_position => sub { ($_[0]->children)[0]->allocation->[2] }, 91 hpane_position => sub { ($_[0]->children)[0]->allocation->[2] },
89 vpane_position => sub { ($_[0]->children)[0]->allocation->[3] }, 92 vpane_position => sub { ($_[0]->children)[0]->allocation->[3] },
643 646
644# create a stack of stones 647# create a stack of stones
645sub create_stack { 648sub create_stack {
646 my ($self, $mark, $size, $rand) = @_; 649 my ($self, $mark, $size, $rand) = @_;
647 650
651 my $shadow = $size * 0.06;
652
648 my $c = \$self->{stack}{$mark}; 653 my $c = \$self->{stack}{$mark};
649 unless ($$c) { 654 unless ($$c) {
650 for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) { 655 for my $stone ($mark & (MARK_W | MARK_GRAY_W) ? @::white_img : @::black_img) {
651 my $base = new_pixbuf $size, $size, 1, 1; 656 my $base = new_pixbuf $size + $shadow, $size + $shadow, 1, 1;
657
658 # zeroeth the shadow
659 $::black_img[0]->composite (
660 $base, $shadow, $shadow, $size, $size, $shadow-0.5, $shadow-0.5,
661 $size / $stone->get_width, $size / $stone->get_height,
662 $::config{speed} ? INTERP_NEAREST : INTERP_TILES, 128
663 );
652 664
653 # first the big stones 665 # first the big stones
654 for ([MARK_B, 255], 666 for ([MARK_B, 255],
655 [MARK_W, 255], 667 [MARK_W, 255],
656 [MARK_GRAY_B, 128], 668 [MARK_GRAY_B, 128],
658 my ($mask, $alpha) = @$_; 670 my ($mask, $alpha) = @$_;
659 if ($mark & $mask) { 671 if ($mark & $mask) {
660 $stone->composite ( 672 $stone->composite (
661 $base, 0, 0, $size, $size, -0.5, -0.5, 673 $base, 0, 0, $size, $size, -0.5, -0.5,
662 $size / $stone->get_width, $size / $stone->get_height, 674 $size / $stone->get_width, $size / $stone->get_height,
663 INTERP_HYPER, $alpha 675 $::config{speed} ? INTERP_NEAREST : INTERP_HYPER, $alpha
664 ); 676 );
665 } 677 }
666 } 678 }
667 679
668 # then the samll stones 680 # then the samll stones
671 my ($mask, $img) = @$_; 683 my ($mask, $img) = @$_;
672 if ($mark & $mask) { 684 if ($mark & $mask) {
673 $img->composite ( 685 $img->composite (
674 $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4 - 0.5) x 2, 686 $base, ($size / 4) x2, (int ($size / 2 + 0.5)) x2, ($size / 4 - 0.5) x 2,
675 $size / $img->get_width / 2, $size / $img->get_height / 2, 687 $size / $img->get_width / 2, $size / $img->get_height / 2,
676 INTERP_HYPER, 192 688 $::config{speed} ? INTERP_NEAREST : INTERP_HYPER, 192
677 ); 689 );
678 } 690 }
679 } 691 }
680 692
681 # and lastly any markers (labels NYI) 693 # and lastly any markers (labels NYI)
687 my ($mask, $img) = @$_; 699 my ($mask, $img) = @$_;
688 if ($mark & $mask) { 700 if ($mark & $mask) {
689 $img->composite ( 701 $img->composite (
690 $base, 0, 0, $size, $size, -0.5, -0.5, 702 $base, 0, 0, $size, $size, -0.5, -0.5,
691 $size / $img->get_width, $size / $img->get_height, 703 $size / $img->get_width, $size / $img->get_height,
692 INTERP_HYPER, 255 704 $::config{speed} ? INTERP_NEAREST : INTERP_HYPER, 255
693 ); 705 );
694 } 706 }
695 } 707 }
696 708
697 push @$$c, $base; 709 push @$$c, $base;
713 $x -= $w * $s * 0.5; 725 $x -= $w * $s * 0.5;
714 $y -= $height * 0.5; 726 $y -= $height * 0.5;
715 727
716 $c->composite ($pixbuf, 728 $c->composite ($pixbuf,
717 $x, $y, $w*$s+0.5, $height+0.5, $x-0.5, $y-0.5, $s, $s, 729 $x, $y, $w*$s+0.5, $height+0.5, $x-0.5, $y-0.5, $s, $s,
718 INTERP_BILINEAR, 192); 730 $::config{speed} ? INTERP_NEAREST : INTERP_BILINEAR, 192);
719 731
720 } else { 732 } else {
721 warn "unable to render character '$text'"; 733 warn "unable to render character '$text'";
722 } 734 }
723} 735}
749 761
750 my $size = $self->{size}; 762 my $size = $self->{size};
751 763
752 my $border = int ($s / $size); 764 my $border = int ($s / $size);
753 my $s2 = $s - $border * 2; 765 my $s2 = $s - $border * 2;
754 my $edge = int ($s2 / $size) | 1; 766 my $edge = int ($s2 / $size * 0.97);
755 my $ofs = int ($edge / 2); 767 my $ofs = int ($edge / 2);
756 768
757 my @k = map int ($s2 * $_ / $size - $ofs + $border + 0.5), 0 .. $size; 769 my @k = map int ($s2 * $_ / $size - $ofs + $border + 0.5), 0 .. $size;
758 770
759 unless ($self->{background}) {
760 my $pixbuf; 771 my $pixbuf;
761 772
773 if ($self->{background}) {
774 $pixbuf = $self->{background}->copy;
775 } else {
762 my ($bw, $bh) = ($::board_img->get_width, $::board_img->get_height); 776 my ($bw, $bh) = ($::board_img->get_width, $::board_img->get_height);
763 777
764 if ($s < $bw && $s < $bh) { 778 if ($s < $bw && $s < $bh) {
765 $pixbuf = new_pixbuf $s, $s, 1, 0; 779 $pixbuf = new_pixbuf $s, $s, $::config{conserve_memory} ? 0 : 1, 0;
766 $::board_img->copy_area (0, 0, $s, $s, $pixbuf, 0, 0); 780 $::board_img->copy_area (0, 0, $s, $s, $pixbuf, 0, 0);
767 } else { 781 } else {
768 $pixbuf = scale_pixbuf $::board_img, $s, $s, INTERP_TILES; 782 $pixbuf = scale_pixbuf $::board_img, $s, $s, $::config{speed} ? INTERP_NEAREST : INTERP_TILES;
769 } 783 }
770 784
771 my $linew = int ($s / 300); 785 my $linew = int ($s / 500);
772 786
773 my $a = "A"; 787 my $a = "A";
774 for my $i (1 .. $size) { 788 for my $i (1 .. $size) {
775 pixbuf_rect $pixbuf, $k[$i] - $linew, $k[1] - $linew, $k[$i] + $linew, $k[$size] + $linew; 789 pixbuf_rect $pixbuf, $k[$i] - $linew, $k[1] - $linew, $k[$i] + $linew, $k[$size] + $linew;
776 pixbuf_rect $pixbuf, $k[1] - $linew, $k[$i] - $linew, $k[$size] + $linew, $k[$i] + $linew; 790 pixbuf_rect $pixbuf, $k[1] - $linew, $k[$i] - $linew, $k[$size] + $linew, $k[$i] + $linew;
782 796
783 $a++; 797 $a++;
784 $a++ if $a eq "I"; # not correct, instead of AA AB, we should get HH JJ KK... 798 $a++ if $a eq "I"; # not correct, instead of AA AB, we should get HH JJ KK...
785 } 799 }
786 800
801 unless ($::config->{conserve_memory}) {
787 $self->{background} = $pixbuf; 802 $self->{background} = $pixbuf;
803 $pixbuf = $pixbuf->copy;
804 }
788 } 805 }
789 806
790 my $pixbuf = $self->{pixbuf} = $self->{background}->copy; 807 $self->{pixbuf} = $pixbuf;
791 808
792 # hoshi-points(!)#d# 809 # hoshi-points(!)#d#
793 # caching of empty board gfx(!)#d# 810 # caching of empty board gfx(!)#d#
794 811
795 for my $x (1 .. $size) { 812 for my $x (1 .. $size) {
798 815
799 if ($mark) { 816 if ($mark) {
800 my ($dx, $dy) = ($k[$x] - $ofs, $k[$y] - $ofs); 817 my ($dx, $dy) = ($k[$x] - $ofs, $k[$y] - $ofs);
801 my $pb = $self->create_stack($mark, $edge, $x * 17 + $y * 11 ); 818 my $pb = $self->create_stack($mark, $edge, $x * 17 + $y * 11 );
802 819
803 $pb->composite ($pixbuf, $dx, $dy, $edge, $edge, $dx, $dy, 1, 1, INTERP_NEAREST, 255); 820 $pb->composite ($pixbuf, $dx, $dy, $pb->get_width, $pb->get_height,
821 $dx, $dy, 1, 1, $::config{speed} ? INTERP_NEAREST : INTERP_NEAREST, 255);
804 822
805 #my ($pm, $bm) = $self->create_stack($gc, $mark, $edge, $x * 17 + $y * 11 ); 823 #my ($pm, $bm) = $self->create_stack($gc, $mark, $edge, $x * 17 + $y * 11 );
806 824
807 #$gc->set_clip_mask ($bm); 825 #$gc->set_clip_mask ($bm);
808 #$gc->set_clip_origin ($dx, $dy); 826 #$gc->set_clip_origin ($dx, $dy);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines