fixed gwinDestroy() and added gwinGetAbsoluteCoordinates()

ugfx_release_2.6
Joel Bodenmann 2014-01-05 00:46:36 +01:00
parent 463a703183
commit 9f5d14cf5d
2 changed files with 37 additions and 5 deletions

View File

@ -336,6 +336,17 @@ extern "C" {
*/
bool_t gwinGetEnabled(GHandle gh);
/**
* @brief Get absolute coordinates of a window
*
* @param[in] gh The window
* @param[out] x The absolut x coordinate
* @param[out] y The absolut y coordinate
*
* @api
*/
void gwinGetAbsoluteCoordinates(GHandle gh, coord_t *x, coord_t *y);
/**
* @brief Move a window
*

View File

@ -181,11 +181,16 @@ GHandle gwinGWindowCreate(GDisplay *g, GWindowObject *pgw, const GWindowInit *pI
void gwinDestroy(GHandle gh) {
#if GWIN_NEED_HIERARCHY
// kill your children as long as you have any
while (gh->child) {
GHandle tmp = gh->child;
gh->child = gh->child->sibling;
gwinDestroy(tmp);
// fix hierarchy structure
if (gh->parent->child == gh) {
// we are the first child
gh->parent->child = gh->sibling;
} else {
// find our predecessor
GHandle tmp = gh->parent->child;
while (tmp->sibling != gh)
tmp = tmp->sibling;
tmp->sibling = gh->sibling;
}
#endif
@ -269,6 +274,22 @@ bool_t gwinGetEnabled(GHandle gh) {
#endif
}
void gwinGetAbsoluteCoordinates(GHandle gh, coord_t *x, coord_t *y) {
#if GWIN_NEED_HIERARCHY
GHandle tmp;
// sum up all relative coordinates up to the root parent
for (*x = 0, *y = 0, tmp = gh; tmp; tmp = tmp->parent) {
*x += tmp->x;
*y += tmp->y;
}
#else
*x = gh->x;
*y = gh->y;
#endif
}
void gwinMove(GHandle gh, coord_t x, coord_t y) {
_gwm_redim(gh, x, y, gh->width, gh->height);
}