efl/src/lib/ecore_x/xcb/ecore_xcb_pixmap.c

130 lines
3.8 KiB
C

#include "ecore_xcb_private.h"
/**
* @defgroup Ecore_X_Pixmap_Group X Pixmap Functions
* @ingroup Ecore
*
* Functions that operate on pixmaps.
*/
/**
* Creates a new pixmap.
* @param win Window used to determine which screen of the display the
* pixmap should be created on. If 0, the default root window
* is used.
* @param w Width of the new pixmap.
* @param h Height of the new pixmap.
* @param dep Depth of the pixmap. If 0, the default depth of the default
* screen is used.
* @return New pixmap.
* @ingroup Ecore_X_Pixmap_Group
*/
EAPI Ecore_X_Pixmap
ecore_x_pixmap_new(Ecore_X_Window win,
int w,
int h,
int dep)
{
Ecore_X_Pixmap pmap;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
if (win == 0) win = ((xcb_screen_t *)_ecore_xcb_screen)->root;
if (dep == 0) dep = ((xcb_screen_t *)_ecore_xcb_screen)->root_depth;
pmap = xcb_generate_id(_ecore_xcb_conn);
xcb_create_pixmap(_ecore_xcb_conn, dep, pmap, win, w, h);
// ecore_x_flush();
return pmap;
}
/**
* Deletes the reference to the given pixmap.
*
* If no other clients have a reference to the given pixmap, the server
* will destroy it.
*
* @param pmap The given pixmap.
* @ingroup Ecore_X_Pixmap_Group
*/
EAPI void
ecore_x_pixmap_free(Ecore_X_Pixmap pmap)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
xcb_free_pixmap(_ecore_xcb_conn, pmap);
// ecore_x_flush();
}
/**
* Pastes a rectangular area of the given pixmap onto the given drawable.
* @param pmap The given pixmap.
* @param dest The given drawable.
* @param gc The graphics context which governs which operation will
* be used to paste the area onto the drawable.
* @param sx The X position of the area on the pixmap.
* @param sy The Y position of the area on the pixmap.
* @param w The width of the area.
* @param h The height of the area.
* @param dx The X position at which to paste the area on @p dest.
* @param dy The Y position at which to paste the area on @p dest.
* @ingroup Ecore_X_Pixmap_Group
*/
EAPI void
ecore_x_pixmap_paste(Ecore_X_Pixmap pmap,
Ecore_X_Drawable dest,
Ecore_X_GC gc,
int sx,
int sy,
int w,
int h,
int dx,
int dy)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
xcb_copy_area(_ecore_xcb_conn, pmap, dest, gc, sx, sy, dx, dy, w, h);
// ecore_x_flush();
}
/**
* Retrieves the size of the given pixmap.
* @param pmap The given pixmap.
* @param x Pointer to an integer in which to store the X position.
* @param y Pointer to an integer in which to store the Y position.
* @param w Pointer to an integer in which to store the width.
* @param h Pointer to an integer in which to store the height.
* @ingroup Ecore_X_Pixmap_Group
*/
EAPI void
ecore_x_pixmap_geometry_get(Ecore_X_Pixmap pmap,
int *x,
int *y,
int *w,
int *h)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
if (pmap)
ecore_x_drawable_geometry_get(pmap, x, y, w, h);
}
/**
* Retrieves the depth of the given pixmap.
* @param pmap The given pixmap.
* @return The depth of the pixmap.
* @ingroup Ecore_X_Pixmap_Group
*/
EAPI int
ecore_x_pixmap_depth_get(Ecore_X_Pixmap pmap)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
return ecore_x_drawable_depth_get(pmap);
}