mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 22:19:18 +02:00
Qt: much faster DCSetPixel when painter is QImage or QPixmap. issue #29256
git-svn-id: trunk@51040 -
This commit is contained in:
parent
b8d42c3a62
commit
60c709a66b
@ -1233,26 +1233,42 @@ end;
|
|||||||
procedure TQtWidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
|
procedure TQtWidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
|
||||||
var
|
var
|
||||||
Color: TQColor;
|
Color: TQColor;
|
||||||
|
AQColor: QColorH;
|
||||||
ColorRef: TColorRef;
|
ColorRef: TColorRef;
|
||||||
Pen: QPenH;
|
Pen: QPenH;
|
||||||
Painter: QPainterH;
|
Painter: QPainterH;
|
||||||
|
ADevType: Integer;
|
||||||
begin
|
begin
|
||||||
if IsValidDC(CanvasHandle) then
|
if IsValidDC(CanvasHandle) then
|
||||||
begin
|
begin
|
||||||
// WriteLn('TQtWidgetSet.DCSetPixel X=',X,' Y=',Y, ' AColor=',dbghex(AColor),' rgb ? ',dbgHex(ColorToRGB(AColor)));
|
// WriteLn('TQtWidgetSet.DCSetPixel X=',X,' Y=',Y, ' AColor=',dbghex(AColor),' rgb ? ',dbgHex(ColorToRGB(AColor)));
|
||||||
Painter := TQtDeviceContext(CanvasHandle).Widget;
|
Painter := TQtDeviceContext(CanvasHandle).Widget;
|
||||||
{Save current pen.Better save copy of pen instead of
|
ADevType := QPaintDevice_devType(QPaintEngine_paintDevice(QPainter_paintEngine(Painter)));
|
||||||
using painter save/restore, or saved Pen in devicecontext which
|
{qt private PaintDeviceFlags 2 = QPixmap 3 = QImage. issue #29256}
|
||||||
may be null. Issue #27620}
|
if ((ADevType = 2) or (ADevType = 3)) and
|
||||||
Pen := QPen_create(QPainter_pen(Painter));
|
(TQtDeviceContext(CanvasHandle).vImage <> nil) and
|
||||||
try
|
(TQtDeviceContext(CanvasHandle).vImage.Handle <> nil) then
|
||||||
|
begin
|
||||||
ColorRef := TColorRef(ColorToRGB(AColor));
|
ColorRef := TColorRef(ColorToRGB(AColor));
|
||||||
QColor_fromRgb(@Color, Red(ColorRef), Green(ColorRef), Blue(ColorRef));
|
QColor_fromRgb(@Color, Red(ColorRef), Green(ColorRef), Blue(ColorRef));
|
||||||
QPainter_setPen(Painter, PQColor(@Color));
|
AQColor := QColor_create(PQColor(@Color));
|
||||||
QPainter_drawPoint(Painter, X,Y);
|
QImage_setPixel(TQtDeviceContext(CanvasHandle).vImage.Handle, X, Y, QColor_rgb(AQColor));
|
||||||
finally
|
QColor_destroy(AQColor);
|
||||||
QPainter_setPen(Painter, Pen);
|
end else
|
||||||
QPen_destroy(Pen);
|
begin
|
||||||
|
{Save current pen.Better save copy of pen instead of
|
||||||
|
using painter save/restore, or saved Pen in devicecontext which
|
||||||
|
may be null. Issue #27620}
|
||||||
|
Pen := QPen_create(QPainter_pen(Painter));
|
||||||
|
try
|
||||||
|
ColorRef := TColorRef(ColorToRGB(AColor));
|
||||||
|
QColor_fromRgb(@Color, Red(ColorRef), Green(ColorRef), Blue(ColorRef));
|
||||||
|
QPainter_setPen(Painter, PQColor(@Color));
|
||||||
|
QPainter_drawPoint(Painter, X,Y);
|
||||||
|
finally
|
||||||
|
QPainter_setPen(Painter, Pen);
|
||||||
|
QPen_destroy(Pen);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user