Re: Making a subclass help

On Saturday, June 12, 2004, at 09:55 AM, Grahame White wrote:

sub clickcell{
    my $clicked = @_;

welcome to the wild & wonderful world of scalar versus array context. when you take an array in scalar context, you get the number of elements in the array. here, the number of elements in @_ is 1, so you're getting 1 in $clicked.

you want to say either

      my $clicked = shift;


      my ($clicked) = @_;

or even

      my $clicked = $_[0];

here, and it works fine.

    print $clicked . "\n";
    print $cells[$clicked]->get_image . "\n";
    $cells[$clicked]->set_image(image => "ball.png");
    return 0;

What _is_ happening, however, is that when I click a cell instead of passing the clicked IButton's index to clickcell() it's passing 1 instead. What's puzzling me in particular is that before adding the image property the correct IButton index was being passed to the function.

i changed it to use get('index') instead of get_index(), but the problem was the same. you probably changed something else in there somewhere.

What I'm eventually going to make is a simple peg-solitaire game. It's just a test program that I start off making each time I try a different language. It's got simple rules, flexes the mind muscles a bit, gives a common example to compare against and also produces an 'artifact' that I can say "woo look what I built" about :)

nifty. a hint: it will run rather a bit faster if you don't load a file every time a button is clicked (you probably knew that already). GdkPixbufs will help, but if create server-side GdkPixmaps for the image icons, you'll save a lot of network traffic (i run x remotely, where it's noticeable).

   # on startup, preload the icons
   foreach my $name (qw(blank ball)) {
        my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file ("$name.png");
        my ($pixmap, $mask) = $pixbuf->render_pixmap_and_mask (65535/2);
        $icons{$name}{pixmap} = $pixmap;
        $icons{$name}{mask} = $mask;
   sub Mup::IButton::set_image {
        my ($self, $icon) = @_;
        $self->child->set_from_pixmap ($icon->{pixmap}, $icon->{mask});
   $cell->set_image ($icons{'ball'});

in fact, you could just make the button class know about the icons (and keep the list of pixmaps), and tell the button which icon you want it to display, by name.

How come hair colors for women take an hour, but "wash out the gray" stuff for men only five minutes? This is so unfair!
    -- Elysse, complaining about commercials

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]