#include "panel.h"
#include "timer.h"
-static int x_original, y_original, x, y, width, height;
+static int x, y, width, height;
// the next functions are helper functions for tooltip handling
void start_show_timeout();
void tooltip_trigger_show(Area* area, Panel* p, XEvent *e)
{
// Position the tooltip in the center of the area
- x = x_original = area->posx + area->width / 2 + e->xmotion.x_root - e->xmotion.x;
- y = y_original = area->posy + area->height / 2 + e->xmotion.y_root - e->xmotion.y;
+ x = area->posx + area->width / 2 + e->xmotion.x_root - e->xmotion.x;
+ y = area->posy + area->height / 2 + e->xmotion.y_root - e->xmotion.y;
+ if (!panel_horizontal)
+ y -= height/2;
g_tooltip.panel = p;
if (g_tooltip.mapped && g_tooltip.area != area) {
tooltip_copy_text(area);
width = 2*g_tooltip.bg->border.width + 2*g_tooltip.paddingx + r2.width;
height = 2*g_tooltip.bg->border.width + 2*g_tooltip.paddingy + r2.height;
- x = x_original;
- y = y_original;
-
Panel* panel = g_tooltip.panel;
if (panel_horizontal && panel_position & BOTTOM)
y = panel->posy-height;
else
x = panel->posx - width;
- if (!panel_horizontal)
- y -= height/2;
-
g_object_unref(layout);
cairo_destroy(c);
cairo_surface_destroy(cs);
* or from a layering event (size or position change).
*
* DRAWING LOOP :
- *
* 1) browse tree and resize SIZE_BY_CONTENT node
* - children node are resized before its parent
- * - if 'size' changed then 'resize = 1' on the parent
+ * - if 'size' changed then 'redraw = 1' and 'resize = 1' on the parent
* 2) browse tree and resize SIZE_BY_LAYOUT node
* - parent node is resized before its children
- * - if 'size' changed then 'resize = 1' on childs with SIZE_BY_LAYOUT
+ * - if 'size' changed then 'redraw = 1' and 'resize = 1' on childs with SIZE_BY_LAYOUT
* 3) calculate posx of objects
* - parent's position is calculated before children's position
* - if 'position' changed then 'redraw = 1'
* - parent node is drawn before its children
*
* perhaps 2) and 3) can be merged...
+ * répartition entre niveau global et niveau local ??
+ * size_by_content peut-il modifier redraw=1 en cas de changement ? ou est ce géré par chaque composant ?
+ * size_by_layout peut-il modifier redraw ?
+ *
************************************************************/
// if 'size' changed then 'resize = 1' on the parent
if (a->_resize) {
a->_resize(a);
+ a->redraw = 1;
((Area*)a->parent)->resize = 1;
}
}