procedure TQtWidgetSet.DCSetPixel(CanvasHandle: HDC; X, Y: integer; AColor: TGraphicsColor);
var
ColorRef: TColorRef;
Painter: QPainterH;
Pen:QPenH;
Rgb:QRgb;
Color: QColorH;
begin
if IsValidDC(CanvasHandle) then
begin
// WriteLn('TQtWidgetSet.DCSetPixel X=',X,' Y=',Y, ' AColor=',dbghex(AColor),' rgb ? ',dbgHex(ColorToRGB(AColor)));
if (TQtDeviceContext(CanvasHandle).vImage <> nil) then
begin
ColorRef := TColorRef(ColorToRGB(AColor));
try
Color:=QColor_create(Red(ColorRef), Green(ColorRef), Blue(ColorRef));
Rgb:=QColor_rgba(Color);
QImage_setPixel(TQtDeviceContext(CanvasHandle).vImage.Handle, X,Y, Rgb);
finally
QColor_destroy(Color);
end;
end
else if (TQtDeviceContext(CanvasHandle).Widget <> nil) then
// It is not bitmap. Fallback to Painter drawPoint.
begin
Painter := TQtDeviceContext(CanvasHandle).Widget;
{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)); //save current pen
{Create pen for SetPixel from scratch to prevent inheriting Width
and other Pen properties from Painter current Pen.}
if FPenForSetPixel = nil then
FPenForSetPixel := QPen_create;
try
ColorRef := TColorRef(ColorToRGB(AColor));
QColor_fromRgb(@Color, Red(ColorRef), Green(ColorRef), Blue(ColorRef));
QPen_setColor(FPenForSetPixel, @Color);
QPainter_setPen(Painter, FPenForSetPixel);
QPainter_drawPoint(Painter, X,Y);
finally
QPainter_setPen(Painter, Pen); //restore saved pen
QPen_destroy(Pen); //destroy the saved pen.
end;
end
else
begin
raise Exception.CreateFmt('TQtDeviceContext(CanvasHandle) %u : does not have vImage or Widget',[PtrUInt(CanvasHandle)]);
end;
end;
end;