Gtk3: we must save and restore BkMode when brush fill with opaque color is enabled.

This commit is contained in:
zeljan1 2025-01-14 13:24:52 +01:00
parent 0cb1196d34
commit b8df3cbaa3

View File

@ -2026,6 +2026,7 @@ end;
procedure TGtk3DeviceContext.drawEllipse(x, y, w, h: Integer; AFill, ABorder: Boolean); procedure TGtk3DeviceContext.drawEllipse(x, y, w, h: Integer; AFill, ABorder: Boolean);
var var
save_matrix: Tcairo_matrix_t; save_matrix: Tcairo_matrix_t;
SaveMode:Integer;
begin begin
cairo_save(pcr); cairo_save(pcr);
try try
@ -2045,9 +2046,13 @@ begin
cairo_close_path(pcr); cairo_close_path(pcr);
if AFill then if AFill then
begin begin
SaveMode := FBkMode;
FBkMode := OPAQUE;
ApplyBrush; ApplyBrush;
cairo_fill_preserve(pcr); cairo_fill_preserve(pcr);
FBkMode := SaveMode;
end; end;
cairo_set_matrix(pcr, @save_matrix);
finally finally
cairo_restore(pcr); cairo_restore(pcr);
end; end;
@ -2289,6 +2294,7 @@ end;
procedure TGtk3DeviceContext.fillRect(x, y, w, h: Integer; ABrush: HBRUSH); procedure TGtk3DeviceContext.fillRect(x, y, w, h: Integer; ABrush: HBRUSH);
var var
ATempBrush: TGtk3Brush; ATempBrush: TGtk3Brush;
SaveMode:Integer;
begin begin
{$ifdef VerboseGtk3DeviceContext} {$ifdef VerboseGtk3DeviceContext}
//DebugLn('TGtk3DeviceContext.fillRect ',Format('x %d y %d w %d h %d',[x, y, w, h])); //DebugLn('TGtk3DeviceContext.fillRect ',Format('x %d y %d w %d h %d',[x, y, w, h]));
@ -2300,7 +2306,8 @@ begin
if ABrush <> 0 then if ABrush <> 0 then
begin begin
ATempBrush := FCurrentBrush; ATempBrush := FCurrentBrush;
fBkMode := OPAQUE; SaveMode := FBkMode;
FBkMode := OPAQUE;
CurrentBrush:= TGtk3Brush(ABrush); CurrentBrush:= TGtk3Brush(ABrush);
end; end;
@ -2314,7 +2321,10 @@ begin
cairo_stroke(pcr); cairo_stroke(pcr);
if ABrush <> 0 then if ABrush <> 0 then
begin
CurrentBrush:= ATempBrush; CurrentBrush:= ATempBrush;
FBkMode := SaveMode;
end;
finally finally
cairo_restore(pcr); cairo_restore(pcr);
end; end;