<!doctype HTML PUBLIC "-//IETF//DTD HTML//EN"> <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> <head> <meta http-equiv="Content-Language" content="en-us"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>CAIRO</title> <link rel="stylesheet" type="text/css" href="../../style.css"> <style type="text/css"> .style1 { font-family: Courier; } .style3 { text-decoration: underline; } </style> </head> <body> <h2>CAIRO Base Driver</h2> <p>This driver represents a basic driver for all system-dependent drivers implemented in the X-Windows and MS-Windows systems. The implementation uses the <a href="http://cairographics.org/">Cairo</a> and <a href="http://library.gnome.org/devel/pango/">Pango</a> functions. This driver can be compiled and used in all systems Cairo is supported. The drivers <b>Native Window</b>, <b>Image</b>, <b>EMF</b>, <b>Printer</b> and <b>Double Buffer</b> were implemented.</p> <p>It can be used as the context plus driver of the GDI, GDK and X-Win based drivers. But its primary focus is the GDK base driver.</p> <p>The main motivation for the use of Cairo was transparency for all the primitives. Beyond that we got other features like anti-aliasing, gradient filling, transformations and other back-ends (support to rendering: PDF, PS, SVG and IMAGERGB surfaces).</p> <p>This driver still does not completely replace the X-Windows, GDK and GDI Windows base drivers, because Cairo does not have support for bitwise XOR operations and for complex clipping regions.</p> <p>So we let the programmer to choose what to use. We created the function <font face="Courier"><strong> <a href="../func/init.html#cdUseContextPlus">cdUseContextPlus</a></strong></font> that allows to activate or to deactivate the use of Cairo for the available GDK, Win32 or X-Win based drivers. This function affects only the <font face="Courier"><strong>cdCreateCanvas</strong></font> function call, once created the canvas will be always a Cairo canvas. In fact the function affects primary the definitions <font face="Courier"><strong>CD_NATIVEWINDOW</strong></font>, <strong><span style="font-family: Courier">CD_IMAGE</span></strong>, <strong><span style="font-family: Courier">CD_EMF</span></strong>, <strong><span style="font-family: Courier">CD_PRINTER</span></strong> and <strong> <span style="font-family: Courier">CD_DBUFFER</span></strong>, because they are function calls and not static defines. <strong><span style="font-family: Courier">CD_PRINTER</span></strong> can be used with the GDK base driver in UNIX, or with the Win32 base driver in Windows. <strong><span style="font-family: Courier">CD_EMF </span></strong> can be used in Windows only, with GDK or Win32 base drivers.</p> <p>Using Cairo it is allowed to create more that one canvas at the same time for the same Window. And they can co-exist with a standard GDK, Win32 or X-Windows canvas.</p> <p>To enable the use of Cairo based drivers you must call the initialization function <font face="Courier"><strong> <a href="../func/init.html#cdInitContextPlus">cdInitContextPlus</a></strong></font> once, and do not need to link with any additional library when using the GDK base driver. But when using with the GDI and X-Win base drivers you need to link to the libraries "<strong>cdcairo</strong>" and "<strong>cairo</strong>".</p> <p>Also the Cairo library must be installed in your system.</p> <p>In CDLua it is not necessary any additional initialization, and <strong>require"cdluacontextplus"</strong> can be used when using dynamic libraries. But it is available only in Linux and only for the GDK base driver.</p> <p>As an alternative you can use <strong>require</strong>"<strong>cdluacairo"</strong>, but there are some restrictions: in Windows only the GDI base driver can be used; in Linux only the GDK base driver can be used; in other UNICES only the X-Win base driver can be used.</p> <h3>Extra Drivers (cdcairo.h)</h3> <p>Only available in Lua when <strong>require"cdluacairo"</strong> is used.</p> <h4>CD_CAIRO_PS - PostScript Driver</h4> <p>Similar to <a href="ps.html">CD_PS</a>, uses the same creation parameters. But margins are not supported and Postscript level can be 2 (parameter -2) or 3 (parameter -3). The "CMD" attribute is not supported, and the new attribute "DSCCOMMENT" accepts a string that is saved as a DSC comment.</p> <h4>CD_CAIRO_PDF - PDF Driver</h4> <p>Similar to <a href="pdf.html">CD_PDF</a>, uses the same creation parameters. The driver also does not depends on the PDFLib. The additional attributes "OPACITY", "PATTERN", "PDF", "PDFLIBVERSION" and the description strings, are not supported.</p> <h4>CD_CAIRO_SVG - Scalable Vector Graphics Driver</h4> <p>Similar to <a href="svg.html">CD_SVG</a>, uses the same creation parameters. The additional attributes "OPACITY" and "CMD" are not supported.</p> <h4>CD_CAIRO_IMAGERGB - RGB Client Image Driver</h4> <p>Similar to <a href="irgb.html">CD_IMAGERGB</a>, uses <span class="style3"> almost</span> the same creation parameters. The main difference is that the data pointers are packed in RGBARGBARGBA... format. So it is used only 1 pointer for data, instead of 3. Also the attributes "REDIMAGE", "GREENIMAGE", "BLUEIMAGE" and "ALPHAIMAGE are not supported and replaced by the "RGBDATA" attribute. There are also two new attributes, "STRIDE" that returns the line size in bytes, when data is specified during creation then stride is always width*32. Even when there is not alpha channel, data is stored in 32 bits per pixel. Image data is also organized in top-bottom orientation, it means the data pointer points to the top-left corner. And the "WRITE2PNG" attribute that accepts a filename to save the image as a PNG file (this does not depends of the <a href="http://www.tecgraf.puc-rio.br/im">IM</a> library).</p> <h3>Behavior of Functions</h3> <h4>Control </h4> <ul> <li><a href="../func/other.html#cdPlay"> <font face="Courier"><strong>Play</strong></font></a>: does nothing, returns <font face="Courier">CD_ERROR</font>. </li> </ul> <h4>Coordinate System and Clipping </h4> <ul> <li> <a href="../func/coordinates.html#cdUpdateYAxis"> <font face="Courier"><strong>UpdateYAxis</strong></font></a>: the orientation of axis Y is the opposite to its orientation in the CD library.</li> </ul> <h4>Primitives</h4> <ul> <li>Floating point primitives are supported.</li> </ul> <h4>Attributes </h4> <ul> <li> <a href="http://www.tecgraf.puc-rio.br/cd/en/func/attributes.html#cdWriteMode"> <font face="Courier"><strong>WriteMode</strong></font></a>: does nothing. There is no support for XOR or NOT_XOR.</li> <li> <a href="../func/text.html#cdNativeFont"> <font face="Courier"><strong>NativeFont</strong></font></a>: also accepts the X-Windows font string format.</li> <li><a href="../func/text.html#cdFont"> <font face="Courier"><strong>Font</strong></font></a>: "Courier" is mapped to "Monospace", "Helvetica" is mapped to "Sans", and "Times" is mapped to "Serif". Underline and Strikeout are supported.</li> </ul> <h4>Colors </h4> <ul> <li> <a href="../func/color.html#cdPalette"> <font face="Courier"><strong>Palette</strong></font></a>: NOT supported.</li> </ul> <h4>Exclusive Attributes</h4> <ul> <li>"<b><font face="Courier">ANTIALIAS</font></b>": controls the use of anti-aliasing for the text and drawing shapes. Assumes values "1" (active) and "0" (inactive). Default value: "1".</li> </ul> <ul> <li>"<b><font face="Courier">CAIRODC</font></b>": returns the Cairo drawing context (get only). In Lua is returned as a user data.</li> </ul> <ul> <li><b><font face="Courier">"CAIROVERSION": </font></b>returns a string with the Cairo version number. It is empty if the Cairo is not available.</li> </ul> <ul> <li><strong><span style="font-family: Courier">"HATCHBOXSIZE"</span></strong>: defines the size of smallest hatch box pattern. This affects the spacing between the hatch lines. The value passed must be a string containing an integer ("%d"). If the value of the attribute passed is NULL, the value is rest to the default. When consulted returns the current value ("%d"). Default: "8".</li> </ul> <ul> <li>"<b><font face="Courier">IMGINTERP</font></b>": changes how interpolation is used in image scale. Can be "BEST" (highest-quality), "BILINEAR" (linear interpolation), "GOOD" (quality similar to BILINEAR), "NEAREST" (nearest-neighbor filtering) or "FAST" (quality similar to NEAREST). Default: "GOOD".</li> </ul> <ul> <li>"<b><font face="Courier">LINEGRADIENT</font></b>": defines a filled interior style that uses a line gradient between two colors. It uses 2 points ("%d %d %d %d" = x1 y1 x2 y2), one for the starting point using (using the foreground color), and another one for the end point (using the background color).</li> </ul> <ul> <li>"<span class="style1"><strong>PATTERNIMAGE</strong></span>": defines a filled interior style using a server image as pattern. Data must be a server image handle created with he Cairo base driver.</li> </ul> <ul> <li>"<b><font face="Courier">POLYHOLE</font></b>": defines the index of the vertex where there is a hole in a closed polygon. It will affect the next <strong>cdEnd</strong>. Can be called several times between <strong>cdBegin</strong> and <strong>cdEnd</strong> to define holes. The value passed must be a string containing an integer ("%d"). If the value of the attribute passed is NULL, all holes will no longer be considered. When consulted returns the current number of holes ("%d"). It can have a maximum of 500 holes. Default: NULL.</li> </ul> <ul> <li>"<b><font face="Courier">RADIALGRADIENT</font></b>": defines a filled interior style that uses a radial gradient between two colors. It uses 2 points and 2 radius ("%d %d %g %d %d %g" = x1 y1 rad1 x2 y2 rad2), one for the starting point using (using the foreground color), and another one for the end point (using the background color).</li> </ul> <ul> <li>"<b><font face="Courier">ROTATE</font></b>": allows the usage of 1 angle and 1 coordinate (x, y), that define a global rotation transformation centered in the specified coordinate. Use 1 real and 2 integer values inside a string ("%g %d %d" = angle x y). Can not be set if a transformation is already set.</li> </ul> </body> </html>