--- deliantra/Deliantra-Client/DC/UI.pm 2006/04/11 17:02:36 1.68 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/04/11 17:32:14 1.69 @@ -994,7 +994,7 @@ sub size_request { my ($self) = @_; - my $w = + my $w = 20; my $h = 10; $self->{vertical} ? ($h, $w) : ($w, $h) @@ -1014,11 +1014,36 @@ ) } +sub button_down { + my ($self, $ev, $x, $y) = @_; + + $self->SUPER::button_down ($ev, $x, $y); + $self->mouse_motion ($ev, $x, $y); +} + +sub mouse_motion { + my ($self, $ev, $x, $y) = @_; + + if ($GRAB == $self) { + my ($value, $lo, $hi, $page) = @{$self->{range}}; + + $x = $x * ($hi - $lo) / $self->{w} + $lo; + $x = $lo if $x < $lo; + $x = $hi - $page if $x > $hi - $page; + $self->{range}[0] = $x; + + $self->{changed}($x) if $self->{changed}; + $self->update; + } +} + sub _draw { my ($self) = @_; $self->SUPER::_draw (); + glPushMatrix; + my ($w, $h) = @$self{qw(w h)}; if ($self->{vertical}) { @@ -1033,12 +1058,42 @@ my $fg = $FOCUS == $self ? $self->{active_fg} : $self->{fg}; my $bg = $FOCUS == $self ? $self->{active_bg} : $self->{bg}; + my ($value, $lo, $hi, $page) = @{$self->{range}}; + + $page = int $page * $w / ($hi - $lo); + $value = int +($value - $lo) * $w / ($hi - $lo); + + $w -= $page; + $page &= ~1; + glTranslate $page * 0.5, 0, 0; + glColor @$fg; glBegin GL_LINES; glVertex 0, 0; glVertex 0, $h; glVertex $w - 1, 0; glVertex $w - 1, $h; glVertex 0, $h * 0.5; glVertex $w, $h * 0.5; glEnd; + + my $knob_a = $value - $page * 0.5; + my $knob_b = $value + $page * 0.5; + + glBegin GL_QUADS; + glColor @$fg; + glVertex $knob_a, 0; + glVertex $knob_a, $h; + glVertex $knob_b, $h; + glVertex $knob_b, 0; + + if ($knob_a < $knob_b - 2) { + glColor @$bg; + glVertex $knob_a + 1, 1; + glVertex $knob_a + 1, $h - 1; + glVertex $knob_b - 1, $h - 1; + glVertex $knob_b - 1, 1; + } + glEnd; + + glPopMatrix; } #############################################################################