Ticket #7996: screenshot2.diff

File screenshot2.diff, 3.6 KB (added by eriktorbjorn, 22 years ago)

Updated patch against a September 21 CVS snapshot

  • scummvm/backends/sdl/sdl-common.cpp

    diff -ur ScummVM-cvs20020921/scummvm/backends/sdl/sdl-common.cpp ScummVM-cvs20020921+hack/scummvm/backends/sdl/sdl-common.cpp
    old new  
    432432                                        b |= KBD_ALT;
    433433                                event->kbd.flags = b;
    434434
     435                                // Alt-S creates a screenshot
     436                                if (b == KBD_ALT && ev.key.keysym.sym=='s') {
     437                                        save_screenshot();
     438                                        break;
     439                                }
     440
    435441                                // Alt-Return toggles full screen mode                         
    436442                                if (b == KBD_ALT && ev.key.keysym.sym==SDLK_RETURN) {
    437443                                        property(PROP_TOGGLE_FULLSCREEN, NULL);
     
    674680
    675681        return 0;
    676682}
     683
     684void OSystem_SDL_Common::save_screenshot() {
     685        SDL_Surface *screenshot;
     686        char filename[255];
     687        bool can_save = false;
     688        int i;
     689
     690        screenshot = get_screenshot_surface();
     691        if (screenshot == NULL)
     692                return;
     693
     694        for (i = 0; i <= 9999; i++) {
     695                FILE *tmpfile;
     696
     697                // FIXME - Use getSavePath()
     698                sprintf(filename, "scr%04d.bmp", i);
     699                tmpfile = fopen(filename, "rb");
     700                if (tmpfile == NULL) {
     701                        can_save = true;
     702                        break;
     703                }
     704                fclose(tmpfile);
     705        }
     706
     707        if (!can_save) {
     708                warning("Could not make filename for screenshot!");
     709                return;
     710        }
     711
     712        if (SDL_SaveBMP(screenshot, filename) == 0)
     713                debug(1, "Screenshot saved as '%s'", filename);
     714        else
     715                warning("Could not save screenshot: %s", SDL_GetError());
     716}
    677717               
    678718void OSystem_SDL_Common::quit() {
    679719        if(cdrom) {
  • scummvm/backends/sdl/sdl-common.h

    diff -ur ScummVM-cvs20020921/scummvm/backends/sdl/sdl-common.h ScummVM-cvs20020921+hack/scummvm/backends/sdl/sdl-common.h
    old new  
    8888        // Update cdrom audio status
    8989        void update_cdrom();
    9090
     91        // Save screenshot
     92        void save_screenshot();
     93
    9194        // Quit
    9295        void quit();
    9396
     
    181184        virtual void unload_gfx_mode() = 0;
    182185        virtual void hotswap_gfx_mode() = 0;
    183186
     187        virtual SDL_Surface *get_screenshot_surface() = 0;
     188
    184189        void get_320x200_image(byte *buf);     
    185190
    186191        void setup_icon();
  • scummvm/backends/sdl/sdl.cpp

    diff -ur ScummVM-cvs20020921/scummvm/backends/sdl/sdl.cpp ScummVM-cvs20020921+hack/scummvm/backends/sdl/sdl.cpp
    old new  
    5959        virtual void load_gfx_mode();
    6060        virtual void unload_gfx_mode();
    6161        void hotswap_gfx_mode();
     62
     63        SDL_Surface *get_screenshot_surface();
    6264       
    6365        int TMP_SCREEN_WIDTH;
    6466};
     
    431433        OSystem_SDL_Normal::update_screen();
    432434}
    433435
     436SDL_Surface *OSystem_SDL_Normal::get_screenshot_surface() {
     437        return sdl_hwscreen;
     438}
     439
    434440uint32 OSystem_SDL_Normal::property(int param, Property *value) {
    435441
    436442        if (param == PROP_TOGGLE_FULLSCREEN) {
  • scummvm/backends/sdl/sdl_gl.cpp

    diff -ur ScummVM-cvs20020921/scummvm/backends/sdl/sdl_gl.cpp ScummVM-cvs20020921+hack/scummvm/backends/sdl/sdl_gl.cpp
    old new  
    6060        void load_gfx_mode();
    6161        void unload_gfx_mode();
    6262        void hotswap_gfx_mode();
     63
     64        SDL_Surface *get_screenshot_surface();
    6365};
    6466
    6567OSystem_SDL_Common *OSystem_SDL_Common::create() {
     
    168170        update_screen();
    169171}
    170172
     173SDL_Surface *OSystem_SDL_GL::get_screenshot_surface() {
     174        warning("Screenshots not yet supported in SDL / OpenGL.");
     175        return NULL;
     176}
     177
    171178uint32 OSystem_SDL_GL::property(int param, Property *value) {
    172179
    173180        if (param == PROP_TOGGLE_FULLSCREEN) {