Qt: fixed TQtWidgetSet.ExtSelectClipRgn()

git-svn-id: trunk@23489 -
This commit is contained in:
zeljko 2010-01-19 20:11:10 +00:00
parent bed0cd55e7
commit 30bad26a1b

View File

@ -1584,18 +1584,18 @@ end;
function TQtWidgetSet.ExtSelectClipRGN(dc: hdc; rgn : hrgn; Mode : Longint) : Integer; function TQtWidgetSet.ExtSelectClipRGN(dc: hdc; rgn : hrgn; Mode : Longint) : Integer;
var var
Clip, Clip: HRGN = 0;
Tmp : hRGN; Tmp : hRGN;
X, Y : Longint;
DCOrigin: TPoint; DCOrigin: TPoint;
QtWidget: TQtWidget; QtWidget: TQtWidget = nil;
QtDC: TQtDeviceContext; QtDC: TQtDeviceContext;
QtRgn: TQtRegion;
R: TRect;
begin begin
// copied from gtk winapi
{$ifdef VerboseQtWinAPI} {$ifdef VerboseQtWinAPI}
WriteLn('[WinAPI TQtWidgetSet.ExtSelectClipRGN] possible wrong implementation !'); WriteLn('[WinAPI TQtWidgetSet.ExtSelectClipRGN]');
{$endif} {$endif}
If not IsValidDC(DC) then if not IsValidDC(DC) then
begin begin
Result := ERROR; Result := ERROR;
exit; exit;
@ -1604,9 +1604,11 @@ begin
QtDC := TQtDeviceContext(DC); QtDC := TQtDeviceContext(DC);
QtWidget := QtObjectFromWidgetH(TQtDeviceContext(DC).Parent); if Assigned(QtDC.Parent) then
QtWidget := QtObjectFromWidgetH(QtDC.Parent);
if Assigned(QtWidget) and (QtWidget.PaintData.ClipRegion = nil) then if Assigned(QtWidget) or
(not Assigned(QtWidget) and Assigned(QtDC.vImage)) then
begin begin
// there is no clipping region in the DC // there is no clipping region in the DC
Case Mode of Case Mode of
@ -1616,21 +1618,29 @@ begin
RGN_AND, RGN_AND,
RGN_DIFF: RGN_DIFF:
begin begin
// get existing clip // as MSDN says only RGN_COPY allows NULL RGN param.
X := -1; if not IsValidGDIObject(RGN) then
Y := -1;
if QtDC.Parent <> nil then
begin begin
X := QWidget_width(QtDC.Parent); Result := ERROR;
Y := QWidget_height(QtDC.Parent); exit;
end;
// get existing clip
QtRgn := QtDC.getClipRegion;
if (QtRgn = nil) or (QtRgn.GetRegionType = NULLREGION) then
begin
Result := SelectClipRGN(DC, RGN);
exit;
end else
begin
// get transformation
GetWindowOrgEx(DC, @DCOrigin);
R := QtRgn.getBoundingRect;
Clip := CreateRectRGN(0, 0, R.Right - R.Left, R.Bottom - R.Top);
if (DCOrigin.X <> 0) or (DCOrigin.Y <> 0) then
QRegion_translate(TQtRegion(Clip).Widget, -DCOrigin.X, -DCOrigin.Y);
end; end;
GetDeviceSize(DC, DCOrigin);
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 // create target clip
Tmp := CreateEmptyRegion; Tmp := CreateEmptyRegion;
// combine // combine
@ -1644,7 +1654,7 @@ begin
end; end;
end end
else else
Result := inherited ExtSelectClipRGN(dc, rgn, mode); Result := inherited ExtSelectClipRGN(DC, RGN, Mode);
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------