// // I_FinishUpdate // void I_FinishUpdate (void) { static int lasttic; int tics; int i; if (!initialized) return; if (noblit) return; if (need_resize && SDL_GetTicks() > last_resize_time + 500) { ApplyWindowResize(resize_w, resize_h); need_resize = false; palette_to_set = true; } UpdateGrab(); // Don't update the screen if the window isn't visible. // Not doing this breaks under Windows when we alt-tab away // while fullscreen. if (!(SDL_GetAppState() & SDL_APPACTIVE)) return; // draws little dots on the bottom of the screen if (display_fps_dots) { i = I_GetTime(); tics = i - lasttic; lasttic = i; if (tics > 20) tics = 20; for (i=0 ; i<tics*4 ; i+=4) I_VideoBuffer[ (SCREENHEIGHT-1)*SCREENWIDTH + i] = 0xff; for ( ; i<20*4 ; i+=4) I_VideoBuffer[ (SCREENHEIGHT-1)*SCREENWIDTH + i] = 0x0; } if (show_diskicon && disk_indicator == disk_on) { if (diskicon_readbytes >= diskicon_threshold) { V_BeginRead(); } } else if (disk_indicator == disk_dirty) { disk_indicator = disk_off; } diskicon_readbytes = 0; // draw to screen BlitArea(0, 0, SCREENWIDTH, SCREENHEIGHT); if (palette_to_set) { SDL_SetColors(screenbuffer, palette, 0, 256); palette_to_set = false; // In native 8-bit mode, if we have a palette to set, the act // of setting the palette updates the screen if (screenbuffer == screen) { return; } } // In 8in32 mode, we must blit from the fake 8-bit screen buffer // to the real screen before doing a screen flip. if (screenbuffer != screen) { SDL_Rect dst_rect; // Center the buffer within the full screen space. dst_rect.x = (screen->w - screenbuffer->w) / 2; dst_rect.y = (screen->h - screenbuffer->h) / 2; SDL_BlitSurface(screenbuffer, NULL, screen, &dst_rect); } SDL_Flip(screen); }
static void I_GetEvent(void) { event_t event; SDL_Event SDLEvent; SDL_Event *Event = &SDLEvent; static int mwheeluptic = 0, mwheeldowntic = 0; while (SDL_PollEvent(Event)) { switch (Event->type) { case SDL_KEYDOWN: #ifdef MACOSX if (Event->key.keysym.mod & KMOD_META) { // Switch windowed<->fullscreen if pressed <Command-F> if (Event->key.keysym.sym == SDLK_f) { V_ToggleFullscreen(); break; } } #else if (Event->key.keysym.mod & KMOD_LALT) { // Prevent executing action on Alt-Tab if (Event->key.keysym.sym == SDLK_TAB) { break; } // Switch windowed<->fullscreen if pressed Alt-Enter else if (Event->key.keysym.sym == SDLK_RETURN) { V_ToggleFullscreen(); break; } } #endif event.type = ev_keydown; event.data1 = I_TranslateKey(&Event->key.keysym); D_PostEvent(&event); break; case SDL_KEYUP: { event.type = ev_keyup; event.data1 = I_TranslateKey(&Event->key.keysym); D_PostEvent(&event); } break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: if (mouse_enabled && window_focused) { event.type = ev_mouse; event.data1 = I_SDLtoDoomMouseState(SDL_GetMouseState(NULL, NULL)); event.data2 = event.data3 = 0; if (Event->type == SDL_MOUSEBUTTONDOWN) { switch(Event->button.button) { case SDL_BUTTON_WHEELUP: event.type = ev_keydown; event.data1 = KEYD_MWHEELUP; mwheeluptic = gametic; break; case SDL_BUTTON_WHEELDOWN: event.type = ev_keydown; event.data1 = KEYD_MWHEELDOWN; mwheeldowntic = gametic; break; } } D_PostEvent(&event); } break; //e6y: new mouse code case SDL_ACTIVEEVENT: UpdateFocus(); break; case SDL_VIDEORESIZE: ApplyWindowResize(Event); break; case SDL_QUIT: S_StartSound(NULL, sfx_swtchn); M_QuitDOOM(0); default: break; } } if(mwheeluptic && mwheeluptic + 1 < gametic) { event.type = ev_keyup; event.data1 = KEYD_MWHEELUP; D_PostEvent(&event); mwheeluptic = 0; } if(mwheeldowntic && mwheeldowntic + 1 < gametic) { event.type = ev_keyup; event.data1 = KEYD_MWHEELDOWN; D_PostEvent(&event); mwheeldowntic = 0; } }