pollEvent method
Poll events.
Implementation
Event? pollEvent() {
final n = sdl.SDL_PollEvent(_eventHandle);
if (n != 0) {
final e = _eventHandle.ref;
Event event;
final type = e.type.toEventType();
switch (type) {
case EventType.firstevent:
throwInvalidEvent(type);
case EventType.quit:
event = QuitEvent(this, e.quit.timestamp);
break;
case EventType.appTerminating:
event = AppTerminatingEvent(this, e.common.timestamp);
break;
case EventType.appLowmemory:
event = AppLowMemoryEvent(this, e.common.timestamp);
break;
case EventType.appWillenterbackground:
event = AppWillEnterBackgroundEvent(this, e.common.timestamp);
break;
case EventType.appDidenterbackground:
event = AppDidEnterBackgroundEvent(this, e.common.timestamp);
break;
case EventType.appWillenterforeground:
event = AppWillEnterForegroundEvent(this, e.common.timestamp);
break;
case EventType.appDidenterforeground:
event = AppDidEnterForegroundEvent(this, e.common.timestamp);
break;
case EventType.localechanged:
event = LocaleChangedEvent(this, e.common.timestamp);
break;
case EventType.displayevent:
event = DisplayEvent.fromEvent(this, e);
break;
case EventType.windowevent:
final windowEvent = e.window;
final timestamp = windowEvent.timestamp;
final windowId = windowEvent.windowID;
switch (windowEvent.event.toWindowEventID()) {
case WindowEventID.none:
throw SdlError(windowEvent.event, 'No event ID.');
case WindowEventID.shown:
event = WindowShownEvent(this, timestamp, windowId);
break;
case WindowEventID.hidden:
event = WindowHiddenEvent(this, timestamp, windowId);
break;
case WindowEventID.exposed:
event = WindowExposedEvent(this, timestamp, windowId);
break;
case WindowEventID.moved:
event = WindowMovedEvent(
this,
timestamp,
windowId,
Point<int>(windowEvent.data1, windowEvent.data2),
);
break;
case WindowEventID.resized:
event = WindowResizedEvent(
this,
timestamp,
windowId,
WindowSize(windowEvent.data1, windowEvent.data2),
);
break;
case WindowEventID.sizeChanged:
event = WindowSizeChangedEvent(this, timestamp, windowId);
break;
case WindowEventID.minimized:
event = WindowMinimizedEvent(this, timestamp, windowId);
break;
case WindowEventID.maximized:
event = WindowMaximizedEvent(this, timestamp, windowId);
break;
case WindowEventID.restored:
event = WindowRestoredEvent(this, timestamp, windowId);
break;
case WindowEventID.enter:
event = WindowEnterEvent(this, timestamp, windowId);
break;
case WindowEventID.leave:
event = WindowLeaveEvent(this, timestamp, windowId);
break;
case WindowEventID.focusGained:
event = WindowFocusGainedEvent(this, timestamp, windowId);
break;
case WindowEventID.focusLost:
event = WindowFocusLostEvent(this, timestamp, windowId);
break;
case WindowEventID.close:
event = WindowClosedEvent(this, timestamp, windowId);
break;
case WindowEventID.takeFocus:
event = WindowTakeFocusEvent(this, timestamp, windowId);
break;
case WindowEventID.hitTest:
event = WindowHitTestEvent(this, timestamp, windowId);
break;
case WindowEventID.iccprofChanged:
event = IccprofChangedEvent(this, timestamp, windowId);
break;
case WindowEventID.displayChanged:
event = DisplayChangedEvent(
this,
timestamp,
windowId,
windowEvent.data1,
);
break;
}
break;
case EventType.syswmevent:
final msg = e.syswm.msg;
event = SysWmEvent(this, e.syswm.timestamp, msg);
break;
case EventType.keydown:
event = KeyboardEvent.fromSdlEvent(this, e.key);
break;
case EventType.keyup:
event = KeyboardEvent.fromSdlEvent(this, e.key);
break;
case EventType.textediting:
final s = String.fromCharCodes(
[for (var i = 0; i < e.edit.length; i++) e.edit.text[i]],
);
event = TextEditingEvent(
sdl: this,
timestamp: e.edit.timestamp,
wndId: e.edit.windowID,
text: s,
start: e.edit.start,
length: e.edit.length,
);
break;
case EventType.textinput:
final charCodes = <int>[];
var i = 0;
while (true) {
var c = e.text.text[i];
if (c == 0) {
break;
} else {
if (c < 0) {
c += 256;
}
charCodes.add(c);
i++;
}
}
event =
TextInputEvent(this, e.text.timestamp, utf8.decode(charCodes));
break;
case EventType.keymapchanged:
event = KeymapChangedEvent(this, e.common.timestamp);
break;
case EventType.mousemotion:
final motion = e.motion;
event = MouseMotionEvent(
sdl: this,
timestamp: motion.timestamp,
wndId: motion.windowID,
which: motion.which,
state: motion.state,
x: motion.x,
y: motion.y,
relativeX: motion.xrel,
relativeY: motion.yrel,
);
break;
case EventType.mousebuttondown:
event = MouseButtonEvent.fromSdlEvent(this, e.button);
break;
case EventType.mousebuttonup:
event = MouseButtonEvent.fromSdlEvent(this, e.button);
break;
case EventType.mousewheel:
final wheel = e.wheel;
event = MouseWheelEvent(
sdl: this,
timestamp: wheel.timestamp,
windowId: wheel.windowID,
which: wheel.which,
x: wheel.x,
y: wheel.y,
direction: wheel.direction.toMouseWheelDirection(),
);
break;
case EventType.joyaxismotion:
final axis = e.jaxis;
event = JoyAxisEvent(
sdl: this,
timestamp: axis.timestamp,
joystickId: axis.which,
axis: axis.axis,
value: axis.value,
);
break;
case EventType.joyballmotion:
final ball = e.jball;
event = JoyBallEvent(
sdl: this,
timestamp: ball.timestamp,
joystickId: ball.which,
ball: ball.ball,
relativeX: ball.xrel,
relativeY: ball.yrel,
);
break;
case EventType.joyhatmotion:
final hat = e.jhat;
event = JoyHatEvent(
sdl: this,
timestamp: hat.timestamp,
joystickId: hat.which,
hat: hat.hat,
value: hat.value.toJoyHatValue(),
);
break;
case EventType.joybuttondown:
event = JoyButtonEvent.fromSdlEvent(this, e.jbutton);
break;
case EventType.joybuttonup:
event = JoyButtonEvent.fromSdlEvent(this, e.jbutton);
break;
case EventType.joydeviceadded:
event = JoyDeviceEvent.fromSdlEvent(this, e.jdevice);
break;
case EventType.joydeviceremoved:
event = JoyDeviceEvent.fromSdlEvent(this, e.jdevice);
break;
case EventType.controlleraxismotion:
final axis = e.caxis;
event = ControllerAxisEvent(
sdl: this,
timestamp: axis.timestamp,
joystickId: axis.which,
axis: axis.axis.toGameControllerAxis(),
value: axis.value,
);
break;
case EventType.controllerbuttondown:
event = ControllerButtonEvent.fromSdlEvent(this, e.cbutton);
break;
case EventType.controllerbuttonup:
event = ControllerButtonEvent.fromSdlEvent(this, e.cbutton);
break;
case EventType.controllerdeviceadded:
event = ControllerDeviceEvent.fromSdlEvent(this, e.cdevice);
break;
case EventType.controllerdeviceremoved:
event = ControllerDeviceEvent.fromSdlEvent(this, e.cdevice);
break;
case EventType.controllerdeviceremapped:
event = ControllerDeviceEvent.fromSdlEvent(this, e.cdevice);
break;
case EventType.controllertouchpaddown:
event = ControllerTouchpadEvent.fromSdlEvent(this, e.ctouchpad);
break;
case EventType.controllertouchpadmotion:
event = ControllerTouchpadEvent.fromSdlEvent(this, e.ctouchpad);
break;
case EventType.controllertouchpadup:
event = ControllerTouchpadEvent.fromSdlEvent(this, e.ctouchpad);
break;
case EventType.controllersensorupdate:
event = ControllerSensorEvent.fromSdlEvent(this, e.csensor);
break;
case EventType.fingerdown:
event = TouchFingerEvent.fromSdlEvent(this, e.tfinger);
break;
case EventType.fingerup:
event = TouchFingerEvent.fromSdlEvent(this, e.tfinger);
break;
case EventType.fingermotion:
event = TouchFingerEvent.fromSdlEvent(this, e.tfinger);
break;
case EventType.dollargesture:
event = DollarGestureEvent.fromSdlEvent(this, e.dgesture);
break;
case EventType.dollarrecord:
event = DollarGestureEvent.fromSdlEvent(this, e.dgesture);
break;
case EventType.multigesture:
final gesture = e.mgesture;
event = MultiGestureEvent(
sdl: this,
timestamp: gesture.timestamp,
touchId: gesture.touchId,
dTheta: gesture.dTheta,
dDist: gesture.dDist,
numFingers: gesture.numFingers,
x: gesture.x,
y: gesture.y,
);
break;
case EventType.clipboardupdate:
event = ClipboardChangedEvent(this, e.common.timestamp);
break;
case EventType.dropfile:
event = DropEvent.fromSdlEvent(this, e.drop);
break;
case EventType.droptext:
event = DropEvent.fromSdlEvent(this, e.drop);
break;
case EventType.dropbegin:
event = DropEvent.fromSdlEvent(this, e.drop);
break;
case EventType.dropcomplete:
event = DropEvent.fromSdlEvent(this, e.drop);
break;
case EventType.audiodeviceadded:
event = AudioDeviceEvent.fromSdlEvent(this, e.adevice);
break;
case EventType.audiodeviceremoved:
event = AudioDeviceEvent.fromSdlEvent(this, e.adevice);
break;
case EventType.sensorupdate:
final sensor = e.sensor;
event = SensorEvent(
sdl: this,
timestamp: sensor.timestamp,
sensor: sensor.which,
data1: sensor.data[0],
data2: sensor.data[1],
data3: sensor.data[2],
data4: sensor.data[3],
data5: sensor.data[4],
data6: sensor.data[5],
);
break;
case EventType.renderTargetsReset:
event = RenderTargetsResetEvent(this, e.common.timestamp);
break;
case EventType.renderDeviceReset:
event = RenderDeviceReset(this, e.common.timestamp);
break;
case EventType.userevent:
final user = e.user;
event = UserEvent(
sdl: this,
timestamp: user.timestamp,
type: user.type,
windowId: user.windowID == 0 ? null : user.windowID,
code: user.code,
);
break;
case EventType.lastevent:
throw SdlError(e.type, 'Last event type.');
case EventType.pollsentinel:
event = PollSentinelEvent(this, e.common.timestamp);
break;
}
return event;
}
return null;
}