… | |
… | |
251 | |
251 | |
252 | $_->reconfigure |
252 | $_->reconfigure |
253 | for $self->children; |
253 | for $self->children; |
254 | |
254 | |
255 | $self->check_size; |
255 | $self->check_size; |
256 | $self->size_allocate ($self->{w}, $self->{h}); |
256 | $CFClient::UI::ROOT->{size_alloc}{$self} = [$self, $self->{w}, $self->{h}]; |
257 | $self->update; |
257 | $self->update; |
258 | } |
258 | } |
259 | |
259 | |
260 | sub set_max_size { |
260 | sub set_max_size { |
261 | my ($self, $w, $h) = @_; |
261 | my ($self, $w, $h) = @_; |
… | |
… | |
380 | } |
380 | } |
381 | |
381 | |
382 | sub set_parent { |
382 | sub set_parent { |
383 | my ($self, $parent) = @_; |
383 | my ($self, $parent) = @_; |
384 | |
384 | |
385 | $self->{_tree_depth} = $parent->{_tree_depth} + 1; |
|
|
386 | Scalar::Util::weaken ($self->{parent} = $parent); |
385 | Scalar::Util::weaken ($self->{parent} = $parent); |
|
|
386 | |
|
|
387 | $self->check_size |
|
|
388 | unless exists $self->{req_w}; |
387 | } |
389 | } |
388 | |
390 | |
389 | sub check_size { |
391 | sub check_size { |
390 | my ($self) = @_; |
392 | my ($self) = @_; |
391 | |
393 | |
… | |
… | |
506 | $self->{children} = [ |
508 | $self->{children} = [ |
507 | sort { $a->{z} <=> $b->{z} } |
509 | sort { $a->{z} <=> $b->{z} } |
508 | @{$self->{children}}, @widgets |
510 | @{$self->{children}}, @widgets |
509 | ]; |
511 | ]; |
510 | |
512 | |
511 | $_->check_size |
513 | $self->check_size; |
512 | for @widgets; |
|
|
513 | |
|
|
514 | $self->update; |
514 | $self->update; |
515 | } |
515 | } |
516 | |
516 | |
517 | sub children { |
517 | sub children { |
518 | @{ $_[0]{children} } |
518 | @{ $_[0]{children} } |
… | |
… | |
1212 | ) |
1212 | ) |
1213 | } |
1213 | } |
1214 | |
1214 | |
1215 | sub size_allocate { |
1215 | sub size_allocate { |
1216 | my ($self, $w, $h) = @_; |
1216 | my ($self, $w, $h) = @_; |
|
|
1217 | |
|
|
1218 | Carp::confess "negative size" if $w < 0 || $h < 0;#d# |
1217 | |
1219 | |
1218 | my $children = $self->{children}; |
1220 | my $children = $self->{children}; |
1219 | |
1221 | |
1220 | my @h = map $_->{req_h}, @$children; |
1222 | my @h = map $_->{req_h}, @$children; |
1221 | |
1223 | |
… | |
… | |
2481 | sub new { |
2483 | sub new { |
2482 | my $class = shift; |
2484 | my $class = shift; |
2483 | |
2485 | |
2484 | my %args = @_; |
2486 | my %args = @_; |
2485 | |
2487 | |
2486 | my $item = $args{item}; |
2488 | my $item = delete $args{item}; |
2487 | |
2489 | |
2488 | my $desc = $item->{nrof} < 2 |
2490 | my $desc = $item->{nrof} < 2 |
2489 | ? $item->{name} |
2491 | ? $item->{name} |
2490 | : "$item->{nrof} $item->{name_pl}"; |
2492 | : "$item->{nrof} $item->{name_pl}"; |
2491 | |
2493 | |
… | |
… | |
2520 | |
2522 | |
2521 | 1 |
2523 | 1 |
2522 | }, |
2524 | }, |
2523 | %args |
2525 | %args |
2524 | ); |
2526 | ); |
|
|
2527 | |
2525 | $self->add(new CFClient::UI::Face |
2528 | $self->add (new CFClient::UI::Face |
2526 | can_events => 0, |
2529 | can_events => 0, |
2527 | face => $item->{face}, |
2530 | face => $item->{face}, |
2528 | anim => $item->{anim}, |
2531 | anim => $item->{anim}, |
2529 | animspeed => $item->{animspeed}); |
2532 | animspeed => $item->{animspeed}, |
|
|
2533 | ); |
|
|
2534 | |
2530 | $self->add(new CFClient::UI::Label |
2535 | $self->add (new CFClient::UI::Label |
2531 | can_events => 0, |
2536 | can_events => 0, |
2532 | text => $desc); |
2537 | text => $desc, |
|
|
2538 | ); |
2533 | |
2539 | |
2534 | $self |
2540 | $self |
2535 | } |
2541 | } |
2536 | |
2542 | |
2537 | ############################################################################# |
2543 | ############################################################################# |
… | |
… | |
2564 | for my $item (@items) { |
2570 | for my $item (@items) { |
2565 | my $desc = $item->{nrof} < 2 |
2571 | my $desc = $item->{nrof} < 2 |
2566 | ? $item->{name} |
2572 | ? $item->{name} |
2567 | : "$item->{nrof} $item->{name_pl}"; |
2573 | : "$item->{nrof} $item->{name_pl}"; |
2568 | |
2574 | |
2569 | $self->{scrolled}->add (new CFClient::UI::InventoryItem item => $item); |
2575 | $self->{scrolled}->add ($item->{widget} ||= new CFClient::UI::InventoryItem item => $item); |
2570 | } |
2576 | } |
2571 | |
2577 | |
2572 | # $range->{range} = [$self->{pos}, 0, $self->{max_pos}, $page]; |
2578 | # $range->{range} = [$self->{pos}, 0, $self->{max_pos}, $page]; |
2573 | } |
2579 | } |
2574 | |
2580 | |
… | |
… | |
2769 | my ($w, $h) = $widget->{user_w} && $widget->{user_h} |
2775 | my ($w, $h) = $widget->{user_w} && $widget->{user_h} |
2770 | ? @$widget{qw(user_w user_h)} |
2776 | ? @$widget{qw(user_w user_h)} |
2771 | : $widget->size_request; |
2777 | : $widget->size_request; |
2772 | |
2778 | |
2773 | if ($w != $widget->{req_w} || $h != $widget->{req_h}) { |
2779 | if ($w != $widget->{req_w} || $h != $widget->{req_h}) { |
|
|
2780 | Carp::confess "$widget: size_request is negative" if $w < 0 || $h < 0;#d# |
|
|
2781 | |
2774 | $widget->{req_w} = $w; |
2782 | $widget->{req_w} = $w; |
2775 | $widget->{req_h} = $h; |
2783 | $widget->{req_h} = $h; |
2776 | |
2784 | |
2777 | $self->{size_alloc}{$widget} = [$widget, $widget->{w}, $widget->{h}]; |
2785 | $self->{size_alloc}{$widget} = [$widget, $widget->{w}, $widget->{h}]; |
2778 | |
2786 | |
… | |
… | |
2783 | } |
2791 | } |
2784 | |
2792 | |
2785 | while ($self->{size_alloc}) { |
2793 | while ($self->{size_alloc}) { |
2786 | for (values %{delete $self->{size_alloc}}) { |
2794 | for (values %{delete $self->{size_alloc}}) { |
2787 | my ($widget, $w, $h) = @$_; |
2795 | my ($widget, $w, $h) = @$_; |
|
|
2796 | |
|
|
2797 | $w = 0 if $w < 0; |
|
|
2798 | $h = 0 if $h < 0; |
2788 | |
2799 | |
2789 | $widget->{w} = $w; |
2800 | $widget->{w} = $w; |
2790 | $widget->{h} = $h; |
2801 | $widget->{h} = $h; |
2791 | $widget->size_allocate ($w, $h); |
2802 | $widget->size_allocate ($w, $h); |
2792 | $widget->emit (size_allocate => $w, $h); |
2803 | $widget->emit (size_allocate => $w, $h); |