mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 01:36:16 +02:00
qt:
- simplify SetScrollInfo - fix hiding scroll when bRedraw is false - improve GetScrollInfo (issue #0010734) git-svn-id: trunk@13945 -
This commit is contained in:
parent
231fbb81d3
commit
16cac2db2d
@ -238,6 +238,7 @@ type
|
||||
function getMin: Integer;
|
||||
function getMax: Integer;
|
||||
function getSingleStep: Integer;
|
||||
function getSliderPosition: Integer;
|
||||
|
||||
procedure setInvertedAppereance(p1: Boolean); virtual;
|
||||
procedure setInvertedControls(p1: Boolean); virtual;
|
||||
@ -4098,6 +4099,11 @@ begin
|
||||
Result := QAbstractSlider_singleStep(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getSliderPosition: Integer;
|
||||
begin
|
||||
QAbstractSlider_sliderPosition(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: TQtAbstractSlider.rangeChanged
|
||||
Params: minimum,maximum: Integer
|
||||
|
@ -2472,9 +2472,9 @@ begin
|
||||
if (ScrollInfo.fMask and SIF_PAGE) <> 0 then
|
||||
ScrollInfo.nPage := QtScrollBar.getPageStep;
|
||||
|
||||
// TRACKPOS TrackPos is setted up as in gtk implementation
|
||||
// TRACKPOS
|
||||
if (ScrollInfo.fMask and SIF_TRACKPOS) <> 0 then
|
||||
ScrollInfo.nTrackPos := QtScrollBar.getValue;
|
||||
ScrollInfo.nTrackPos := QtScrollBar.getSliderPosition;
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
@ -4228,76 +4228,55 @@ function TQtWidgetSet.SetScrollInfo(Handle : HWND; SBStyle : Integer;
|
||||
var
|
||||
Control: TWinControl;
|
||||
ScrollBar: TQtScrollBar;
|
||||
FScrollInfo: TScrollInfo;
|
||||
|
||||
function PrepareScrollInfo: Integer;
|
||||
var
|
||||
iReCountMax: Integer;
|
||||
begin
|
||||
|
||||
Result := 0;
|
||||
|
||||
if not Assigned(ScrollBar) then exit;
|
||||
|
||||
FillChar(FScrollInfo, SizeOf(FScrollInfo), #0);
|
||||
FScrollInfo.cbSize := SizeOf(FScrollInfo);
|
||||
FScrollInfo.FMask := ScrollInfo.FMask;
|
||||
|
||||
if GetScrollInfo(Handle, SBStyle, FScrollInfo) then
|
||||
function UpdateScrollInfo: Integer;
|
||||
var
|
||||
iReCountMax: Integer;
|
||||
begin
|
||||
{impossible cases}
|
||||
if (ScrollInfo.nMax < 0) or
|
||||
(Integer(ScrollInfo.nPage) > ScrollInfo.nMax) then exit;
|
||||
Result := 0;
|
||||
|
||||
if (ScrollInfo.FMask and SIF_RANGE) <> 0 then
|
||||
begin
|
||||
FScrollInfo.nMin := ScrollInfo.nMin;
|
||||
FScrollInfo.nMax := ScrollInfo.nMax;
|
||||
ScrollBar.setMinimum(ScrollInfo.nMin);
|
||||
|
||||
{we must recount ScrollBar.Max since invalid value raises AV}
|
||||
iRecountMax := FScrollInfo.nMax - ScrollInfo.nPage;
|
||||
if iRecountMax < FScrollInfo.nMin then
|
||||
iRecountMax := FScrollInfo.nMin;
|
||||
|
||||
// we must recount ScrollBar.Max since invalid value raises AV
|
||||
iRecountMax := ScrollInfo.nMax - ScrollInfo.nPage;
|
||||
if iRecountMax < ScrollInfo.nMin then
|
||||
iRecountMax := ScrollInfo.nMin;
|
||||
|
||||
ScrollBar.setMaximum(iRecountMax);
|
||||
{ - (ScrollInfo.nMax div 4 PageStep property)); }
|
||||
end;
|
||||
|
||||
if (ScrollInfo.FMask and SIF_PAGE) <> 0 then
|
||||
begin
|
||||
FScrollInfo.nPage := ScrollInfo.nPage;
|
||||
{segfaults if we don't check Enabled property !}
|
||||
// segfaults if we don't check Enabled property
|
||||
if ScrollBar.getEnabled then
|
||||
ScrollBar.setPageStep(ScrollInfo.nPage);
|
||||
ScrollBar.setPageStep(ScrollInfo.nPage);
|
||||
end;
|
||||
|
||||
|
||||
if (ScrollInfo.FMask and SIF_POS) <> 0 then
|
||||
begin
|
||||
FScrollInfo.nPos := ScrollInfo.nPos;
|
||||
FScrollInfo.nTrackPos := ScrollInfo.nPos;
|
||||
|
||||
if (FScrollInfo.nPos < ScrollBar.getMin) then
|
||||
FScrollInfo.nPos := ScrollBar.getMin
|
||||
if (ScrollInfo.nPos < ScrollBar.getMin) then
|
||||
ScrollInfo.nPos := ScrollBar.getMin
|
||||
else
|
||||
if (FScrollInfo.nPos > ScrollBar.getMax) then
|
||||
FScrollInfo.nPos := ScrollBar.getMax;
|
||||
if (ScrollInfo.nPos > ScrollBar.getMax) then
|
||||
ScrollInfo.nPos := ScrollBar.getMax;
|
||||
|
||||
ScrollBar.setValue(FScrollInfo.nPos);
|
||||
ScrollBar.setValue(ScrollInfo.nPos);
|
||||
end;
|
||||
|
||||
if (ScrollInfo.FMask and SIF_TRACKPOS) <> 0 then
|
||||
begin
|
||||
FScrollInfo.nTrackPos := ScrollInfo.nTrackPos;
|
||||
{TODO: TQtScrollBar(ScrollBar.Handle).setTracking(True); via SB_THUMBTRACK }
|
||||
// from MSDN: the SetScrollInfo function ignores this member
|
||||
// ScrollBar.setSliderPosition(ScrollInfo.nTrackPos);
|
||||
end;
|
||||
|
||||
ScrollInfo := FScrollInfo;
|
||||
Result := FScrollInfo.nPos;
|
||||
Result := ScrollBar.getValue;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
// bRedraw is useles with qt
|
||||
|
||||
Result := 0;
|
||||
|
||||
if (Handle = 0) then exit;
|
||||
@ -4319,7 +4298,6 @@ begin
|
||||
ScrollBar := TQtScrollBar(Handle);
|
||||
|
||||
if not Assigned(ScrollBar) then exit;
|
||||
ScrollBar.setVisible(bRedraw);
|
||||
end; {SB_CTL}
|
||||
|
||||
SB_HORZ:
|
||||
@ -4339,9 +4317,6 @@ begin
|
||||
if (Control <> nil) and (Control.HandleAllocated) then
|
||||
ScrollBar := TQtScrollBar(Control.Handle)
|
||||
end;
|
||||
|
||||
if Assigned(ScrollBar) then
|
||||
ScrollBar.setVisible(bRedraw);
|
||||
end; {SB_HORZ}
|
||||
|
||||
SB_VERT:
|
||||
@ -4361,17 +4336,12 @@ begin
|
||||
if (Control <> nil) and (Control.HandleAllocated) then
|
||||
ScrollBar := TQtScrollBar(Control.Handle)
|
||||
end;
|
||||
|
||||
if Assigned(ScrollBar) then
|
||||
ScrollBar.setVisible(bRedraw);
|
||||
|
||||
end; {SB_VERT}
|
||||
|
||||
end;
|
||||
|
||||
if Assigned(ScrollBar) and bRedraw then
|
||||
Result := PrepareScrollInfo;
|
||||
|
||||
if Assigned(ScrollBar) then
|
||||
Result := UpdateScrollInfo;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user