--- deliantra/Deliantra-Client/DC/UI.pm 2007/07/16 20:12:19 1.375 +++ deliantra/Deliantra-Client/DC/UI.pm 2007/07/16 20:20:23 1.376 @@ -991,6 +991,7 @@ $self->{view_x} = max 0, min $self->child->{w} - $self->{w}, int $x; $self->{view_y} = max 0, min $self->child->{h} - $self->{h}, int $y; + $self->emit (changed => $self->{view_x}, $self->{view_y}); $self->update; } @@ -1076,9 +1077,16 @@ ); $self->{vp} = new CFPlus::UI::ViewPort - expand => 1, - scroll_x => $self->{scroll_x}, - scroll_y => $self->{scroll_y}, + expand => 1, + scroll_x => $self->{scroll_x}, + scroll_y => $self->{scroll_y}, + on_changed => sub { + my ($vp, $x, $y) = @_; + $vp->{parent}{hslider}->set_value ($x); + $vp->{parent}{vslider}->set_value ($y); + + 0 + }, ; $self->SUPER::add (0, 0, $self->{vp}); @@ -1142,14 +1150,15 @@ if ($ev->{button} == 2) { $self->grab_focus; + + my $ox = $self->{vp}{view_x} + $ev->{x}; + my $oy = $self->{vp}{view_y} + $ev->{y}; $self->{motion} = sub { my ($ev, $x, $y) = @_; - $self->{vp}->set_offset ( - $self->{vp}{view_x} - $ev->{xrel}, - $self->{vp}{view_y} - $ev->{yrel}, - ); + $self->{vp}->set_offset ($ox - $ev->{x}, $oy - $ev->{y}); + $self->update; }; return 1;