<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
<!ENTITY version SYSTEM "version.xml">
]>
<refentry id="cairo-xlib-surface">
<refmeta>
<refentrytitle role="top_of_page" id="cairo-xlib-surface.top_of_page">XLib Surfaces</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>CAIRO Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>XLib Surfaces</refname>
<refpurpose>X Window System rendering using XLib</refpurpose>
</refnamediv>

<refsynopsisdiv id="cairo-xlib-surface.synopsis" role="synopsis">
<title role="synopsis.title">Synopsis</title>

<synopsis>
#define             <link linkend="CAIRO-HAS-XLIB-SURFACE--CAPS">CAIRO_HAS_XLIB_SURFACE</link>
<link linkend="cairo-surface-t">cairo_surface_t</link> *   <link linkend="cairo-xlib-surface-create">cairo_xlib_surface_create</link>           (<link linkend="Display">Display</link> *dpy,
                                                         <link linkend="Drawable">Drawable</link> drawable,
                                                         <link linkend="Visual">Visual</link> *visual,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);
<link linkend="cairo-surface-t">cairo_surface_t</link> *   <link linkend="cairo-xlib-surface-create-for-bitmap">cairo_xlib_surface_create_for_bitmap</link>
                                                        (<link linkend="Display">Display</link> *dpy,
                                                         <link linkend="Pixmap">Pixmap</link> bitmap,
                                                         <link linkend="Screen">Screen</link> *screen,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);
<link linkend="void">void</link>                <link linkend="cairo-xlib-surface-set-size">cairo_xlib_surface_set_size</link>         (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);
<link linkend="Display">Display</link> *           <link linkend="cairo-xlib-surface-get-display">cairo_xlib_surface_get_display</link>      (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="Screen">Screen</link> *            <link linkend="cairo-xlib-surface-get-screen">cairo_xlib_surface_get_screen</link>       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="void">void</link>                <link linkend="cairo-xlib-surface-set-drawable">cairo_xlib_surface_set_drawable</link>     (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface,
                                                         <link linkend="Drawable">Drawable</link> drawable,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);
<link linkend="Drawable">Drawable</link>            <link linkend="cairo-xlib-surface-get-drawable">cairo_xlib_surface_get_drawable</link>     (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="Visual">Visual</link> *            <link linkend="cairo-xlib-surface-get-visual">cairo_xlib_surface_get_visual</link>       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="int">int</link>                 <link linkend="cairo-xlib-surface-get-width">cairo_xlib_surface_get_width</link>        (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="int">int</link>                 <link linkend="cairo-xlib-surface-get-height">cairo_xlib_surface_get_height</link>       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
<link linkend="int">int</link>                 <link linkend="cairo-xlib-surface-get-depth">cairo_xlib_surface_get_depth</link>        (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);
</synopsis>
</refsynopsisdiv>









<refsect1 id="cairo-xlib-surface.description" role="desc">
<title role="desc.title">Description</title>
<para>
The XLib surface is used to render cairo graphics to X Window System
windows and pixmaps using the XLib library.
</para>
<para>
Note that the XLib surface automatically takes advantage of X render extension
if it is available.
</para>
</refsect1>

<refsect1 id="cairo-xlib-surface.details" role="details">
<title role="details.title">Details</title>
<refsect2 id="CAIRO-HAS-XLIB-SURFACE--CAPS" role="macro">
<title>CAIRO_HAS_XLIB_SURFACE</title>
<indexterm zone="CAIRO-HAS-XLIB-SURFACE--CAPS"><primary sortas="CAIRO_HAS_XLIB_SURFACE">CAIRO_HAS_XLIB_SURFACE</primary></indexterm><programlisting>#define CAIRO_HAS_XLIB_SURFACE 1
</programlisting>
<para>
Defined if the Xlib surface backend is available.
This macro can be used to conditionally compile backend-specific code.
</para></refsect2>
<refsect2 id="cairo-xlib-surface-create" role="function">
<title>cairo_xlib_surface_create ()</title>
<indexterm zone="cairo-xlib-surface-create"><primary sortas="cairo_xlib_surface_create">cairo_xlib_surface_create</primary></indexterm><programlisting><link linkend="cairo-surface-t">cairo_surface_t</link> *   cairo_xlib_surface_create           (<link linkend="Display">Display</link> *dpy,
                                                         <link linkend="Drawable">Drawable</link> drawable,
                                                         <link linkend="Visual">Visual</link> *visual,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);</programlisting>
<para>
Creates an Xlib surface that draws to the given drawable.
The way that colors are represented in the drawable is specified
by the provided visual.
</para>
<para>
Note: If <parameter>drawable</parameter> is a Window, then the function
<link linkend="cairo-xlib-surface-set-size"><function>cairo_xlib_surface_set_size()</function></link> must be called whenever the size of the
window changes.
</para>
<para>
When <parameter>drawable</parameter> is a Window containing child windows then drawing to
the created surface will be clipped by those child windows.  When
the created surface is used as a source, the contents of the
children will be included.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>dpy</parameter>&#160;:</term>
<listitem><simpara> an X Display
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>drawable</parameter>&#160;:</term>
<listitem><simpara> an X Drawable, (a Pixmap or a Window)
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>visual</parameter>&#160;:</term>
<listitem><simpara> the visual to use for drawing to <parameter>drawable</parameter>. The depth
         of the visual must match the depth of the drawable.
         Currently, only TrueColor visuals are fully supported.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>width</parameter>&#160;:</term>
<listitem><simpara> the current width of <parameter>drawable</parameter>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>height</parameter>&#160;:</term>
<listitem><simpara> the current height of <parameter>drawable</parameter>.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created surface
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="cairo-xlib-surface-create-for-bitmap" role="function">
<title>cairo_xlib_surface_create_for_bitmap ()</title>
<indexterm zone="cairo-xlib-surface-create-for-bitmap"><primary sortas="cairo_xlib_surface_create_for_bitmap">cairo_xlib_surface_create_for_bitmap</primary></indexterm><programlisting><link linkend="cairo-surface-t">cairo_surface_t</link> *   cairo_xlib_surface_create_for_bitmap
                                                        (<link linkend="Display">Display</link> *dpy,
                                                         <link linkend="Pixmap">Pixmap</link> bitmap,
                                                         <link linkend="Screen">Screen</link> *screen,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);</programlisting>
<para>
Creates an Xlib surface that draws to the given bitmap.
This will be drawn to as a <link linkend="CAIRO-FORMAT-A1--CAPS"><literal>CAIRO_FORMAT_A1</literal></link> object.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>dpy</parameter>&#160;:</term>
<listitem><simpara> an X Display
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
<listitem><simpara> an X Drawable, (a depth-1 Pixmap)
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>screen</parameter>&#160;:</term>
<listitem><simpara> the X Screen associated with <parameter>bitmap</parameter>
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>width</parameter>&#160;:</term>
<listitem><simpara> the current width of <parameter>bitmap</parameter>.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>height</parameter>&#160;:</term>
<listitem><simpara> the current height of <parameter>bitmap</parameter>.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created surface
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="cairo-xlib-surface-set-size" role="function">
<title>cairo_xlib_surface_set_size ()</title>
<indexterm zone="cairo-xlib-surface-set-size"><primary sortas="cairo_xlib_surface_set_size">cairo_xlib_surface_set_size</primary></indexterm><programlisting><link linkend="void">void</link>                cairo_xlib_surface_set_size         (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);</programlisting>
<para>
Informs cairo of the new size of the X Drawable underlying the
surface. For a surface created for a Window (rather than a Pixmap),
this function must be called each time the size of the window
changes. (For a subwindow, you are normally resizing the window
yourself, but for a toplevel window, it is necessary to listen for
ConfigureNotify events.)
</para>
<para>
A Pixmap can never change size, so it is never necessary to call
this function on a surface created for a Pixmap.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> for the XLib backend
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>width</parameter>&#160;:</term>
<listitem><simpara> the new width of the surface
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>height</parameter>&#160;:</term>
<listitem><simpara> the new height of the surface
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="cairo-xlib-surface-get-display" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_display ()</title>
<indexterm zone="cairo-xlib-surface-get-display" role="1.2"><primary sortas="cairo_xlib_surface_get_display">cairo_xlib_surface_get_display</primary></indexterm><programlisting><link linkend="Display">Display</link> *           cairo_xlib_surface_get_display      (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the X Display for the underlying X Drawable.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the display.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-get-screen" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_screen ()</title>
<indexterm zone="cairo-xlib-surface-get-screen" role="1.2"><primary sortas="cairo_xlib_surface_get_screen">cairo_xlib_surface_get_screen</primary></indexterm><programlisting><link linkend="Screen">Screen</link> *            cairo_xlib_surface_get_screen       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the X Screen for the underlying X Drawable.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the screen.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-set-drawable" role="function">
<title>cairo_xlib_surface_set_drawable ()</title>
<indexterm zone="cairo-xlib-surface-set-drawable"><primary sortas="cairo_xlib_surface_set_drawable">cairo_xlib_surface_set_drawable</primary></indexterm><programlisting><link linkend="void">void</link>                cairo_xlib_surface_set_drawable     (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface,
                                                         <link linkend="Drawable">Drawable</link> drawable,
                                                         <link linkend="int">int</link> width,
                                                         <link linkend="int">int</link> height);</programlisting>
<para>
Informs cairo of a new X Drawable underlying the
surface. The drawable must match the display, screen
and format of the existing drawable or the application
will get X protocol errors and will probably terminate.
No checks are done by this function to ensure this
compatibility.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-surface-t"><type>cairo_surface_t</type></link> for the XLib backend
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>drawable</parameter>&#160;:</term>
<listitem><simpara> the new drawable for the surface
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>width</parameter>&#160;:</term>
<listitem><simpara> the width of the new drawable
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>height</parameter>&#160;:</term>
<listitem><simpara> the height of the new drawable
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2 id="cairo-xlib-surface-get-drawable" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_drawable ()</title>
<indexterm zone="cairo-xlib-surface-get-drawable" role="1.2"><primary sortas="cairo_xlib_surface_get_drawable">cairo_xlib_surface_get_drawable</primary></indexterm><programlisting><link linkend="Drawable">Drawable</link>            cairo_xlib_surface_get_drawable     (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the underlying X Drawable used for the surface.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the drawable.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-get-visual" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_visual ()</title>
<indexterm zone="cairo-xlib-surface-get-visual" role="1.2"><primary sortas="cairo_xlib_surface_get_visual">cairo_xlib_surface_get_visual</primary></indexterm><programlisting><link linkend="Visual">Visual</link> *            cairo_xlib_surface_get_visual       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the X Visual used for underlying X Drawable.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the visual.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-get-width" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_width ()</title>
<indexterm zone="cairo-xlib-surface-get-width" role="1.2"><primary sortas="cairo_xlib_surface_get_width">cairo_xlib_surface_get_width</primary></indexterm><programlisting><link linkend="int">int</link>                 cairo_xlib_surface_get_width        (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the width of the X Drawable underlying the surface in pixels.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the width of the surface in pixels.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-get-height" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_height ()</title>
<indexterm zone="cairo-xlib-surface-get-height" role="1.2"><primary sortas="cairo_xlib_surface_get_height">cairo_xlib_surface_get_height</primary></indexterm><programlisting><link linkend="int">int</link>                 cairo_xlib_surface_get_height       (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the height of the X Drawable underlying the surface in pixels.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the height of the surface in pixels.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>
<refsect2 id="cairo-xlib-surface-get-depth" role="function" condition="since:1.2">
<title>cairo_xlib_surface_get_depth ()</title>
<indexterm zone="cairo-xlib-surface-get-depth" role="1.2"><primary sortas="cairo_xlib_surface_get_depth">cairo_xlib_surface_get_depth</primary></indexterm><programlisting><link linkend="int">int</link>                 cairo_xlib_surface_get_depth        (<link linkend="cairo-surface-t">cairo_surface_t</link> *surface);</programlisting>
<para>
Get the number of bits used to represent each pixel value.</para>
<para>
</para><variablelist role="params">
<varlistentry><term><parameter>surface</parameter>&#160;:</term>
<listitem><simpara> a <link linkend="cairo-xlib-surface-t"><type>cairo_xlib_surface_t</type></link>
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the depth of the surface in bits.

</simpara></listitem></varlistentry>
</variablelist><para role="since">Since 1.2</para></refsect2>

</refsect1>



<refsect1 id="cairo-xlib-surface.see-also">
<title>See Also</title>
<para>
<itemizedlist>
<listitem><link linkend="cairo-surface-t"><type>cairo_surface_t</type></link></listitem>
</itemizedlist>
</para>
</refsect1>

</refentry>
