mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 23:09:16 +02:00
LCL-GTK3: Improve canvas operations more. Issue #36374, patch from Alexey Tor.
git-svn-id: trunk@62382 -
This commit is contained in:
parent
cd1e5b70a9
commit
d159ea93c6
@ -1329,18 +1329,20 @@ procedure TGtk3DeviceContext.drawRect(x1, y1, w, h: Integer; const AFill, ABorde
|
|||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(Widget);
|
||||||
try
|
try
|
||||||
|
cairo_rectangle(Widget, x1, y1, w - 1, h - 1);
|
||||||
|
|
||||||
if AFill then
|
if AFill then
|
||||||
begin
|
begin
|
||||||
cairo_rectangle(Widget, x1, y1, w - 1, h - 1);
|
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_fill(Widget);
|
cairo_fill_preserve(Widget);
|
||||||
end;
|
end;
|
||||||
if ABorder then
|
if ABorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_rectangle(Widget, x1, y1, w - 1, h - 1);
|
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(Widget);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
cairo_new_path(Widget);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(Widget);
|
||||||
end;
|
end;
|
||||||
@ -1588,28 +1590,26 @@ const
|
|||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(Widget);
|
||||||
try
|
try
|
||||||
|
// add offset so the center of the pixel is used
|
||||||
|
cairo_move_to(Widget, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
||||||
|
for i := 1 to NumPts-1 do
|
||||||
|
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
||||||
|
cairo_close_path(Widget);
|
||||||
|
|
||||||
if AFill then
|
if AFill then
|
||||||
begin
|
begin
|
||||||
// first apply the fill because the line is drawn over the filled area after
|
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_set_fill_rule(Widget, cairo_fill_rule_t(FillRule));
|
cairo_set_fill_rule(Widget, cairo_fill_rule_t(FillRule));
|
||||||
// + Offset is so the center of the pixel is used.
|
cairo_fill_preserve(Widget);
|
||||||
cairo_move_to(Widget, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
|
||||||
for i := 1 to NumPts-1 do
|
|
||||||
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
|
||||||
cairo_close_path(Widget);
|
|
||||||
cairo_fill(Widget);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if ABorder then
|
if ABorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_move_to(Widget, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
|
||||||
for i := 1 to NumPts-1 do
|
|
||||||
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
|
||||||
cairo_close_path(Widget);
|
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(Widget);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
cairo_new_path(Widget);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(Widget);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user