comparison src/video/gem/SDL_gemvideo.c @ 2108:a930c8e4d8b0

Allow creation of window bigger than visible size
author Patrice Mandin <patmandin@gmail.com>
date Sun, 27 May 2007 08:54:38 +0000
parents 757dfb38f574
children 2c835d58faad
comparison
equal deleted inserted replaced
2107:757dfb38f574 2108:a930c8e4d8b0
637 637
638 SDL_Surface * 638 SDL_Surface *
639 GEM_SetVideoMode(_THIS, SDL_Surface * current, 639 GEM_SetVideoMode(_THIS, SDL_Surface * current,
640 int width, int height, int bpp, Uint32 flags) 640 int width, int height, int bpp, Uint32 flags)
641 { 641 {
642 int maxwidth, maxheight;
643 Uint32 modeflags, screensize; 642 Uint32 modeflags, screensize;
644 SDL_bool use_shadow1, use_shadow2; 643 SDL_bool use_shadow1, use_shadow2;
645
646 /*--- Verify if asked mode can be used ---*/
647 if (flags & SDL_FULLSCREEN) {
648 maxwidth = VDI_w;
649 maxheight = VDI_h;
650 } else {
651 /* Windowed mode */
652 maxwidth = GEM_desk_w;
653 maxheight = GEM_desk_h;
654 }
655 644
656 /* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */ 645 /* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */
657 if ((width & 15) != 0) { 646 if ((width & 15) != 0) {
658 width = (width | 15) + 1; 647 width = (width | 15) + 1;
659 } 648 }
660 649
661 if ((maxwidth < width) || (maxheight < height) || (VDI_bpp != bpp)) { 650 /*--- Verify if asked mode can be used ---*/
662 SDL_SetError("Couldn't find requested mode in list"); 651 if (VDI_bpp != bpp) {
663 return (NULL); 652 SDL_SetError("%d bpp mode not supported", bpp);
653 return(NULL);
654 }
655
656 if (flags & SDL_FULLSCREEN) {
657 if ((VDI_w < width) || (VDI_h < height)) {
658 SDL_SetError("%dx%d mode is too large", width, height);
659 return (NULL);
660 }
664 } 661 }
665 662
666 /*--- Allocate the new pixel format for the screen ---*/ 663 /*--- Allocate the new pixel format for the screen ---*/
667 if (!SDL_ReallocFormat 664 if (!SDL_ReallocFormat
668 (current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask, 665 (current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask,
773 SDL_SetError("Can not calculate window attributes"); 770 SDL_SetError("Can not calculate window attributes");
774 return NULL; 771 return NULL;
775 } 772 }
776 773
777 /* Center window */ 774 /* Center window */
778 x2 = GEM_desk_x + ((GEM_desk_w - w2) >> 1); 775 x2 = (GEM_desk_w - w2) >> 1;
779 y2 = GEM_desk_y + ((GEM_desk_h - h2) >> 1); 776 y2 = (GEM_desk_h - h2) >> 1;
777 if (x2<0) {
778 x2 = 0;
779 }
780 if (y2<0) {
781 y2 = 0;
782 }
783 x2 += GEM_desk_x;
784 y2 += GEM_desk_y;
780 785
781 /* Destroy existing window */ 786 /* Destroy existing window */
782 if (GEM_handle >= 0) { 787 if (GEM_handle >= 0) {
783 wind_close(GEM_handle); 788 wind_close(GEM_handle);
784 wind_delete(GEM_handle); 789 wind_delete(GEM_handle);