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.102 by elmex, Fri Apr 14 12:17:06 2006 UTC vs.
Revision 1.103 by elmex, Fri Apr 14 13:51:36 2006 UTC

1350 range => [0, 0, 100, 10], 1350 range => [0, 0, 100, 10],
1351 req_w => 40, 1351 req_w => 40,
1352 req_h => 13, 1352 req_h => 13,
1353 vertical => 0, 1353 vertical => 0,
1354 can_hover => 1, 1354 can_hover => 1,
1355 inner_pad => 5,
1355 @_ 1356 @_
1356 ); 1357 );
1357 1358
1358 $self 1359 $self
1359} 1360}
1380 if ($GRAB == $self) { 1381 if ($GRAB == $self) {
1381 my ($value, $lo, $hi, $page) = @{$self->{range}}; 1382 my ($value, $lo, $hi, $page) = @{$self->{range}};
1382 1383
1383 my ($x, $w) = $self->{vertical} ? ($y, $self->{h}) : ($x, $self->{w}); 1384 my ($x, $w) = $self->{vertical} ? ($y, $self->{h}) : ($x, $self->{w});
1384 1385
1386 my $inner_pad_px = $self->_calc_inner_pad_px ($w);
1387 my $inner_w = $w - $inner_pad_px * 2; # * 2 for left & right
1388
1389 $x -= $inner_pad_px; # substract the padding
1385 $x = $x * ($hi - $lo) / $w + $lo; 1390 $x = $x * ($hi - $lo) / $inner_w + $lo;
1386 $x = $lo if $x < $lo; 1391 $x = $lo if $x < $lo;
1387 $x = $hi - $page if $x > $hi - $page; 1392 $x = $hi - $page if $x > $hi - $page;
1388 $self->{range}[0] = $x; 1393 $self->{range}[0] = $x;
1389 1394
1390 $self->emit (changed => $x); 1395 $self->emit (changed => $x);
1391 $self->update; 1396 $self->update;
1392 } 1397 }
1398}
1399
1400# the inner_* stuff is for generating a padding for the slider handle,
1401# so that the handle doesn't leave the texture. This calculation isn't 100%
1402# correct propably, but it does the job for now
1403sub _calc_inner_pad_px {
1404 my ($self, $w) = @_;
1405 ($w / 100) * $self->{inner_pad} # % to pixels
1393} 1406}
1394 1407
1395sub _draw { 1408sub _draw {
1396 my ($self) = @_; 1409 my ($self) = @_;
1397 1410
1411 my $fg = $FOCUS == $self ? $self->{active_fg} : $self->{fg}; 1424 my $fg = $FOCUS == $self ? $self->{active_fg} : $self->{fg};
1412 my $bg = $FOCUS == $self ? $self->{active_bg} : $self->{bg}; 1425 my $bg = $FOCUS == $self ? $self->{active_bg} : $self->{bg};
1413 1426
1414 my ($value, $lo, $hi, $page) = @{$self->{range}}; 1427 my ($value, $lo, $hi, $page) = @{$self->{range}};
1415 1428
1416 # the inner_* stuff is for generating a padding for the slider handle, 1429 my $inner_pad_px = $self->_calc_inner_pad_px ($w);
1417 # so that the handle doesn't leave the texture. This calculation isn't 100%
1418 # correct propably, but it does the job for now
1419 my $inner_pad = 5; # 5% of width for slider bg texture border
1420 my $inner_pad_px = ($w / 100) * $inner_pad; # % to pixels
1421 my $inner_w = $w - $inner_pad_px * 2; # * 2 for left & right 1430 my $inner_w = $w - $inner_pad_px * 2; # * 2 for left & right
1422 1431
1423 $page = int $page * $inner_w / ($hi - $lo); 1432 $page = int $page * $inner_w / ($hi - $lo);
1424 $value = int +($value - $lo) * $inner_w / ($hi - $lo); 1433 $value = int +($value - $lo) * $inner_w / ($hi - $lo);
1425 1434
1426 $w -= $page; 1435 $w -= $page;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines