windowing/windowserverplugins/openwfc/src/fbrenderstage.cpp
branchRCL_3
changeset 5 25f95128741d
parent 0 5d03bc08d59c
child 19 bbf46f59e123
--- a/windowing/windowserverplugins/openwfc/src/fbrenderstage.cpp	Wed Mar 31 23:34:07 2010 +0300
+++ b/windowing/windowserverplugins/openwfc/src/fbrenderstage.cpp	Wed Apr 14 17:19:46 2010 +0300
@@ -19,6 +19,7 @@
 #include <graphics/wsdisplaycontrol.h>
 #include "displaypolicy.h"
 #include "utils.h"
+#include <graphics/sgutils.h>
 
 #if defined(__WINS__) && defined(_DEBUG)
 #define DEBUGOSB iRenderTarget->UpdateDebugWin();
@@ -154,7 +155,18 @@
 	if (iniFile->FindVar(iNextScreenDevice->ScreenNumber(), KFlickerBufferMode, flickerBufferModeName))
 		displayMode = ParseDisplayMode(flickerBufferModeName);
 	if (displayMode == ENone)
-		displayMode = iNextScreenDevice->DisplayMode();
+	    {
+        // Display render stage MWsScreenDevice::DisplayMode now reports the supported screendriver display mode in 32bpp. 
+        // It is necessary in order to maintain BC with 3rd party apps and DSA framework.
+        // The reported display mode may be different from the actual UI surface pixel format, so flicker buffer
+        // must not rely on DisplayMode() to determine pixel format for its rendering target.
+        //
+        MWsUiBuffer* uiBuf = aNextStage->ObjectInterface<MWsUiBuffer>();
+        if (uiBuf)
+            {
+            displayMode = SgUtils::PixelFormatToDisplayMode(uiBuf->PixelFormat());
+            }
+	    }
 	STD_ASSERT_DEBUG(displayMode!=ENone, EPluginPanicNoDisplayModeFound);
 	
 	const TUint32 usage = ESgUsageDirectGdiTarget | ESgUsageWindowGcSource;