uiacceltk/hitchcock/plugins/openwfcrs/inc/displaypolicy.h
author hgs
Wed, 03 Nov 2010 19:29:22 +0200
changeset 64 9f8c0686fb49
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
//
hgs
parents:
diff changeset
    15
hgs
parents:
diff changeset
    16
#ifndef CDISPLAYPOLICY_H
hgs
parents:
diff changeset
    17
#define CDISPLAYPOLICY_H
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// INCLUDES
hgs
parents:
diff changeset
    20
#include <e32std.h>
hgs
parents:
diff changeset
    21
#include <e32base.h>
hgs
parents:
diff changeset
    22
#include <graphics/displaycontrolbase.h>
hgs
parents:
diff changeset
    23
#include <graphics/displaymapping.h>
hgs
parents:
diff changeset
    24
#include <graphics/displayconfiguration.h>
hgs
parents:
diff changeset
    25
#include <graphics/wsdisplaypolicy.h>
hgs
parents:
diff changeset
    26
// CLASS DECLARATION
hgs
parents:
diff changeset
    27
enum TCoordinateSpace;
hgs
parents:
diff changeset
    28
class MWsGraphicDrawerEnvironment;
hgs
parents:
diff changeset
    29
class MWsScreen;
hgs
parents:
diff changeset
    30
class MWsScreenConfigList;
hgs
parents:
diff changeset
    31
class MWsIniFile;
hgs
parents:
diff changeset
    32
/**
hgs
parents:
diff changeset
    33
 *  CDisplayPolicy
hgs
parents:
diff changeset
    34
 * 
hgs
parents:
diff changeset
    35
 */
hgs
parents:
diff changeset
    36
class CDisplayPolicy : public CBase
hgs
parents:
diff changeset
    37
	{
hgs
parents:
diff changeset
    38
public:
hgs
parents:
diff changeset
    39
	enum	TUiScaling
hgs
parents:
diff changeset
    40
		{
hgs
parents:
diff changeset
    41
		ENone=			0,
hgs
parents:
diff changeset
    42
		EInteger=		1,
hgs
parents:
diff changeset
    43
		EIsotropic=		2,
hgs
parents:
diff changeset
    44
		EAnisotropic=	3		
hgs
parents:
diff changeset
    45
		};
hgs
parents:
diff changeset
    46
	// Constructors and destructor
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
	/**
hgs
parents:
diff changeset
    49
	 * Destructor.
hgs
parents:
diff changeset
    50
	 */
hgs
parents:
diff changeset
    51
	~CDisplayPolicy();
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
	/**
hgs
parents:
diff changeset
    54
	 * Two-phased constructor.
hgs
parents:
diff changeset
    55
	 */
hgs
parents:
diff changeset
    56
	static CDisplayPolicy* NewL(MWsGraphicDrawerEnvironment* aEnv,MWsScreen* aScreen,TInt aScreenNumber);
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
	/**
hgs
parents:
diff changeset
    59
	 * Two-phased constructor.
hgs
parents:
diff changeset
    60
	 */
hgs
parents:
diff changeset
    61
	static CDisplayPolicy* NewLC(MWsGraphicDrawerEnvironment* aEnv,MWsScreen* aScreen,TInt aScreenNumber);
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
	void NewAppModesAvailable();
hgs
parents:
diff changeset
    64
	void GetAppModeList();
hgs
parents:
diff changeset
    65
	TInt MapCoordinates(TCoordinateSpace aSourceSpace, const TRect& aSource, 
hgs
parents:
diff changeset
    66
			TCoordinateSpace aTargetSpace, TRect& aTarget) const;
hgs
parents:
diff changeset
    67
	void AddVirtualResolutionCount(TInt& aDisplayCount) const; 
hgs
parents:
diff changeset
    68
	TInt AddVirtualResolutions(RArray<MDisplayControlBase::TResolution>& aResolutions) const;
hgs
parents:
diff changeset
    69
	MDisplayControlBase::TResolution AppModeToResolution(RArray<MDisplayControlBase::TResolution>& aResolutions,TInt appMode)const;
hgs
parents:
diff changeset
    70
	TInt GetSizeModeConfiguration(RArray<MDisplayControlBase::TResolution>& aResolutions,TInt aScreenSizeMode, 
hgs
parents:
diff changeset
    71
			TDisplayConfiguration& aConfig, TRect& aSizeModePosition) const;
hgs
parents:
diff changeset
    72
	
hgs
parents:
diff changeset
    73
	/*
hgs
parents:
diff changeset
    74
	 * Used when display is disconnected.
hgs
parents:
diff changeset
    75
	 */
hgs
parents:
diff changeset
    76
	TInt GetSizeModeConfiguration(TInt aScreenSizeMode,TDisplayConfiguration& aConfig, TRect& aSizeModePosition);
hgs
parents:
diff changeset
    77
	TBool SettingConfiguration(const RArray<MDisplayControlBase::TResolution>& aResolutions,
hgs
parents:
diff changeset
    78
			TDisplayConfiguration& aConfig)const;
hgs
parents:
diff changeset
    79
	TBool PolicyEnabled()const{return (iUiScaling==ENone)?EFalse:ETrue;}
hgs
parents:
diff changeset
    80
	
hgs
parents:
diff changeset
    81
	void SetCompositionInfo (const TDisplayConfiguration& aCompositionConfig,const TDisplayConfiguration& aUiConfig);
hgs
parents:
diff changeset
    82
	void SetSizeModeExtent(TRect& aExtent, TBitFlags32 /*aContext*/);
hgs
parents:
diff changeset
    83
	void	AdjustStageBufferSize(const TSize& aOldSize,TSize& aNewSize);
hgs
parents:
diff changeset
    84
	void	CalculateMinBufferSize(RArray<MDisplayControlBase::TResolution>& aResolutions, TInt aConnectionStatus);
hgs
parents:
diff changeset
    85
	TInt 	SuitableAppMode(MWsDisplayPolicy::TDisplayStatus aSituation);
hgs
parents:
diff changeset
    86
	void 	SetLastAppMode(TInt aMode);
hgs
parents:
diff changeset
    87
	
hgs
parents:
diff changeset
    88
	TSize	GetUiResolution();
hgs
parents:
diff changeset
    89
	TSize   GetUiResolutionAsTwips() const;
hgs
parents:
diff changeset
    90
	TRect 	GetPolicyAppMode();
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
private:
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
	class TAppMode
hgs
parents:
diff changeset
    95
		{
hgs
parents:
diff changeset
    96
	public:
hgs
parents:
diff changeset
    97
		TRect	iPixels;	//<Size and pisition in pixels
hgs
parents:
diff changeset
    98
		TSize	iTwips;		//<Size in TWips
hgs
parents:
diff changeset
    99
		TInt	iFlags;		//<Flags
hgs
parents:
diff changeset
   100
		enum	THighFlags	//<Policy flags are per app mode. Lower bits are defined by MWsScreenConfigList::TModeFlags 
hgs
parents:
diff changeset
   101
			{		//Currently none
hgs
parents:
diff changeset
   102
			};
hgs
parents:
diff changeset
   103
		
hgs
parents:
diff changeset
   104
		//The app modes are presented based on Normal rotation to calculate correctly with display resolutions
hgs
parents:
diff changeset
   105
		//which are always in normal rotation
hgs
parents:
diff changeset
   106
		TInt	iOrientations;	//<Index bits via CFbsBitGc::TGraphicsOrientation
hgs
parents:
diff changeset
   107
		TInt	iModeIndex;	//<Which screen mode index it refers to
hgs
parents:
diff changeset
   108
		
hgs
parents:
diff changeset
   109
		};
hgs
parents:
diff changeset
   110
	/**
hgs
parents:
diff changeset
   111
	 * Constructor for performing 1st stage construction
hgs
parents:
diff changeset
   112
	 */
hgs
parents:
diff changeset
   113
	CDisplayPolicy();
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
	/**
hgs
parents:
diff changeset
   116
	 * EPOC default constructor for performing 2nd stage construction
hgs
parents:
diff changeset
   117
	 */
hgs
parents:
diff changeset
   118
	void ConstructL(MWsGraphicDrawerEnvironment* aEnv,MWsScreen* aScreen,TInt aScreenNumber);
hgs
parents:
diff changeset
   119
	TBool FindVirtualMode(const RArray<MDisplayControlBase::TResolution>& aResolutions,
hgs
parents:
diff changeset
   120
			const CDisplayPolicy::TAppMode& aAppMode,TSize& aFullAppModeSize,TInt& aIndex,TInt& aBestScale) const;
hgs
parents:
diff changeset
   121
	
hgs
parents:
diff changeset
   122
	TSize ResolutionSize(RArray<MDisplayControlBase::TResolution>& aResolutions, const TSize aBestAppSize,
hgs
parents:
diff changeset
   123
			TInt aIndex, TInt aScale) const;
hgs
parents:
diff changeset
   124
	TSize ResolutionSizeFromTwips(RArray<MDisplayControlBase::TResolution>& aResolutions, TInt aAppMode,const TSize& aBestAppSize, 
hgs
parents:
diff changeset
   125
			TInt aIndex,TBool aSwapAxis) const;
hgs
parents:
diff changeset
   126
	TSize ResolutionSizeFromAssumedTwips(RArray<MDisplayControlBase::TResolution>& aResolutions,const TSize& aBestAppSize,
hgs
parents:
diff changeset
   127
			TInt aIndex,TBool aSwapAxis,TInt aScale) const;
hgs
parents:
diff changeset
   128
	
hgs
parents:
diff changeset
   129
	TBool MatchConfigToResolutions(const RArray<MDisplayControlBase::TResolution>& aResolutions,
hgs
parents:
diff changeset
   130
			const TDisplayConfiguration& aConfig, TInt aStartIndex, TInt& aResolutionIndex)const;
hgs
parents:
diff changeset
   131
	TBool SetConfigToResolution(TInt aAppMode, MDisplayControlBase::TResolution aResolution, TDisplayConfiguration& aConfig)const;
hgs
parents:
diff changeset
   132
	void CenteredAppInUi(const TSize& aUiSize,const TRect& aAppExtent,TRect& aSizeModePosition) const;
hgs
parents:
diff changeset
   133
	TInt MapCompositionToUi(const TRect& aSource, TRect& aTarget, TBool aIsReverseMapping) const;
hgs
parents:
diff changeset
   134
	void MapUiToApplication(const TRect& aSource, TRect& aTarget, TBool aIsReverseMapping) const;
hgs
parents:
diff changeset
   135
	TInt MapUiToDSA(const TRect& aSource, TRect& aTarget, TBool aIsReverseMapping) const;
hgs
parents:
diff changeset
   136
	void GetModeInfoL(const MWsScreenConfigList& aList,TInt aIndex,TPoint& aOffset,TSize& aSize,TAppMode& aMode) const;
hgs
parents:
diff changeset
   137
	TInt MinSizedModeIndex();
hgs
parents:
diff changeset
   138
	/** Used when calculating how to map app mode to hardware resolutions
hgs
parents:
diff changeset
   139
		Rounds up when .5
hgs
parents:
diff changeset
   140
	*/
hgs
parents:
diff changeset
   141
	class TFraction
hgs
parents:
diff changeset
   142
		{
hgs
parents:
diff changeset
   143
	public:
hgs
parents:
diff changeset
   144
		TFraction();
hgs
parents:
diff changeset
   145
		TInt operator*(TInt aInt) const;
hgs
parents:
diff changeset
   146
	public:
hgs
parents:
diff changeset
   147
		TInt iNumer;
hgs
parents:
diff changeset
   148
		TInt iDenom;
hgs
parents:
diff changeset
   149
		};
hgs
parents:
diff changeset
   150
private:
hgs
parents:
diff changeset
   151
	RArray<TAppMode>	iAppModes;
hgs
parents:
diff changeset
   152
	TInt iUiScaling;
hgs
parents:
diff changeset
   153
	MWsIniFile* iScreenIniFile;
hgs
parents:
diff changeset
   154
	MWsScreen* iScreen;
hgs
parents:
diff changeset
   155
	TSize iUiSizePixels;
hgs
parents:
diff changeset
   156
	TRect iAppSizePixels;
hgs
parents:
diff changeset
   157
	TSize iAppSizeTwips;
hgs
parents:
diff changeset
   158
	TSize iCompositionSizeTwips;
hgs
parents:
diff changeset
   159
	TSize iCompositionSizePixels;
hgs
parents:
diff changeset
   160
	TSize	iMinUiBufferSize;
hgs
parents:
diff changeset
   161
	TInt 	iNumNormalAppModes;
hgs
parents:
diff changeset
   162
	TInt	iLastAppMode;
hgs
parents:
diff changeset
   163
	TInt 	iConnectionStatus;
hgs
parents:
diff changeset
   164
	TInt 	iSmallestAppMode;
hgs
parents:
diff changeset
   165
	TSize 	iSmallestAppSize;
hgs
parents:
diff changeset
   166
	TDisplayConfiguration::TRotation iLastUiRotation;
hgs
parents:
diff changeset
   167
	TDisplayConfiguration::TRotation iLastCompositionRotation;
hgs
parents:
diff changeset
   168
	};
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
#endif // CDISPLAYPOLICY_H