From 7b6eeafcb395cee5ab669f5fd90ed69a8ff5f55f Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 3 Apr 2024 16:23:07 +0000 Subject: [PATCH] rgbgraphics: Add qt5 support. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9314 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../rgbgraphics/source/rgbqt5routines.pas | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 components/rgbgraphics/source/rgbqt5routines.pas diff --git a/components/rgbgraphics/source/rgbqt5routines.pas b/components/rgbgraphics/source/rgbqt5routines.pas new file mode 100644 index 000000000..ae70a586d --- /dev/null +++ b/components/rgbgraphics/source/rgbqt5routines.pas @@ -0,0 +1,97 @@ +{ + /*************************************************************************** + RGBQt5Routines.pas + + + ***************************************************************************/ + + ***************************************************************************** + * * + * See the file COPYING.modifiedLGPL, included in this distribution, * + * for details about the copyright. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * * + ***************************************************************************** + + Author: Tom Gregorovic (_tom_@centrum.cz) + + Abstract: + This unit contains routines for Qt interface. + +} +unit RGBQt5Routines; + +{$ifdef fpc} + {$mode objfpc}{$H+} +{$endif} + +interface + +uses + SysUtils, Types, LCLType, Qt5, QtObjects, Classes, + RGBTypes; + + procedure WidgetSetDrawRGB32Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, SrcWidth, SrcHeight: Integer; + Bitmap: TRGB32BitmapCore); + procedure WidgetSetStretchDrawRGB32Bitmap(Dest: HDC; DstX, DstY, DstWidth, DstHeight: Integer; + SrcX, SrcY, SrcWidth, SrcHeight: Integer; Bitmap: TRGB32BitmapCore); + + procedure WidgetSetDrawRGB8Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, SrcWidth, SrcHeight: Integer; + Bitmap: TRGB8BitmapCore); + +implementation + +procedure WidgetSetDrawRGB32Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, SrcWidth, + SrcHeight: Integer; Bitmap: TRGB32BitmapCore); +begin + WidgetSetStretchDrawRGB32Bitmap(Dest, DstX, DstY, SrcWidth, SrcHeight, SrcX, SrcY, SrcWidth, SrcHeight, Bitmap); +end; + +procedure WidgetSetStretchDrawRGB32Bitmap(Dest: HDC; DstX, DstY, DstWidth, + DstHeight: Integer; SrcX, SrcY, SrcWidth, SrcHeight: Integer; + Bitmap: TRGB32BitmapCore); +var + DstQDC: TQtDeviceContext absolute Dest; + SrcRect, DstRect: TRect; + Image: TQtImage; +begin + DstRect := Bounds(DstX, DstY, DstWidth, DstHeight); + SrcRect := Bounds(SrcX, SrcY, SrcWidth, SrcHeight); + + Image := TQtImage.Create(Bitmap.Pixels, Bitmap.Width, Bitmap.Height, QImageFormat_RGB32); + try + QPainter_drawImage(DstQDC.Widget, PRect(@DstRect), Image.Handle, @SrcRect, QtAutoColor); + finally + Image.Free; + end; +end; + +procedure WidgetSetDrawRGB8Bitmap(Dest: HDC; DstX, DstY: Integer; SrcX, SrcY, + SrcWidth, SrcHeight: Integer; Bitmap: TRGB8BitmapCore); +var + DstQDC: TQtDeviceContext absolute Dest; + SrcRect, DstRect: TRect; + Image: TQtImage; + I: Integer; +begin + DstRect := Bounds(DstX, DstY, SrcWidth, SrcHeight); + SrcRect := Bounds(SrcX, SrcY, SrcWidth, SrcHeight); + + Image := TQtImage.Create(Bitmap.Pixels, Bitmap.Width, Bitmap.Height, QImageFormat_Indexed8); + try + // initialize palette + for I := 0 to 255 do + QImage_setColor(Image.Handle, I, I + I shl 8 + I shl 16 + $FF shl 24); + + QPainter_drawImage(DstQDC.Widget, PRect(@DstRect), Image.Handle, @SrcRect, QtAutoColor); + finally + Image.Free; + end; +end; + + +end. +