mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-24 07:19:34 +01:00
Qt: keep track of scrolled offset when viewport is not visible. issue #29239
git-svn-id: trunk@51003 -
This commit is contained in:
parent
654493d96e
commit
6ff3d6e96d
@ -473,9 +473,14 @@ type
|
|||||||
{ TQtViewPort }
|
{ TQtViewPort }
|
||||||
|
|
||||||
TQtViewPort = class(TQtWidget)
|
TQtViewPort = class(TQtWidget)
|
||||||
|
private
|
||||||
|
{when our viewport is invisible then we must keep track of scrolling. issue #29239}
|
||||||
|
FInvisibleX: integer;
|
||||||
|
FInvisibleY: integer;
|
||||||
public
|
public
|
||||||
function CanPaintBackground: Boolean; override;
|
function CanPaintBackground: Boolean; override;
|
||||||
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; override;
|
||||||
|
procedure InitializeWidget; override;
|
||||||
procedure scroll(dx, dy: integer; ARect: PRect = nil); override;
|
procedure scroll(dx, dy: integer; ARect: PRect = nil); override;
|
||||||
procedure stackUnder(AWidget: QWidgetH); override;
|
procedure stackUnder(AWidget: QWidgetH); override;
|
||||||
end;
|
end;
|
||||||
@ -16085,6 +16090,18 @@ begin
|
|||||||
' Event=', EventTypeToStr(Event),' inUpdate=',inUpdate);
|
' Event=', EventTypeToStr(Event),' inUpdate=',inUpdate);
|
||||||
{$endif}
|
{$endif}
|
||||||
case QEvent_type(Event) of
|
case QEvent_type(Event) of
|
||||||
|
QEventShow,
|
||||||
|
QEventShowToParent:
|
||||||
|
begin
|
||||||
|
{Qt does not track scrolled offset of widget when it''s not visible.issue #29239}
|
||||||
|
if (FInvisibleX <> 0) or (FInvisibleY <> 0) then
|
||||||
|
begin
|
||||||
|
QWidget_scroll(Widget, FInvisibleX, FInvisibleY);
|
||||||
|
FInvisibleX := 0;
|
||||||
|
FInvisibleY := 0;
|
||||||
|
end;
|
||||||
|
Result := inherited EventFilter(Sender, Event);
|
||||||
|
end;
|
||||||
QEventResize:
|
QEventResize:
|
||||||
begin
|
begin
|
||||||
// immediate update clientRect !
|
// immediate update clientRect !
|
||||||
@ -16167,9 +16184,21 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TQtViewPort.InitializeWidget;
|
||||||
|
begin
|
||||||
|
FInvisibleX := 0;
|
||||||
|
FInvisibleY := 0;
|
||||||
|
inherited InitializeWidget;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TQtViewPort.scroll(dx, dy: integer; ARect: PRect = nil);
|
procedure TQtViewPort.scroll(dx, dy: integer; ARect: PRect = nil);
|
||||||
begin
|
begin
|
||||||
inherited scroll(dx, dy, ARect);
|
if not getVisible then
|
||||||
|
begin
|
||||||
|
FInvisibleX += dx;
|
||||||
|
FInvisibleY += dy;
|
||||||
|
end else
|
||||||
|
inherited scroll(dx, dy, ARect);
|
||||||
FScrollX := FScrollX + dx;
|
FScrollX := FScrollX + dx;
|
||||||
FScrollY := FScrollY + dy;
|
FScrollY := FScrollY + dy;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user