mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-04 23:58:14 +02:00
qt: implement image flipping in StretchMaskBlt (part of issue #0013059)
git-svn-id: trunk@19214 -
This commit is contained in:
parent
ecc57f0bda
commit
624659d92d
@ -4846,7 +4846,7 @@ var
|
||||
DstQDC: TQtDeviceContext absolute DestDC;
|
||||
SrcRect, DstRect, MaskRect: TRect;
|
||||
SrcWidthOrig, SrcHeightOrig: Integer;
|
||||
Image, QMask: QImageH;
|
||||
Image, TmpImage, QMask, TmpMask: QImageH;
|
||||
SrcMatrix: QMatrixH;
|
||||
dx, dy: integer;
|
||||
begin
|
||||
@ -4900,6 +4900,7 @@ begin
|
||||
dec(Width, dx); // substract width
|
||||
dec(SrcWidth, dx); // and dont forget about SrcWidth or we will get unneeded stretching
|
||||
end;
|
||||
|
||||
if dy <> 0 then
|
||||
begin
|
||||
inc(Y, dy);
|
||||
@ -4918,7 +4919,28 @@ begin
|
||||
QMask := TQtImage(Mask).Handle
|
||||
else
|
||||
QMask := nil;
|
||||
DstQDC.drawImage(@DstRect, Image, @SrcRect, QMask, @MaskRect);
|
||||
|
||||
if (DstRect.Right < DstRect.Left) or (DstRect.Bottom < DstRect.Top) then
|
||||
begin
|
||||
// Right < Left mean horizontal flip, Bottom < Top - vertical
|
||||
TmpImage := QImage_create();
|
||||
QImage_mirrored(Image, TmpImage, DstRect.Right < DstRect.Left, DstRect.Bottom < DstRect.Top);
|
||||
if QMask <> nil then
|
||||
begin
|
||||
TmpMask := QImage_create();
|
||||
QImage_mirrored(QMask, TmpMask, DstRect.Right < DstRect.Left, DstRect.Bottom < DstRect.Top);
|
||||
end
|
||||
else
|
||||
TmpMask := QMask;
|
||||
DstRect := NormalizeRect(DstRect);
|
||||
MaskRect := NormalizeRect(MaskRect);
|
||||
DstQDC.drawImage(@DstRect, TmpImage, @SrcRect, TmpMask, @MaskRect);
|
||||
QImage_destroy(TmpImage);
|
||||
if TmpMask <> nil then
|
||||
QImage_destroy(TmpMask);
|
||||
end
|
||||
else
|
||||
DstQDC.drawImage(@DstRect, Image, @SrcRect, QMask, @MaskRect);
|
||||
|
||||
Result := True;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user