ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/UI.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/UI.pm (file contents):
Revision 1.481 by root, Tue Oct 12 05:11:38 2010 UTC vs.
Revision 1.484 by root, Sun Jan 8 07:58:39 2012 UTC

2 2
3use common::sense; 3use common::sense;
4 4
5use List::Util (); 5use List::Util ();
6 6
7use AnyEvent ();
7use Guard (); 8use Guard ();
8 9
9use DC; 10use DC;
10use DC::Pod; 11use DC::Pod;
11use DC::Texture; 12use DC::Texture;
362} 363}
363 364
364sub set_size { 365sub set_size {
365 my ($self, $w, $h) = @_; 366 my ($self, $w, $h) = @_;
366 367
367 $self->{force_w} = $w; 368 $self->{force_w} = List::Util::min $w, ($self->{max_w} || $::WIDTH );
368 $self->{force_h} = $h; 369 $self->{force_h} = List::Util::min $h, ($self->{max_h} || $::HEIGHT);
369 370
370 $self->realloc; 371 $self->realloc;
371} 372}
372 373
373# traverse the widget chain up to find the maximum "physical" size constraints 374# traverse the widget chain up to find the maximum "physical" size constraints
1473 my ($self, $ev, $x, $y) = @_; 1474 my ($self, $ev, $x, $y) = @_;
1474 1475
1475 my ($w, $h) = @$self{qw(w h)}; 1476 my ($w, $h) = @$self{qw(w h)};
1476 my $border = $self->border; 1477 my $border = $self->border;
1477 1478
1478 my $lr = ($x >= 0 && $x < $border) || ($x > $w - $border && $x < $w); 1479 my $lr = ($x >= 0 && $x < $border) || ($x > $w - $border && $x < $w); # left-right
1479 my $td = ($y >= 0 && $y < $border) || ($y > $h - $border && $y < $h); 1480 my $td = ($y >= 0 && $y < $border) || ($y > $h - $border && $y < $h); # top-down
1480 1481
1481 if ($lr & $td) { 1482 if ($lr & $td) { # corners
1482 my ($wx, $wy) = ($self->{x}, $self->{y}); 1483 my ($wx, $wy) = ($self->{x}, $self->{y});
1483 my ($ox, $oy) = ($ev->{x}, $ev->{y}); 1484 my ($ox, $oy) = ($ev->{x}, $ev->{y});
1484 my ($bw, $bh) = ($self->{w}, $self->{h}); 1485 my ($bw, $bh) = ($self->{w}, $self->{h});
1485 1486
1486 my $mx = $x < $border; 1487 my $mx = $x < $border;
1490 my ($ev, $x, $y) = @_; 1491 my ($ev, $x, $y) = @_;
1491 1492
1492 my $dx = $ev->{x} - $ox; 1493 my $dx = $ev->{x} - $ox;
1493 my $dy = $ev->{y} - $oy; 1494 my $dy = $ev->{y} - $oy;
1494 1495
1496 $self->set_size (
1495 $self->{force_w} = $bw + $dx * ($mx ? -1 : 1); 1497 $bw + $dx * ($mx ? -1 : 1),
1496 $self->{force_h} = $bh + $dy * ($my ? -1 : 1); 1498 $bh + $dy * ($my ? -1 : 1),
1499 );
1497 1500
1498 $self->move_abs ($wx + $dx * $mx, $wy + $dy * $my); 1501 $self->move_abs ($wx + $dx * $mx, $wy + $dy * $my);
1499 $self->realloc; 1502 $self->realloc;
1500 }; 1503 };
1501 1504
1502 } elsif ($lr ^ $td) { 1505 } elsif ($lr ^ $td) { # edges
1503 my ($ox, $oy) = ($ev->{x}, $ev->{y}); 1506 my ($ox, $oy) = ($ev->{x}, $ev->{y});
1504 my ($bx, $by) = ($self->{x}, $self->{y}); 1507 my ($bx, $by) = ($self->{x}, $self->{y});
1505 1508
1506 $self->{motion} = sub { 1509 $self->{motion} = sub {
1507 my ($ev, $x, $y) = @_; 1510 my ($ev, $x, $y) = @_;
3286 indent => 0, 3289 indent => 0,
3287 #font => default_font 3290 #font => default_font
3288 @_, 3291 @_,
3289 3292
3290 layout => (new DC::Layout), 3293 layout => (new DC::Layout),
3291 par => [],
3292 max_par => 0, 3294 max_par => 0,
3293 height => 0, 3295 height => 0,
3294 children => [ 3296 children => [
3295 (new DC::UI::Empty expand => 1), 3297 (new DC::UI::Empty expand => 1),
3296 (new DC::UI::Slider vertical => 1), 3298 (new DC::UI::Slider vertical => 1),
3297 ], 3299 ],
3298 ); 3300 );
3299 3301
3300 $self->{children}[1]->connect (changed => sub { $self->update }); 3302 $self->{children}[1]->connect (changed => sub { $self->update });
3303
3304 $self->add_paragraph (@{ delete $self->{par} }) if @{ $self->{par} };
3301 3305
3302 $self 3306 $self
3303} 3307}
3304 3308
3305sub set_fontsize { 3309sub set_fontsize {
4292 $self 4296 $self
4293} 4297}
4294 4298
4295sub reorder { 4299sub reorder {
4296 my ($self) = @_; 4300 my ($self) = @_;
4297 my $NOW = EV::time; 4301 my $NOW = AE::time;
4298 4302
4299 # freeze display when hovering over any label 4303 # freeze display when hovering over any label
4300 return if $DC::UI::TOOLTIP->{owner} 4304 return if $DC::UI::TOOLTIP->{owner}
4301 && grep $DC::UI::TOOLTIP->{owner} == $_->{label}, 4305 && grep $DC::UI::TOOLTIP->{owner} == $_->{label},
4302 values %{ $self->{item} }; 4306 values %{ $self->{item} };
4401 $ROOT->on_refresh (reorder => sub { 4405 $ROOT->on_refresh (reorder => sub {
4402 $self->reorder; 4406 $self->reorder;
4403 }); 4407 });
4404} 4408}
4405 4409
4410sub clr_group {
4411 my ($self, $group) = @_;
4412
4413 if (delete $self->{item}{$group}) {
4414 $ROOT->on_refresh (reorder => sub {
4415 $self->reorder;
4416 });
4417 }
4418}
4419
4406sub reconfigure { 4420sub reconfigure {
4407 my ($self) = @_; 4421 my ($self) = @_;
4408 4422
4409 delete $_->{label} 4423 delete $_->{label}
4410 for values %{ $self->{item} || {} }; 4424 for values %{ $self->{item} || {} };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines