bool Window::HandleEventSelf(const SDL_Event& ev) { switch (ev.type) { case SDL_MOUSEBUTTONDOWN: { if (MouseOver(ev.button.x, ev.button.y)) { float mouse[2] = {PixelToGlX(ev.button.x), PixelToGlY(ev.button.y)}; if (mouse[1] > pos[1]+size[1]-titleHeight) { dragPos[0] = mouse[0] - pos[0]; dragPos[1] = mouse[1] - pos[1]; dragging = true; return true; }; } break; } case SDL_MOUSEBUTTONUP: { if (dragging) { dragging = false; return true; } break; } case SDL_MOUSEMOTION: { if (dragging) { Move(PixelToGlX(ev.motion.xrel), PixelToGlY(ev.motion.yrel)-1); return true; } break; } case SDL_KEYDOWN: { if (ev.key.keysym.sym == SDLK_ESCAPE) { WantClose(); return true; } break; } } return false; }
void List::MouseMove(int x, int y, int dx,int dy, int button) { mx = PixelToGlX(x); my = PixelToGlY(y); }
bool GuiElement::MouseOver(int x, int y) const { float mouse[2] = {PixelToGlX(x), PixelToGlY(y)}; return (mouse[0] >= pos[0] && mouse[0] <= pos[0]+size[0]) && (mouse[1] >= pos[1] && mouse[1] <= pos[1]+size[1]); }