void HaikuDirectWindow::HandleMouseButton(BMessage* message) { BPoint where; if (message->FindPoint("where", &where) != B_OK) { return; } uint32 modifiers = message->FindInt32("modifiers"); uint32 buttons = message->FindInt32("buttons"); uint32 button = buttons ^ last_buttons_state; last_buttons_state = buttons; // TODO: implement the mouse_mode checks /* if (mouse_mode == MOUSE_MODE_CAPTURED) { event.xbutton.x=last_mouse_pos.x; event.xbutton.y=last_mouse_pos.y; } */ InputEvent mouse_event; mouse_event.ID = ++event_id; mouse_event.type = InputEvent::MOUSE_BUTTON; mouse_event.device = 0; mouse_event.mouse_button.mod = GetKeyModifierState(modifiers); mouse_event.mouse_button.button_mask = GetMouseButtonState(buttons); mouse_event.mouse_button.x = where.x; mouse_event.mouse_button.y = where.y; mouse_event.mouse_button.global_x = where.x; mouse_event.mouse_button.global_y = where.y; switch (button) { default: case B_PRIMARY_MOUSE_BUTTON: mouse_event.mouse_button.button_index = 1; break; case B_SECONDARY_MOUSE_BUTTON: mouse_event.mouse_button.button_index = 2; break; case B_TERTIARY_MOUSE_BUTTON: mouse_event.mouse_button.button_index = 3; break; } mouse_event.mouse_button.pressed = (message->what == B_MOUSE_DOWN); if (message->what == B_MOUSE_DOWN && mouse_event.mouse_button.button_index == 1) { int32 clicks = message->FindInt32("clicks"); if (clicks > 1) { mouse_event.mouse_button.doubleclick=true; } } input->parse_input_event(mouse_event); }
void HaikuDirectWindow::HandleMouseMoved(BMessage* message) { BPoint where; if (message->FindPoint("where", &where) != B_OK) { return; } Point2i pos(where.x, where.y); uint32 modifiers = message->FindInt32("modifiers"); uint32 buttons = message->FindInt32("buttons"); if (!last_mouse_pos_valid) { last_mouse_position = pos; last_mouse_pos_valid = true; } Point2i rel = pos - last_mouse_position; InputEvent motion_event; motion_event.ID = ++event_id; motion_event.type = InputEvent::MOUSE_MOTION; motion_event.device = 0; motion_event.mouse_motion.mod = GetKeyModifierState(modifiers); motion_event.mouse_motion.button_mask = GetMouseButtonState(buttons); motion_event.mouse_motion.x = pos.x; motion_event.mouse_motion.y = pos.y; input->set_mouse_pos(pos); motion_event.mouse_motion.global_x = pos.x; motion_event.mouse_motion.global_y = pos.y; motion_event.mouse_motion.speed_x = input->get_mouse_speed().x; motion_event.mouse_motion.speed_y = input->get_mouse_speed().y; motion_event.mouse_motion.relative_x = rel.x; motion_event.mouse_motion.relative_y = rel.y; last_mouse_position = pos; input->parse_input_event(motion_event); }
bool EventHandler::IsMouseButtonDown( MouseButton button ) const { return GetMouseButtonState( button ) == ButtonState::Down; }