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

157 lines
3.5 KiB
C
Raw Normal View History

#include "ecore_xcb_private.h"
# ifdef ECORE_XCB_DAMAGE
# include <xcb/damage.h>
# endif
/* local variables */
static Eina_Bool _damage_avail = EINA_FALSE;
/* external variables */
int _ecore_xcb_event_damage = -1;
void
_ecore_xcb_damage_init(void)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
2010-08-02 11:54:27 -07:00
#ifdef ECORE_XCB_DAMAGE
xcb_prefetch_extension_data(_ecore_xcb_conn, &xcb_damage_id);
#endif
}
void
_ecore_xcb_damage_finalize(void)
{
#ifdef ECORE_XCB_DAMAGE
const xcb_query_extension_reply_t *ext_reply;
#endif
LOGFN(__FILE__, __LINE__, __FUNCTION__);
2010-08-02 11:54:27 -07:00
#ifdef ECORE_XCB_DAMAGE
ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_damage_id);
if ((ext_reply) && (ext_reply->present))
{
xcb_damage_query_version_cookie_t cookie;
xcb_damage_query_version_reply_t *reply;
cookie =
xcb_damage_query_version_unchecked(_ecore_xcb_conn,
XCB_DAMAGE_MAJOR_VERSION,
XCB_DAMAGE_MINOR_VERSION);
reply = xcb_damage_query_version_reply(_ecore_xcb_conn, cookie, NULL);
if (reply)
{
_damage_avail = EINA_TRUE;
free(reply);
}
if (_damage_avail)
_ecore_xcb_event_damage = ext_reply->first_event;
}
#endif
}
/**
* @defgroup Ecore_X_Damage_Group X Damage Extension Functions
* @ingroup Ecore
*
* Functions related to the X Damage Extension.
*/
EAPI Eina_Bool
ecore_x_damage_query(void)
{
return _damage_avail;
}
/**
* Create a damage object
*
* @param drawable The drawable to monitor
* @param level The level of the damage report
* @return The damage object
*
* Creates a damage object to monitor changes to @p drawable,
* with the level @p level.
*
* @ingroup Ecore_X_Damage_Group
*/
EAPI Ecore_X_Damage
ecore_x_damage_new(Ecore_X_Drawable drawable,
Ecore_X_Damage_Report_Level level)
{
Ecore_X_Damage damage = 0;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
if (!_damage_avail) return 0;
#ifdef ECORE_XCB_DAMAGE
damage = xcb_generate_id(_ecore_xcb_conn);
xcb_damage_create(_ecore_xcb_conn, damage, drawable, level);
// ecore_x_flush();
#endif
return damage;
}
/**
* Destroy a damage object
*
* @param damage The damage object to destroy
*
* Destroys the damage object @p damage
*
* @ingroup Ecore_X_Damage_Group
*/
EAPI void
ecore_x_damage_free(Ecore_X_Damage damage)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
if (!_damage_avail) return;
#ifdef ECORE_XCB_DAMAGE
xcb_damage_destroy(_ecore_xcb_conn, damage);
// ecore_x_flush();
#endif
}
/**
* Synchronously modifies the region
*
* @param damage The damage object to destroy
* @param repair The repair region
* @param parts The parts region
*
* Synchronously modifies the regions in the following manner:
* If @p repair is @c XCB_NONE:
* 1) parts = damage
From: Jérôme Pinot <ngc891@gmail.com> Subject: [E-devel] [patch] ecore doxygen doc Here is a patch to correct some problems in ecore doxygen doc. It fixes: /tmp/ecore/doc/examples.dox:1173: warning: Unsupported xml/html tag <some_num> found /tmp/ecore/doc/examples.dox:1174: warning: Unsupported xml/html tag <some_path> found /tmp/ecore/doc/examples.dox:1176: warning: Unsupported xml/html tag <some_num> found /tmp/ecore/src/lib/ecore_con/ecore_con_ssl.c:714: warning: The following parameters of ecore_con_ssl_server_privkey_add(Ecore_Con_Server *svr, const char *key_file) are not documented: parameter 'svr' /tmp/ecore/src/lib/ecore_con/Ecore_Con.h:1360: warning: The following parameters of ecore_con_url_http_version_set(Ecore_Con_Url *url_con, Ecore_Con_Url_Http_Version version) are not documented: parameter 'url_con' /tmp/ecore/src/lib/ecore_evas/Ecore_Evas.h:530: warning: argument 'demand_attention' of command @param is not found in the argument list of ecore_evas_demand_attention_set(Ecore_Evas *ee, Eina_Bool demand) /tmp/ecore/src/lib/ecore_evas/Ecore_Evas.h:530: warning: The following parameters of ecore_evas_demand_attention_set(Ecore_Evas *ee, Eina_Bool demand) are not documented: parameter 'demand' /tmp/ecore/src/lib/ecore_x/xcb/ecore_xcb_damage.c:129: warning: Unsupported xml/html tag <empty> found There are more things to fix due to API change but it's not so obvious for me. I will first continue to check/correct trivial things in the others efl doxygen doc. SVN revision: 69820
2012-03-31 05:03:05 -07:00
* 2) damage = \<empty\>
* Otherwise:
* 1) parts = damage INTERSECT repair
* 2) damage = damage - parts
* 3) Generate DamageNotify for remaining damage areas
*
* @ingroup Ecore_X_Damage_Group
*/
EAPI void
ecore_x_damage_subtract(Ecore_X_Damage damage,
Ecore_X_Region repair,
Ecore_X_Region parts)
{
LOGFN(__FILE__, __LINE__, __FUNCTION__);
CHECK_XCB_CONN;
if (!_damage_avail) return;
#ifdef ECORE_XCB_DAMAGE
xcb_damage_subtract(_ecore_xcb_conn, damage, repair, parts);
// ecore_x_flush();
#endif
}