_Bool panel_mmove(PANEL *p, int x, int y, int width, int height, int mx, int my, int dy) { mx -= (p->x < 0) ? width + p->x : p->x; my -= (p->y < 0) ? height + p->y : p->y; FUNC(); if(p->content_scroll) { int dy = scroll_gety(p->content_scroll, height); y -= dy; my += dy; } _Bool draw = p->type ? mmovefunc[p->type - 1](p, mx, my, dy, width, height) : 0; PANEL **pp = p->child, *subp; if(pp) { while((subp = *pp++)) { if(!subp->disabled) { draw |= panel_mmove(subp, x, y, width, height, mx, my, dy); } } } if(draw && p == &panel_main) { redraw(); } return draw; }
bool panel_mmove(PANEL *p, int x, int y, int width, int height, int mx, int my, int dx, int dy) { if (p == &panel_root) { mouse.x = mx; mouse.y = my; } mx -= (p->x < 0) ? width + SCALE(p->x) : SCALE(p->x); my -= (p->y < 0) ? height + SCALE(p->y) : SCALE(p->y); FIX_XY_CORDS_FOR_SUBPANELS(); int mmy = my; if (p->content_scroll) { const int scroll_y = scroll_gety(p->content_scroll, height); if (my < 0) { mmy = -1; } else if (my >= height) { mmy = 1024 * 1024 * 1024; // large value } else { mmy = my + scroll_y; } y -= scroll_y; my += scroll_y; } bool draw = p->type ? mmovefunc[p->type - 1](p, x, y, width, height, mx, mmy, dx, dy) : false; // Has to be called before children mmove if (p == &panel_root) { draw |= tooltip_mmove(); } PANEL **pp = p->child; if (pp) { PANEL *subp; while ((subp = *pp++)) { if (!subp->disabled) { draw |= panel_mmove(subp, x, y, width, height, mx, my, dx, dy); } } } if (p == &panel_root) { draw |= contextmenu_mmove(mx, my, dx, dy); if (draw) { redraw(); } } return draw; }