mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-11 20:19:14 +02:00
(Qt): winapi ClipboardGetFormats() bugfix (result wasn't set), ExtSelectClipRGN() uninitialized variables, scrollbar AV IDE fixes - better check what values comes in SetScrollInfo().
git-svn-id: trunk@11683 -
This commit is contained in:
parent
04d0286c73
commit
659a80a927
@ -306,6 +306,12 @@ type
|
||||
procedure SlotSliderPressed; cdecl;
|
||||
procedure SlotSliderReleased; cdecl;
|
||||
public
|
||||
function getValue: Integer;
|
||||
function getPageStep: Integer;
|
||||
function getMin: Integer;
|
||||
function getMax: Integer;
|
||||
function getSingleStep: Integer;
|
||||
|
||||
procedure setInvertedAppereance(p1: Boolean); virtual;
|
||||
procedure setInvertedControls(p1: Boolean); virtual;
|
||||
|
||||
@ -3163,6 +3169,31 @@ begin
|
||||
inherited DetachEvents;
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getValue: Integer;
|
||||
begin
|
||||
Result := QAbstractSlider_value(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getPageStep: Integer;
|
||||
begin
|
||||
Result := QAbstractSlider_pageStep(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getMin: Integer;
|
||||
begin
|
||||
Result := QAbstractSlider_minimum(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getMax: Integer;
|
||||
begin
|
||||
Result := QAbstractSlider_maximum(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
function TQtAbstractSlider.getSingleStep: Integer;
|
||||
begin
|
||||
Result := QAbstractSlider_singleStep(QAbstractSliderH(Widget));
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: TQtAbstractSlider.rangeChanged
|
||||
Params: minimum,maximum: Integer
|
||||
|
@ -184,7 +184,7 @@ end;
|
||||
function TQtWidgetSet.ClipboardGetFormats(ClipboardType: TClipboardType;
|
||||
var Count: integer; var List: PClipboardFormat): boolean;
|
||||
begin
|
||||
Clipboard.GetFormats(ClipboardType, Count, List);
|
||||
Result := Clipboard.GetFormats(ClipboardType, Count, List);
|
||||
end;
|
||||
|
||||
function TQtWidgetSet.ClipboardGetOwnerShip(ClipboardType: TClipboardType;
|
||||
@ -1432,11 +1432,21 @@ begin
|
||||
RGN_DIFF:
|
||||
begin
|
||||
// get existing clip
|
||||
X := -1;
|
||||
Y := -1;
|
||||
if QtDC.Parent <> nil then
|
||||
begin
|
||||
X := QWidget_width(QtDC.Parent);
|
||||
Y := QWidget_height(QtDC.Parent);
|
||||
end;
|
||||
// GDK_Window_Get_Size(Drawable, @X, @Y);
|
||||
// DCOrigin := GetDCOffset(TQtDeviceContext(DC));
|
||||
GetDeviceSize(DC, DCOrigin);
|
||||
|
||||
Clip := CreateRectRGN(-DCOrigin.X,-DCOrigin.Y,X-DCOrigin.X,Y-DCOrigin.Y);
|
||||
if (X = -1) and (Y = -1) then
|
||||
Clip := CreateRectRGN(-DCOrigin.X,-DCOrigin.Y,DCOrigin.X,DCOrigin.Y)
|
||||
else
|
||||
Clip := CreateRectRGN(-DCOrigin.X,-DCOrigin.Y,X-DCOrigin.X,Y-DCOrigin.Y);
|
||||
// create target clip
|
||||
Tmp := CreateEmptyRegion;
|
||||
// combine
|
||||
@ -2516,10 +2526,11 @@ begin
|
||||
if QtScrollBar = nil then exit;
|
||||
|
||||
ScrollInfo.nTrackPos := 0;
|
||||
ScrollInfo.nMax := QAbstractSlider_maximum(QScrollBarH(QtScrollBar.Widget));
|
||||
ScrollInfo.nMin := QAbstractSlider_minimum(QScrollBarH(QtScrollBar.Widget));
|
||||
ScrollInfo.nPage := QAbstractSlider_pageStep(QScrollBarH(QtScrollBar.Widget));
|
||||
ScrollInfo.nPos := QAbstractSlider_value(QScrollBarH(QtScrollBar.Widget));
|
||||
|
||||
ScrollInfo.nMax := QtScrollBar.getMax;
|
||||
ScrollInfo.nMin := QtScrollBar.getMin;
|
||||
ScrollInfo.nPage := QtScrollBar.getPageStep;
|
||||
ScrollInfo.nPos := QtScrollBar.getValue;
|
||||
ScrollInfo.fMask := SIF_ALL;
|
||||
ScrollInfo.cbSize := SizeOf(ScrollInfo);
|
||||
|
||||
@ -4098,8 +4109,10 @@ begin
|
||||
if GetScrollInfo(Handle, SBStyle, FScrollInfo) then
|
||||
begin
|
||||
{impossible cases}
|
||||
if (Integer(ScrollInfo.nPage) > ScrollInfo.nMax) then exit;
|
||||
|
||||
if (ScrollInfo.nMax < 0)
|
||||
or (Integer(ScrollInfo.nPage) > ScrollInfo.nMax) then
|
||||
exit;
|
||||
|
||||
if (ScrollInfo.FMask or SIF_RANGE) = ScrollInfo.FMask then
|
||||
begin
|
||||
FScrollInfo.nMin := ScrollInfo.nMin;
|
||||
@ -4120,14 +4133,27 @@ begin
|
||||
FScrollInfo.nPage := ScrollInfo.nPage;
|
||||
{segfaults if we don't check Enabled property !}
|
||||
if ScrollBar.Enabled then
|
||||
ScrollBar.PageSize := ScrollInfo.nPage;
|
||||
begin
|
||||
{default Qt minimum size}
|
||||
if ScrollInfo.nPage < 10 then
|
||||
ScrollBar.PageSize := ScrollBar.Max
|
||||
else
|
||||
ScrollBar.PageSize := ScrollInfo.nPage;
|
||||
end;
|
||||
end;
|
||||
|
||||
if (ScrollInfo.FMask or SIF_POS) = ScrollInfo.FMask then
|
||||
begin
|
||||
FScrollInfo.nPos := ScrollInfo.nPos;
|
||||
if ScrollBar.Position <> ScrollInfo.nPos then
|
||||
ScrollBar.Position := ScrollInfo.nPos;
|
||||
|
||||
if (FScrollInfo.nPos < ScrollBar.Min) then
|
||||
FScrollInfo.nPos := ScrollBar.Min
|
||||
else
|
||||
if (FScrollInfo.nPos > ScrollBar.Max) then
|
||||
FScrollInfo.nPos := ScrollBar.Max;
|
||||
|
||||
if (ScrollBar.Position <> FScrollInfo.nPos) then
|
||||
ScrollBar.Position := FScrollInfo.nPos;
|
||||
end;
|
||||
|
||||
if (ScrollInfo.FMask or SIF_TRACKPOS) = ScrollInfo.FMask then
|
||||
@ -4138,17 +4164,31 @@ begin
|
||||
|
||||
if (ScrollInfo.FMask or SIF_ALL) = ScrollInfo.FMask then
|
||||
begin
|
||||
|
||||
FScrollInfo.nPage := ScrollInfo.nPage;
|
||||
FScrollInfo.nPos := ScrollInfo.nPos;
|
||||
|
||||
if (FScrollInfo.nPos < ScrollBar.Min) then
|
||||
FScrollInfo.nPos := ScrollBar.Min
|
||||
else
|
||||
if (FScrollInfo.nPos > ScrollBar.Max) then
|
||||
FScrollInfo.nPos := ScrollBar.Max;
|
||||
|
||||
FScrollInfo.nMin := ScrollInfo.nMin;
|
||||
FScrollInfo.nMax := ScrollInfo.nMax;
|
||||
ScrollBar.Min := ScrollInfo.nMin;
|
||||
ScrollBar.Max := ScrollInfo.nMax;
|
||||
{segfaults if we don't check Enabled property !}
|
||||
if ScrollBar.Enabled then
|
||||
ScrollBar.PageSize := ScrollInfo.nPage;
|
||||
if ScrollBar.Position<>ScrollInfo.nPos then
|
||||
ScrollBar.Position := ScrollInfo.nPos;
|
||||
begin
|
||||
{default Qt minimum size}
|
||||
if ScrollInfo.nPage < 10 then
|
||||
ScrollBar.PageSize := ScrollBar.Max
|
||||
else
|
||||
ScrollBar.PageSize := ScrollInfo.nPage;
|
||||
end;
|
||||
if (ScrollBar.Position <> FScrollInfo.nPos) then
|
||||
ScrollBar.Position := FScrollInfo.nPos;
|
||||
end;
|
||||
|
||||
if (ScrollInfo.FMask or SIF_DISABLENOSCROLL) = ScrollInfo.FMask then
|
||||
@ -4156,7 +4196,6 @@ begin
|
||||
{This value is used only when setting a scroll bar''s parameters.
|
||||
If the scroll bar's new parameters make the scroll bar unnecessary,
|
||||
disable the scroll bar instead of removing it.}
|
||||
|
||||
ScrollBar.Enabled := False;
|
||||
end else
|
||||
begin
|
||||
|
@ -391,13 +391,23 @@ var
|
||||
QtScrollBar: TQtScrollBar;
|
||||
RA,RB: TRect;
|
||||
IsSameGeometry: Boolean;
|
||||
PagePos: Integer;
|
||||
PagePosW: Integer;
|
||||
begin
|
||||
QtScrollBar := TQtScrollBar(AScrollBar.Handle);
|
||||
|
||||
QtScrollBar.setValue(AScrollBar.Position);
|
||||
QtScrollBar.setPageStep(AScrollBar.PageSize);
|
||||
{feels much better with *2 pagesize}
|
||||
QtScrollBar.setPageStep(AScrollBar.PageSize * 2);
|
||||
QtScrollBar.setRange(AScrollBar.Min, AScrollBar.Max);
|
||||
|
||||
PagePos := QtScrollBar.getValue;
|
||||
PagePosW := PagePos + QtScrollBar.getPageStep;
|
||||
|
||||
if (AScrollBar.Position < PagePos)
|
||||
or (AScrollBar.Position > PagePosW)
|
||||
or QtScrollBar.SliderPressed then
|
||||
QtScrollBar.setValue(AScrollBar.Position);
|
||||
|
||||
RA := QtScrollBar.LCLObject.ClientRect;
|
||||
RB := AScrollBar.ClientRect;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user