summaryrefslogtreecommitdiff
path: root/installer/scroll.pas
diff options
context:
space:
mode:
Diffstat (limited to 'installer/scroll.pas')
-rw-r--r--installer/scroll.pas19
1 files changed, 16 insertions, 3 deletions
diff --git a/installer/scroll.pas b/installer/scroll.pas
index 379bb103b8..803c071d62 100644
--- a/installer/scroll.pas
+++ b/installer/scroll.pas
@@ -52,6 +52,7 @@ type
private
DrawLock: Byte;
DrawFlag: Boolean;
+ ScrollFlag : boolean;
procedure CheckDraw;
procedure UpdateLimits;
procedure ShiftViews(DX,DY: sw_integer);
@@ -86,6 +87,11 @@ procedure TScrollBox.HandleEvent(var Event: TEvent);
begin
if (Event.What=evBroadcast) and (Event.Command=cmCursorChanged) then
TrackCursor;
+ If (Event.What = evBroadcast) AND
+ (Event.Command = cmScrollBarChanged) AND { Scroll bar change }
+ Not ScrollFlag AND
+ ((Event.InfoPtr = HScrollBar) OR { Our scrollbar? }
+ (Event.InfoPtr = VScrollBar)) Then ScrollDraw; { Redraw scroller }
inherited HandleEvent(Event);
end;
@@ -123,7 +129,7 @@ begin
if (D.X <> Delta.X) or (D.Y <> Delta.Y) then
begin
SetCursor(Cursor.X + Delta.X - D.X, Cursor.Y + Delta.Y - D.Y);
- Delta := D;
+ ScrollTo(D.X,D.Y);
if DrawLock <> 0 then
DrawFlag := True
else
@@ -134,14 +140,19 @@ end;
procedure TScrollBox.ScrollTo(X, Y: Sw_Integer);
var DX,DY: sw_integer;
+ PrevScrollFlag : boolean;
begin
Inc(DrawLock);
DX:=Delta.X-X;
DY:=Delta.Y-Y;
+ PrevScrollFlag:=ScrollFlag;
+ ScrollFlag:=true;
+
if HScrollBar <> nil then
HScrollBar^.SetValue(X);
if VScrollBar <> nil then
VScrollBar^.SetValue(Y);
+ ScrollFlag:=PrevScrollFlag;
ShiftViews(DX,DY);
Dec(DrawLock);
CheckDraw;
@@ -154,6 +165,8 @@ procedure TScrollBox.ShiftViews(DX,DY: sw_integer);
end;
begin
ForEach(@DoShift);
+ Delta.X:=Delta.X-DX;
+ Delta.Y:=Delta.Y-DY;
end;
procedure TScrollBox.SetLimit(X, Y: Sw_Integer);
@@ -162,9 +175,9 @@ begin
Limit.Y := Y;
Inc(DrawLock);
if HScrollBar <> nil then
- HScrollBar^.SetParams(HScrollBar^.Value, 0, X - Size.X, Size.X - 1, HScrollBar^.ArStep);
+ HScrollBar^.SetParams(HScrollBar^.Value, HScrollBar^.Min, HScrollBar^.Max, HScrollBar^.PgStep, HScrollBar^.ArStep);
if VScrollBar <> nil then
- VScrollBar^.SetParams(VScrollBar^.Value, 0, Y - Size.Y, Size.Y - 1, VScrollBar^.ArStep);
+ VScrollBar^.SetParams(VScrollBar^.Value, VScrollBar^.Min, VScrollBar^.Max, VScrollBar^.PgStep, VScrollBar^.ArStep);
Dec(DrawLock);
CheckDraw;
end;