[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