[Lazarus] cairocanvas_pkg compatibility issue
Giuliano Colla
giuliano.colla at fastwebnet.it
Fri Jun 20 12:30:53 CEST 2014
Hi Lazarus developers,
after fighting some time for compiling Lazarus bigide under CentOs 5, I
found that the villain in cairocanvas_pkg.
Lazreports pulls in Printers4lazarus, which in turn pulls in
cairocanvas_pkg, which, just in one place requires cairo_clip_extents,
which is available only since cairo 1.4, while the widely used CentOs 5
provides cairo 1.2. The problem is detected only when linking.
Looking at the code, it turns out that cairo_clip_extents is used to
provide the clipping rectangle (converted from cairo coordinates to
Lazarus coordinates).
But as the clipping rectangle is supplied in Lazarus coordinates, to
start with, and is kept in a TCairoPrinterCanvas field, returning just
the stored field should be enough, thus eliminating the annoying dependency.
My suggested patch:
function TCairoPrinterCanvas.GetClipRect: TRect;
{$ifdef cairo_has_clip_extents} // only available from 1.4
var
x1,y1,x2,y2: double;
begin
RequiredState([csHandleValid]);
// it doesn't matter what the clip is in use, default or user
// this returns always the current clip
cairo_clip_extents(cr, @x1, @y1, @x2, @y2);
result.Left:=round(x1/ScaleX);
result.Top:=round(y1/ScaleY);
result.Right:=round(x2/ScaleX);
result.Bottom:=round(y2/ScaleY);
end;
{$else}
begin
Result := FLazClipRect;
end;
{$endif}
Do I miss something important?
Giuliano
More information about the Lazarus
mailing list