Mercurial > sdl-ios-xcode
comparison src/video/gem/SDL_gemvideo.c @ 3944:d59dacd36696 SDL-1.2
Allow creation of window bigger than visible size
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Sun, 27 May 2007 08:53:48 +0000 |
parents | 1d9cd0ff67cc |
children | a1b03ba2fcd0 |
comparison
equal
deleted
inserted
replaced
3943:1d9cd0ff67cc | 3944:d59dacd36696 |
---|---|
619 } | 619 } |
620 | 620 |
621 SDL_Surface *GEM_SetVideoMode(_THIS, SDL_Surface *current, | 621 SDL_Surface *GEM_SetVideoMode(_THIS, SDL_Surface *current, |
622 int width, int height, int bpp, Uint32 flags) | 622 int width, int height, int bpp, Uint32 flags) |
623 { | 623 { |
624 int maxwidth, maxheight; | |
625 Uint32 modeflags, screensize; | 624 Uint32 modeflags, screensize; |
626 SDL_bool use_shadow1, use_shadow2; | 625 SDL_bool use_shadow1, use_shadow2; |
627 | |
628 /*--- Verify if asked mode can be used ---*/ | |
629 if (flags & SDL_FULLSCREEN) { | |
630 maxwidth=VDI_w; | |
631 maxheight=VDI_h; | |
632 } else { | |
633 /* Windowed mode */ | |
634 maxwidth=GEM_desk_w; | |
635 maxheight=GEM_desk_h; | |
636 } | |
637 | 626 |
638 /* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */ | 627 /* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */ |
639 if ((width & 15) != 0) { | 628 if ((width & 15) != 0) { |
640 width = (width | 15) +1; | 629 width = (width | 15) +1; |
641 } | 630 } |
642 | 631 |
643 if ((maxwidth < width) || (maxheight < height) || (VDI_bpp != bpp)) { | 632 /*--- Verify if asked mode can be used ---*/ |
644 SDL_SetError("Couldn't find requested mode in list"); | 633 if (VDI_bpp != bpp) { |
634 SDL_SetError("%d bpp mode not supported", bpp); | |
645 return(NULL); | 635 return(NULL); |
636 } | |
637 | |
638 if (flags & SDL_FULLSCREEN) { | |
639 if ((VDI_w < width) || (VDI_h < height)) { | |
640 SDL_SetError("%dx%d mode is too large", width, height); | |
641 return(NULL); | |
642 } | |
646 } | 643 } |
647 | 644 |
648 /*--- Allocate the new pixel format for the screen ---*/ | 645 /*--- Allocate the new pixel format for the screen ---*/ |
649 if ( ! SDL_ReallocFormat(current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask, VDI_alphamask) ) { | 646 if ( ! SDL_ReallocFormat(current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask, VDI_alphamask) ) { |
650 SDL_SetError("Couldn't allocate new pixel format for requested mode"); | 647 SDL_SetError("Couldn't allocate new pixel format for requested mode"); |
748 SDL_SetError("Can not calculate window attributes"); | 745 SDL_SetError("Can not calculate window attributes"); |
749 return NULL; | 746 return NULL; |
750 } | 747 } |
751 | 748 |
752 /* Center window */ | 749 /* Center window */ |
753 x2 = GEM_desk_x+((GEM_desk_w-w2)>>1); | 750 x2 = (GEM_desk_w-w2)>>1; |
754 y2 = GEM_desk_y+((GEM_desk_h-h2)>>1); | 751 y2 = (GEM_desk_h-h2)>>1; |
752 if (x2<0) { | |
753 x2 = 0; | |
754 } | |
755 if (y2<0) { | |
756 y2 = 0; | |
757 } | |
758 x2 += GEM_desk_x; | |
759 y2 += GEM_desk_y; | |
755 | 760 |
756 /* Destroy existing window */ | 761 /* Destroy existing window */ |
757 if (GEM_handle >= 0) { | 762 if (GEM_handle >= 0) { |
758 wind_close(GEM_handle); | 763 wind_close(GEM_handle); |
759 wind_delete(GEM_handle); | 764 wind_delete(GEM_handle); |