diff options
| author | Nicolas Bacca | 2003-05-11 14:05:00 +0000 | 
|---|---|---|
| committer | Nicolas Bacca | 2003-05-11 14:05:00 +0000 | 
| commit | 001dc622cdb0cf1050cb63dbae8c8a6d4a460471 (patch) | |
| tree | 0a67cb30827f157e4c14f4289ce36dbf7cada5d5 /backends | |
| parent | e223985e139c099fa4272bd2d4e85b020c21f216 (diff) | |
| download | scummvm-rg350-001dc622cdb0cf1050cb63dbae8c8a6d4a460471.tar.gz scummvm-rg350-001dc622cdb0cf1050cb63dbae8c8a6d4a460471.tar.bz2 scummvm-rg350-001dc622cdb0cf1050cb63dbae8c8a6d4a460471.zip  | |
COMI and Jornada 820 fixes
svn-id: r7454
Diffstat (limited to 'backends')
| -rw-r--r-- | backends/wince/wince.cpp | 50 | 
1 files changed, 47 insertions, 3 deletions
diff --git a/backends/wince/wince.cpp b/backends/wince/wince.cpp index d0a3f04192..0e0ca66ccd 100644 --- a/backends/wince/wince.cpp +++ b/backends/wince/wince.cpp @@ -146,6 +146,15 @@ pseudoGAPI availablePseudoGAPI[] = {  	  16,  	  0xA8  	}, +	{ TEXT("ORG_FR"),			   /* smartphone SPV - more tests :) */ +	  (void*)0x46000020, +	  176, +	  220, +	  2, +	  352, +	  16, +	  0xA0 +	},  	{ 0, 0, 0, 0, 0, 0, 0, 0 }  }; @@ -158,7 +167,8 @@ bool canCacheGAPIBuffer;  extern char noGAPI; - +extern bool wide_screen; +extern bool extra_wide_screen;  extern float _screen_factor; @@ -573,6 +583,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin  	// See if GX.dll is present   	GAPI_handle = LoadLibrary(TEXT("gx.dll")); +  	if (GAPI_handle) {  		IMPORT(GAPI_handle, dynamicGXOpenInput, tGXOpenInput, "?GXOpenInput@@YAHXZ", NULL)  		IMPORT(GAPI_handle, dynamicGXGetDefaultKeys, tGXGetDefaultKeys, "?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z", NULL) @@ -1279,7 +1290,7 @@ OSystem *OSystem_WINCE3::create(int gfx_mode, bool full_screen) {  	reducePortraitGeometry(); -	if (smartphone || high_res || ((noGAPI || !gfx_mode_switch) && GetSystemMetrics(SM_CXSCREEN) < 320))  +	if (smartphone || (high_res && !wide_screen) || ((noGAPI || !gfx_mode_switch) && GetSystemMetrics(SM_CXSCREEN) < 320))   		SetScreenMode(1);  	Cls(); @@ -1322,14 +1333,34 @@ void OSystem_WINCE3::load_gfx_mode() {  	if (!high_res) {  		_gfx_buf = (byte*)malloc((320 * 240) * sizeof(byte));	 +		if (!_gfx_buf) { +			drawError("Not enough memory - main buffer"); +			exit(1); +		}  		_overlay_buf = (byte*)malloc((320 * 240) * sizeof(uint16)); +		if (!_overlay_buf) { +			drawError("Not enough memory - overlay buffer"); +			exit(1); +		}  	}  	else {  		_gfx_buf = (byte*)malloc((640 * 480) * sizeof(byte));	 +		if (!_gfx_buf) { +			drawError("Not enough memory - main buffer"); +			exit(1); +		}  		_overlay_buf = (byte*)malloc((320 * 240) * sizeof(uint16)); +		if (!_overlay_buf) { +			drawError("Not enough memory - overlay buffer"); +			exit(1); +		}  	}  	//_ms_backup = (byte*)malloc((40 * 40 * 3) * sizeof(byte));  	_ms_backup = (byte*)malloc((MAX_MOUSE_W * MAX_MOUSE_H) * sizeof(uint16)); +	if (!_ms_backup) { +		drawError("Not enogh memory - mouse cursor"); +		exit(1); +	}  }  void OSystem_WINCE3::unload_gfx_mode() { @@ -1383,14 +1414,21 @@ void OSystem_WINCE3::update_screen() {  		}  		else {  			int i; +			  			for (i=0; i<num_of_dirty_square; i++) { +				if (wide_screen && extra_wide_screen)  +					Blt_part(_gfx_buf + ((high_res ? 640 : 320) * ds[i].y) + ds[i].x, ds[i].x, ds[i].y, ds[i].w, ds[i].h, (high_res ? 640 : 320), false); +				else +				if (wide_screen) +					Blt_part(_gfx_buf + ((high_res ? 640 : 320) * ds[i].y) + ds[i].x, (!high_res ? ds[i].x : ds[i].x/2), (!high_res ? ds[i].y : ds[i].y/2), ds[i].w, ds[i].h, (high_res ? 640 : 320), false); +				else  				if (smartphone)  					Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, ds[i].x * 2 / 3, ds[i].y * 7 / 8, ds[i].w, ds[i].h, 320, false);  				else  				if (high_res)  					Blt_part(_gfx_buf + (640 * ds[i].y) + ds[i].x, ds[i].x/2, ds[i].y/2, ds[i].w, ds[i].h, 640, false);  				else -					Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, ((GetScreenMode() || GetSystemMetrics(SM_CXSCREEN) >= 320) ? ds[i].x : ds[i].x * 3/4), ds[i].y, ds[i].w, ds[i].h, 320, false); +					Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, (GetScreenMode() ? ds[i].x : ds[i].x * 3/4), ds[i].y, ds[i].w, ds[i].h, 320, false);  			}  			num_of_dirty_square = 0;  		} @@ -1419,10 +1457,16 @@ void OSystem_WINCE3::draw_mouse() {  	int h = _ms_cur.h;  	byte color;  	byte *src = _ms_buf;		// Image representing the mouse +	int toolbar_offset = (high_res && wide_screen ? 440 : 200);  	if (_overlay_visible && (x >= 320 || y>=240))  		return; +	 +	// Do not draw the mouse over the toolbar +	if (!hide_toolbar && (y >= toolbar_offset)) +		return; +  	// clip the mouse rect, and addjust the src pointer accordingly  	if (x < 0) {  		w += x;  | 
