X-Windows

CD - Canvas Draw

XRender Base Driver

This driver represents a basic driver for all system-dependent drivers implemented in the X-Windows system using the XRender extension. The implementation uses the XRender and Xft API functions.

The main motivation for the use of XRender was transparency for all the primitives. Beyond that we got other features like anti-aliasing, gradient filling and transformations.

This driver still does not completely replace the X-Windows base driver, because XRender does not have support for XOR and for line styles.

So we let the programmer to choose what to use. We created the function cdUseContextPlus that allows to activate or to deactivate the use of X-Render for the available X-Windows based drivers. This function affects only the cdCreateCanvas function call, once created the canvas will be always a XRender canvas. In fact the function affects primary the definitions CD_NATIVEWINDOW, CD_IMAGE and CD_DBUFFER, because they are function calls and not static defines.

Using XRender 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 X-Windows canvas.

To enable the use of XRender based drivers you must call the initialization function cdInitContextPlus() once and link to the libraries "cdxrender", "Xrender" and "Xft". Also the libraries "Xrender" and "Xft" must be installed in your system. The XRender extension must be available in the X-Windows server for the driver to work.

Currently, pre-compiled binaries are available only for Linux*, SunOS510x86, and FreeBSD54.

In CDLUA it is not necessary any additional initialization.

Behavior of Functions

Control 

  • Play: does nothing, returns CD_ERROR.

Coordinate System and Clipping

  • UpdateYAxis: the orientation of axis Y is the opposite to its orientation in the CD library. Except when using transformations.

Primitives

  • Line: simulated using the client's Poly.
  • Text: Generic transformation matrix affects only the position of the text. Complex clipping regions can not contain text regions.
  • Begin: CD_BEZIER is simulated with lines.
  • Rect: simulated using the client's Line.
  • Arc: simulated using the client's Line.
  • Sector: simulated using the client's Poly.
  • Chord: simulated using the client's Poly
  • Box: simulated using the client's Poly.

Attributes

  • LineWidth: the driver will use a polygon that fits to the line extents, even when linewidth==1.
  • LineStyle: NOT supported.
  • Pattern: each pixel can contain transparency information.
  • NativeFont: also accepts the X-Windows font string format. You can use program xfontsel to select a font and obtain the string. For ex: "-*-times-bold-r-*-*-24-*-*-*-*-*-*-*" (equivalent of Font("Times", CD_BOLD, -24).
  • Font: font support is implemented using the Xft library. Internally the Xft library uses the Freetype library.

Colors

  • Use the X-Windows base driver support for colors.

Client and Server Images

  • All functions use the X-Windows base driver functions.

Exclusive Attributes

  • "GC":  returns the X11 graphics context (get only). In Lua is returned as a user data.
  • "ROTATE":  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). In this driver will change the current transformation matrix, if removed will reset the current transformation matrix.
  • "ANTIALIAS": controls the use of anti-aliasing for the text, image zoom and line drawing primitives. Assumes values "1" (active) and "0" (inactive). Default value: "1".
  • "LINEGRADIENT": 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). (available only if Xrender version >= 0.10)
  • "XRENDERVERSION": returns a string with the XRender version number. It is empty if the XRender extension is not available in the X-Windows server.