File diff r18159:2c94e9268b2c → r18160:133e96e28508
src/video/cocoa/fullscreen.mm
Show inline comments
 
@@ -250,7 +250,7 @@ class FullscreenSubdriver: public CocoaS
 
	}
 

	
 

	
 
	bool SetVideoMode(int w, int h)
 
	bool SetVideoMode(int w, int h, int bpp)
 
	{
 
		/* Define this variables at the top (against coding style) because
 
		 * otherwise GCC 4.2 barfs at the goto's jumping over variable initialization. */
 
@@ -266,14 +266,14 @@ class FullscreenSubdriver: public CocoaS
 

	
 
		/* See if requested mode exists */
 
		boolean_t exact_match;
 
		this->cur_mode = CGDisplayBestModeForParameters(this->display_id, this->device_depth, w, h, &exact_match);
 
		this->cur_mode = CGDisplayBestModeForParameters(this->display_id, bpp, w, h, &exact_match);
 

	
 
		/* If the mode wasn't an exact match, check if it has the right bpp, and update width and height */
 
		if (!exact_match) {
 
			int bpp;
 
			int act_bpp;
 
			CFNumberRef number = (const __CFNumber*) CFDictionaryGetValue(this->cur_mode, kCGDisplayBitsPerPixel);
 
			CFNumberGetValue(number, kCFNumberSInt32Type, &bpp);
 
			if (bpp != this->device_depth) {
 
			CFNumberGetValue(number, kCFNumberSInt32Type, &act_bpp);
 
			if (act_bpp != bpp) {
 
				DEBUG(driver, 0, "Failed to find display resolution");
 
				goto ERR_NO_MATCH;
 
			}
 
@@ -323,6 +323,7 @@ class FullscreenSubdriver: public CocoaS
 

	
 
		this->device_width  = CGDisplayPixelsWide(this->display_id);
 
		this->device_height = CGDisplayPixelsHigh(this->display_id);
 
		this->device_depth  = bpp;
 

	
 
		/* Setup double-buffer emulation */
 
		this->pixel_buffer = malloc(this->device_width * this->device_height * this->device_depth / 8);
 
@@ -418,22 +419,18 @@ ERR_NO_MATCH:
 
	}
 

	
 
public:
 
	FullscreenSubdriver(int bpp)
 
	FullscreenSubdriver()
 
	{
 
		if (bpp != 8 && bpp != 32) {
 
			error("Cocoa: This video driver only supports 8 and 32 bpp blitters.");
 
		}
 

	
 
		/* Initialize the video settings; this data persists between mode switches */
 
		this->display_id = kCGDirectMainDisplay;
 
		this->save_mode  = CGDisplayCurrentMode(this->display_id);
 

	
 
		if (bpp == 8) this->palette = CGPaletteCreateDefaultColorPalette();
 
		this->palette = CGPaletteCreateDefaultColorPalette();
 

	
 
		this->device_width  = CGDisplayPixelsWide(this->display_id);
 
		this->device_height = CGDisplayPixelsHigh(this->display_id);
 
		this->device_depth  = bpp;
 
		this->pixel_buffer   = NULL;
 
		this->device_depth  = 0;
 
		this->pixel_buffer  = NULL;
 

	
 
		this->num_dirty_rects = MAX_DIRTY_RECTS;
 
	}
 
@@ -512,14 +509,16 @@ public:
 
		return QZ_ListModes(modes, max_modes, this->display_id, this->device_depth);
 
	}
 

	
 
	virtual bool ChangeResolution(int w, int h)
 
	virtual bool ChangeResolution(int w, int h, int bpp)
 
	{
 
		int old_width  = this->device_width;
 
		int old_height = this->device_height;
 
		int old_bpp    = this->device_depth;
 

	
 
		if (SetVideoMode(w, h)) return true;
 
		if (bpp != 8 && bpp != 32) error("Cocoa: This video driver only supports 8 and 32 bpp blitters.");
 

	
 
		if (old_width != 0 && old_height != 0) SetVideoMode(old_width, old_height);
 
		if (SetVideoMode(w, h, bpp)) return true;
 
		if (old_width != 0 && old_height != 0) SetVideoMode(old_width, old_height, old_bpp);
 

	
 
		return false;
 
	}
 
@@ -583,9 +582,9 @@ CocoaSubdriver *QZ_CreateFullscreenSubdr
 
		return NULL;
 
	}
 

	
 
	FullscreenSubdriver *ret = new FullscreenSubdriver(bpp);
 
	FullscreenSubdriver *ret = new FullscreenSubdriver();
 

	
 
	if (!ret->ChangeResolution(width, height)) {
 
	if (!ret->ChangeResolution(width, height, bpp)) {
 
		delete ret;
 
		return NULL;
 
	}