mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 15:19:29 +02:00
CairoCanvas: implements SetPenMode, from Anton Kavalenka, issue #35425
git-svn-id: trunk@61249 -
This commit is contained in:
parent
0fce68a18e
commit
83f87d971d
@ -26,7 +26,7 @@ type
|
|||||||
{ TCairoPrinterCanvas }
|
{ TCairoPrinterCanvas }
|
||||||
|
|
||||||
TCairoPrinterCanvas = class(TFilePrinterCanvas)
|
TCairoPrinterCanvas = class(TFilePrinterCanvas)
|
||||||
strict private
|
private
|
||||||
cr: Pcairo_t;
|
cr: Pcairo_t;
|
||||||
private
|
private
|
||||||
FLazClipRect: TRect;
|
FLazClipRect: TRect;
|
||||||
@ -82,6 +82,8 @@ type
|
|||||||
procedure CreateRegion; override;
|
procedure CreateRegion; override;
|
||||||
procedure RealizeAntialiasing; override;
|
procedure RealizeAntialiasing; override;
|
||||||
procedure DestroyHandle;
|
procedure DestroyHandle;
|
||||||
|
|
||||||
|
procedure SetPenMode;virtual;
|
||||||
public
|
public
|
||||||
SurfaceXDPI, SurfaceYDPI: Integer;
|
SurfaceXDPI, SurfaceYDPI: Integer;
|
||||||
constructor Create(APrinter : TPrinter); override;
|
constructor Create(APrinter : TPrinter); override;
|
||||||
@ -154,6 +156,7 @@ type
|
|||||||
|
|
||||||
TCairoPngCanvas = class(TCairoFileCanvas)
|
TCairoPngCanvas = class(TCairoFileCanvas)
|
||||||
protected
|
protected
|
||||||
|
procedure SetPenMode;override;
|
||||||
function CreateCairoHandle: HDC; override;
|
function CreateCairoHandle: HDC; override;
|
||||||
procedure DestroyCairoHandle; override;
|
procedure DestroyCairoHandle; override;
|
||||||
public
|
public
|
||||||
@ -226,16 +229,8 @@ end;
|
|||||||
|
|
||||||
{ TCairoPrinterCanvas }
|
{ TCairoPrinterCanvas }
|
||||||
|
|
||||||
procedure TCairoPrinterCanvas.SetPenProperties;
|
procedure TCairoPrinterCanvas.SetPenMode;
|
||||||
procedure SetDash(d: array of double);
|
|
||||||
begin
|
|
||||||
cairo_set_dash(cr, @d, High(d)+1, 0);
|
|
||||||
end;
|
|
||||||
var
|
|
||||||
cap: cairo_line_cap_t;
|
|
||||||
w: double;
|
|
||||||
begin
|
begin
|
||||||
SetSourceColor(Pen.Color);
|
|
||||||
case Pen.Mode of
|
case Pen.Mode of
|
||||||
pmBlack: begin
|
pmBlack: begin
|
||||||
SetSourceColor(clBlack);
|
SetSourceColor(clBlack);
|
||||||
@ -246,23 +241,24 @@ begin
|
|||||||
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
||||||
end;
|
end;
|
||||||
pmCopy: cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
pmCopy: cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
||||||
{ pmXor: cairo_set_operator(cr, CAIRO_OPERATOR_XOR);
|
|
||||||
pmNotXor: cairo_set_operator(cr, CAIRO_OPERATOR_XOR);
|
|
||||||
pmNop,
|
|
||||||
pmNot,
|
|
||||||
pmCopy,
|
|
||||||
pmNotCopy,
|
|
||||||
pmMergePenNot,
|
|
||||||
pmMaskPenNot,
|
|
||||||
pmMergeNotPen,
|
|
||||||
pmMaskNotPen,
|
|
||||||
pmMerge,
|
|
||||||
pmNotMerge,
|
|
||||||
pmMask,
|
|
||||||
pmNotMask,}
|
|
||||||
else
|
else
|
||||||
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCairoPrinterCanvas.SetPenProperties;
|
||||||
|
procedure SetDash(d: array of double);
|
||||||
|
begin
|
||||||
|
cairo_set_dash(cr, @d, High(d)+1, 0);
|
||||||
|
end;
|
||||||
|
var
|
||||||
|
cap: cairo_line_cap_t;
|
||||||
|
w: double;
|
||||||
|
begin
|
||||||
|
SetSourceColor(Pen.Color);
|
||||||
|
|
||||||
|
SetPenMode;
|
||||||
|
|
||||||
w := Pen.Width;
|
w := Pen.Width;
|
||||||
if w = 0 then
|
if w = 0 then
|
||||||
w := 0.5;
|
w := 0.5;
|
||||||
@ -1624,6 +1620,16 @@ end;
|
|||||||
|
|
||||||
{ TCairoPngCanvas }
|
{ TCairoPngCanvas }
|
||||||
|
|
||||||
|
procedure TCairoPngCanvas.SetPenMode;
|
||||||
|
begin
|
||||||
|
inherited SetPenMode;
|
||||||
|
{ bitwise color operators make sense only for raster graphics }
|
||||||
|
case Pen.Mode of
|
||||||
|
pmXor: cairo_set_operator(cr, CAIRO_OPERATOR_XOR);
|
||||||
|
pmNotXor: cairo_set_operator(cr, CAIRO_OPERATOR_XOR);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TCairoPngCanvas.CreateCairoHandle: HDC;
|
function TCairoPngCanvas.CreateCairoHandle: HDC;
|
||||||
var
|
var
|
||||||
acr: Pcairo_t;
|
acr: Pcairo_t;
|
||||||
@ -1642,7 +1648,10 @@ end;
|
|||||||
|
|
||||||
procedure TCairoPngCanvas.DestroyCairoHandle;
|
procedure TCairoPngCanvas.DestroyCairoHandle;
|
||||||
begin
|
begin
|
||||||
cairo_surface_write_to_png(sf, PChar(FOutputFileName));
|
if Assigned(fStream) then
|
||||||
|
cairo_surface_write_to_png_stream(sf, @WriteToStream, fStream)
|
||||||
|
else
|
||||||
|
cairo_surface_write_to_png(sf, PChar(FOutputFileName));
|
||||||
inherited DestroyCairoHandle;
|
inherited DestroyCairoHandle;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user