64 auto realDuration = curRealTime - prevReal;
65 prevReal = curRealTime;
66 auto emuDuration = curEmu - prevEmu;
69 double factor = emuDuration.toDouble() / narrow_cast<double>(realDuration);
91 std::vector<Event> toBeRescheduledEvents;
94 EmuTime time = curEmu + extraDelay;
95 for (
auto& e : toBeScheduledEvents) {
98 const auto& keyEvent = get_event<KeyEvent>(e);
99 int maskedKeyCode = int(keyEvent.getKeyCode()) & int(Keys::K_MASK);
100 auto it =
ranges::find(nonMatchedKeyPresses, maskedKeyCode,
101 [](
const auto& p) {
return p.first; });
103 if (it ==
end(nonMatchedKeyPresses)) {
104 nonMatchedKeyPresses.emplace_back(maskedKeyCode, e);
109 if (it !=
end(nonMatchedKeyPresses)) {
110 const auto& timedPressEvent = get_event<TimedEvent>(it->second);
111 const auto& timedReleaseEvent = get_event<TimedEvent>(e);
112 auto pressRealTime = timedPressEvent.getRealTime();
113 auto releaseRealTime = timedReleaseEvent.getRealTime();
114 auto deltaTime = releaseRealTime - pressRealTime;
115 if (deltaTime <= 2000000 / 50) {
121 toBeRescheduledEvents.push_back(newKeyupEvent);
129 scheduledEvents.push_back(e);
130 const auto& sdlEvent = get_event<SdlEvent>(e);
131 uint32_t eventSdlTime = sdlEvent.getCommonSdlEvent().timestamp;
132 uint32_t sdlNow = SDL_GetTicks();
133 auto sdlOffset = int32_t(sdlNow - eventSdlTime);
134 assert(sdlOffset >= 0);
135 auto offset = 1000 * int64_t(sdlOffset);
136 EmuDuration emuOffset(factor * narrow_cast<double>(offset));
137 auto schedTime = (emuOffset < extraDelay)
140 assert(curEmu <= schedTime);
143 toBeScheduledEvents.clear();
146 append(toBeScheduledEvents, std::move(toBeRescheduledEvents));
EventDelay(Scheduler &scheduler, CommandController &commandController, EventDistributor &eventDistributor, MSXEventDistributor &msxEventDistributor, ReverseManager &reverseManager)
std::variant< KeyUpEvent, KeyDownEvent, MouseMotionEvent, MouseButtonUpEvent, MouseButtonDownEvent, MouseWheelEvent, JoystickAxisMotionEvent, JoystickHatEvent, JoystickButtonUpEvent, JoystickButtonDownEvent, OsdControlReleaseEvent, OsdControlPressEvent, WindowEvent, TextEvent, FileDropEvent, QuitEvent, FinishFrameEvent, CliCommandEvent, GroupEvent, BootEvent, FrameDrawnEvent, BreakEvent, SwitchRendererEvent, TakeReverseSnapshotEvent, AfterTimedEvent, MachineLoadedEvent, MachineActivatedEvent, MachineDeactivatedEvent, MidiInReaderEvent, MidiInWindowsEvent, MidiInCoreMidiEvent, MidiInCoreMidiVirtualEvent, MidiInALSAEvent, Rs232TesterEvent, Rs232NetEvent, ImGuiDelayedActionEvent, ImGuiActiveEvent > Event