Mercurial > sdl-ios-xcode
comparison src/video/windib/SDL_dibvideo.c @ 1152:51a8702d8ecd
Updates to PocketPC (WinCE) support, thanks to Dmitry Yakimov at
activekitten.com.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 29 Sep 2005 09:43:00 +0000 |
parents | d31afac94eff |
children | 86d0d01290ea |
comparison
equal
deleted
inserted
replaced
1151:be9c9c8f6d53 | 1152:51a8702d8ecd |
---|---|
27 | 27 |
28 #include <stdio.h> | 28 #include <stdio.h> |
29 #include <stdlib.h> | 29 #include <stdlib.h> |
30 #include <malloc.h> | 30 #include <malloc.h> |
31 #include <windows.h> | 31 #include <windows.h> |
32 #if defined(WIN32_PLATFORM_PSPC) | 32 |
33 #include <aygshell.h> // Add Pocket PC includes | 33 |
34 #pragma comment( lib, "aygshell" ) // Link Pocket PC library | 34 #if defined(_WIN32_WCE) |
35 | |
36 // defined and used in SDL_sysevents.c | |
37 extern HINSTANCE aygshell; | |
38 | |
35 #endif | 39 #endif |
36 | 40 |
37 /* Not yet in the mingw32 cross-compile headers */ | 41 /* Not yet in the mingw32 cross-compile headers */ |
38 #ifndef CDS_FULLSCREEN | 42 #ifndef CDS_FULLSCREEN |
39 #define CDS_FULLSCREEN 4 | 43 #define CDS_FULLSCREEN 4 |
189 /* We're finally ready */ | 193 /* We're finally ready */ |
190 return device; | 194 return device; |
191 } | 195 } |
192 | 196 |
193 VideoBootStrap WINDIB_bootstrap = { | 197 VideoBootStrap WINDIB_bootstrap = { |
194 "windib", "Win95/98/NT/2000 GDI", | 198 "windib", "Win95/98/NT/2000/CE GDI", |
195 DIB_Available, DIB_CreateDevice | 199 DIB_Available, DIB_CreateDevice |
196 }; | 200 }; |
197 | 201 |
198 #ifndef NO_CHANGEDISPLAYSETTINGS | 202 #ifndef NO_CHANGEDISPLAYSETTINGS |
199 | 203 |
387 HDC hdc; | 391 HDC hdc; |
388 | 392 |
389 hdc = GetDC(SDL_Window); | 393 hdc = GetDC(SDL_Window); |
390 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); | 394 depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL); |
391 ReleaseDC(SDL_Window, hdc); | 395 ReleaseDC(SDL_Window, hdc); |
392 #ifndef _WIN32_WCE | |
393 // AFAIK 16 bit CE devices have indeed RGB 565 | |
394 if ( depth == 16 ) { | |
395 depth = 15; /* GDI defined as RGB 555 */ | |
396 } | |
397 #endif | |
398 return(depth); | 396 return(depth); |
399 #else | 397 #else |
400 int dib_size; | 398 int dib_size; |
401 LPBITMAPINFOHEADER dib_hdr; | 399 LPBITMAPINFOHEADER dib_hdr; |
402 HDC hdc; | 400 HDC hdc; |
516 video->flags = 0; /* Clear flags */ | 514 video->flags = 0; /* Clear flags */ |
517 video->w = width; | 515 video->w = width; |
518 video->h = height; | 516 video->h = height; |
519 video->pitch = SDL_CalculatePitch(video); | 517 video->pitch = SDL_CalculatePitch(video); |
520 | 518 |
521 #ifdef WIN32_PLATFORM_PSPC | 519 /* Small fix for WinCE/Win32 - when activating window |
522 /* Stuff to hide that $#!^%#$ WinCE taskbar in fullscreen... */ | 520 SDL_VideoSurface is equal to zero, so activating code |
523 if ( flags & SDL_FULLSCREEN ) { | 521 is not called properly for fullscreen windows because |
524 if ( !(prev_flags & SDL_FULLSCREEN) ) { | 522 macros WINDIB_FULLSCREEN uses SDL_VideoSurface |
525 SHFullScreen(SDL_Window, SHFS_HIDETASKBAR); | 523 */ |
526 SHFullScreen(SDL_Window, SHFS_HIDESIPBUTTON); | 524 SDL_VideoSurface = video; |
527 ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_HIDE); | 525 |
528 } | 526 #if defined(_WIN32_WCE) |
527 if ( flags & SDL_FULLSCREEN ) | |
529 video->flags |= SDL_FULLSCREEN; | 528 video->flags |= SDL_FULLSCREEN; |
530 } else { | 529 #endif |
531 if ( prev_flags & SDL_FULLSCREEN ) { | 530 |
532 SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR); | |
533 SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON); | |
534 ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL); | |
535 } | |
536 } | |
537 #endif | |
538 #ifndef NO_CHANGEDISPLAYSETTINGS | 531 #ifndef NO_CHANGEDISPLAYSETTINGS |
539 /* Set fullscreen mode if appropriate */ | 532 /* Set fullscreen mode if appropriate */ |
540 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 533 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { |
541 DEVMODE settings; | 534 DEVMODE settings; |
542 | 535 |
940 { | 933 { |
941 /* Destroy the window and everything associated with it */ | 934 /* Destroy the window and everything associated with it */ |
942 if ( SDL_Window ) { | 935 if ( SDL_Window ) { |
943 /* Delete the screen bitmap (also frees screen->pixels) */ | 936 /* Delete the screen bitmap (also frees screen->pixels) */ |
944 if ( this->screen ) { | 937 if ( this->screen ) { |
945 #ifdef WIN32_PLATFORM_PSPC | |
946 if ( this->screen->flags & SDL_FULLSCREEN ) { | |
947 /* Unhide taskbar, etc. */ | |
948 SHFullScreen(SDL_Window, SHFS_SHOWTASKBAR); | |
949 SHFullScreen(SDL_Window, SHFS_SHOWSIPBUTTON); | |
950 ShowWindow(FindWindow(TEXT("HHTaskBar"),NULL),SW_SHOWNORMAL); | |
951 } | |
952 #endif | |
953 #ifndef NO_CHANGEDISPLAYSETTINGS | 938 #ifndef NO_CHANGEDISPLAYSETTINGS |
954 if ( this->screen->flags & SDL_FULLSCREEN ) { | 939 if ( this->screen->flags & SDL_FULLSCREEN ) { |
955 ChangeDisplaySettings(NULL, 0); | 940 ChangeDisplaySettings(NULL, 0); |
956 ShowWindow(SDL_Window, SW_HIDE); | 941 ShowWindow(SDL_Window, SW_HIDE); |
957 } | 942 } |
973 DIB_DestroyWindow(this); | 958 DIB_DestroyWindow(this); |
974 SDL_UnregisterApp(); | 959 SDL_UnregisterApp(); |
975 FlushMessageQueue(); | 960 FlushMessageQueue(); |
976 | 961 |
977 SDL_Window = NULL; | 962 SDL_Window = NULL; |
963 | |
964 #if defined(_WIN32_WCE) | |
965 | |
966 // Unload wince aygshell library to prevent leak | |
967 if( aygshell ) | |
968 { | |
969 FreeLibrary(aygshell); | |
970 aygshell = NULL; | |
971 } | |
972 #endif | |
973 | |
978 } | 974 } |
979 } | 975 } |
980 | 976 |
981 /* Exported for the windows message loop only */ | 977 /* Exported for the windows message loop only */ |
982 static void DIB_FocusPalette(_THIS, int foreground) | 978 static void DIB_FocusPalette(_THIS, int foreground) |