void MouseButton::mouse_handler(const SDL_Event& event, void* userdata) { if (event.type != SDL_MOUSEBUTTONDOWN && event.type != SDL_MOUSEBUTTONUP) return; MouseButton* mb = (MouseButton*)userdata; switch (mb->button) { case 1: if (event.button.button == SDL_BUTTON_LEFT) { if (event.button.state == SDL_PRESSED) { mb->pressed = true; mb->button_down(); } else { mb->pressed = false; mb->button_up(); } } break; case 2: if (event.button.button == SDL_BUTTON_MIDDLE) { if (event.button.state == SDL_PRESSED) { mb->pressed = true; mb->button_down(); } else { mb->pressed = false; mb->button_up(); } } break; case 3: if (event.button.button == SDL_BUTTON_RIGHT) { if (event.button.state == SDL_PRESSED) { mb->pressed = true; mb->button_down(); } else { mb->pressed = false; mb->button_up(); } } break; default: // only three buttons support so far break; } }