graphicsutils/commongraphicsheaders/inc/displayconfiguration.h
author Faisal Memon <faisal.memon@nokia.com>
Thu, 06 May 2010 11:31:11 +0100
branchNewGraphicsArchitecture
changeset 47 48b924ae7197
parent 0 5d03bc08d59c
permissions -rw-r--r--
Applied patch 1, to provide a syborg specific minigui oby file. Need to compare this with the "stripped" version currently in the tree. This supplied version applies for Nokia builds, but need to repeat the test for SF builds to see if pruning is needed, or if the file needs to be device-specific.

// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//

/**
 @file
 @publishedPartner
 @prototype
*/

#ifndef _DISPLAYCONFIGURATION__INCLUDED_
#define _DISPLAYCONFIGURATION__INCLUDED_

#include <babitflags.h> 
#include <gdi.h>


/**
 * Base class for display configuration hierarchy. Defines common facilities for
 * all configurations (size, mask, accessibility).
 */
class TDisplayConfigurationBase
	{
public:
	/**
	 * Enumeration of all of the display configuration attributes. Used in combination
	 * when calling ClearSettings() and SettingsDefined(). If attributes are added,
	 * corresponding enumeration bits must also be added.
	 */
	enum TAttribute
		{
		EResolution = 0,
		ERotation,
		EResolutionTwips,
		
		EAttributeMax	//this should safely work with value 32.
		};
	/**
	 * 	Enumeration of the panics that may be raised when filling the display configuration
	 * 	These are all contractual input checks and should be avoidable by correctly written callers.
	 * 	
	 **/
	enum	TPanics
		{
			EPanicNegResolution=1,		//<Input resolution size has negative ordinate
			EPanicSemiZeroResolution,	//<Input resolution size has only 1 zero ordinate
			EPanicNonOpaqueBackground,	//<Input background color is not opaque
			EPanicIllegalRotation,		//<Input rotation value is out of range
			EPanicNegTwips,				//<Input twips size has negative ordinate 
			EPanicSemiZeroTwips,		//<Input twips size has only 1 zero ordinate 
			EPanicConfigInvalid			//<Input config version is invalid
		};
public:
	/**
	 * Reads the version field.
	 * 
	 * The version is set automatically in the constructor, or by the GetDisplayConfiguration() 
	 * method to indicate the sender's supported structure version. The version reported after 
	 * GetDisplayConfiguration() will match the version of one of the hierarchy of TDisplayConfiguration 
	 * classes documented in the header, and will never exceed the constructed version.
	 * 
	 * @return The defined version of this display configuration instance, in bytes.
	 */
	inline TInt Version() const;
	/**
	 * Marks the given attribute as undefined.
	 * 
	 * @param aAttribute The attribute to set as undefined.
	 */
	inline void Clear(TAttribute aAttribute);
	/**
	 * Marks all attributes as undefined.
	 */
	inline void ClearAll();
	/**
	 * Check if a particular member is defined.
	 * 
	 * @param aAttribute The attribute to check.
	 * @return ETrue if the attribute is defined, EFalse otherwise.
	 */
	inline TBool IsDefined(TAttribute aAttribute) const;
protected:
	/**
	 * Constructs a TDisplayConfigurationBase, setting the version to aVersion and all 
	 * attributes undefined.
	 * 
	 * Generally used internally in the constructor chain.
	 * 
	 * @param aVersion The defined size of this object.
	 */
	inline TDisplayConfigurationBase(TInt aVersion);
	/** 
	 * Internal function for determining whether a given field name is accessible for an 
	 * object of the current defined size. This must be used before trying to access any field.
	 * 
	 * @param aMember The name of the field to check.
	 * @return ETrue if the field is accessible, EFalse if not.
	 */
	template <class TMember> TBool MemberAccessible(const TMember& aMember) const
		{
		return iVersion>=sizeof(TMember)+TInt(&aMember)-TInt(this);
		}
	inline void Panic(TInt aPanicNo);	//Should be a TPanic
	/**
	 * Compares two TDisplayConfigurationBase instances.
	 * 
	 * Generally used internally in the comparison chain. The two objects are equivalent if 
	 * they have the same version and the same set of attributes defined.
	 * 
	 * @param aRhs The object to compare with this object
	 * @return ETrue if the objects are equivalent, EFalse if not.
	 */
	inline TBool operator == (const TDisplayConfigurationBase& aRhs) const;
private:
	//Intentionally blocked functionality
	inline TDisplayConfigurationBase();
	inline TDisplayConfigurationBase(const TDisplayConfigurationBase& aDisplayConfigurationBase);
	inline TDisplayConfigurationBase operator=(const TDisplayConfigurationBase& aRhs) const;

protected:
	/**
	 * Size to treat this object in bytes. Used to provide backward and forward
	 * compatibility.
	 */
	TInt iVersion;
	/**
	 * Indicates which fields in the configuration have defined values. If a field
	 * contains an undefined value, it must be ignored.
	 * See TAttribute for possible bit values.
	 */
	TBitFlags32 iDefined;
	};

/**
 * First collection of display configuration settings.
 * 
 */
class TDisplayConfiguration1 : public TDisplayConfigurationBase
	{
public:
	/** Defines possible rotation values. */
	enum TRotation
		{
		/** Normal orientation is supported. */
		ERotationNormal,
		/** A 90 degree rotation is supported. */
		ERotation90CW,
		/** A 180 degree rotation is supported. */
		ERotation180,
		/** A 270 degree rotation is supported. */
		ERotation270CW,
		/** Illegal rotation value. */
		ERotationIllegal
		};
public:
	/**
	 * Construct a TDisplayConfiguration1 version object with all attributes undefined.
	 * 
	 * This can be used to create a specific version of configuration:
	 * 	TDisplayConfiguration config(TDisplayConfiguration1.Version());
	 */
	inline TDisplayConfiguration1();
	/**
	 * Defines the resolution for the display, in pixels.
	 * 
	 * This always corresponds to a rotation of ERotationNormal. If a display can be 
	 * disabled, (0,0) can be used to do so. A display can be disabled if the 
	 * resolution list includes (0,0).
	 * 
	 * @param aSize The resolution in pixels.
	 */
	inline void SetResolution(const TSize& aSize);
	/**
	 * Retrieves the resolution, if defined.
	 * 
	 * If the resolution is undefined, the parameter is left unchanged. A resolution 
	 * of (0,0) means the display is disabled.
	 * 
	 * @see IsDefined
	 * @see TAttribute::EResolution
	 * 
	 * @param aSize Receives the resolution.
	 */
	inline TBool GetResolution(TSize& aSize) const;
	/**
	 * Defines the rotation for the display.
	 * 
	 * The values that can be passed in here correspond directly to UI rotation values that can be 
	 * passed in to CWsScreenDevice::SetScreenSizeAndRotation(), CWsScreenDevice::SetCurrentRotations() 
	 * and so on, although the type is defined locally to avoid undesirable interdependencies in 
	 * the interface. Variables of the two types may be freely cast to the other type.
	 * 
	 * @see CFbsBitGc::TGraphicsOrientation
	 * @see CWsScreenDevice
	 * 
	 * @param aRotation The display rotation.
	 */
	inline void SetRotation(TRotation);
	/**
	 * Retrieves the rotation, if defined.
	 * 
	 * If the rotation is undefined, the parameter is left unchanged.
	 * 
	 * @see IsDefined
	 * @see TAttribute::ERotation
	 * 
	 * @param aSize Receives the rotation
	 * @return ETrue if the rotation is defined, EFalse otherwise.
	 */
	inline TBool GetRotation(TRotation&)const;
	/**
	 * Defines the physical size of the display resolution area, in twips.
	 * 
	 * @param aSizeInTwips Provides the size in twips.
	 */
	inline void SetResolutionTwips(const TSize& aSize);
	/**
	 * Retrieves the physical size of the display resolution area, in twips, if defined.
	 * 
	 * For displays that have a fixed size, or can report their size, the physical 
	 * dimensions corresponding to the current resolution shall be defined. Where the display's 
	 * physical size cannot be determined (such as with composite video output, or a projector) 
	 * an arbitrary size shall be defined that reflects the pixel aspect ratio.
	 * 
	 * If the display is not connected or output is disabled, the physical size shall not 
	 * be defined. If the physical size is undefined, the parameter is left unchanged.
	 * 
	 * @see IsDefined
	 * @see TAttribute::EResolutionTwips
	 * 
	 * @param aSizeInTwips Receives size in twips.
	 * @return ETrue if the size is defined, EFalse if not.
	 */
	inline TBool GetResolutionTwips(TSize& aSize) const;
protected:
	/**
	 * Constructor for passing through a version already supplied.
	 * 
	 * Generally used internally in the constructor chain.
	 * 
	 * @param aVersion - Version of the class already calculated and being passed up 
	 * through the classes.
	 */
	inline TDisplayConfiguration1(TInt aVersion);
	/**
	 * Compares two TDisplayConfiguration1 instances.
	 * 
	 * Generally used internally in the comparison chain. The two objects are equivalent if they have 
	 * the same version, the same set of attributes defined and all the defined attributes are the 
	 * same. Undefined attributes are not compared.
	 * 
	 * @param aRhs The object to compare with this object.
	 * @return ETrue if the objects are equivalent, EFalse if not.
	 */
	inline TBool operator == (const TDisplayConfiguration1& aRhs)const;
private:
	//Intentionally blocked functionality
	inline TDisplayConfiguration1(const TDisplayConfiguration1& aDisplayConfiguration1);
	inline TDisplayConfiguration1 operator=(const TDisplayConfiguration1& aRhs) const;

private:
	//Streamable data members
	TSize 	iResolution;
	TInt	iRotation;	//0,1,2,3
	TSize	iTwipsSize;
	};

/**
 * The display configuration class for general use.
 * 
 * May be extended by adding a chain of classes between this and TDisplayConfiguration1.
 * If so, also update the typedef TDisplayConfigurationTop.
 * 
 */
class TDisplayConfiguration : public TDisplayConfiguration1
	{
private:	
	typedef TDisplayConfiguration1	TDisplayConfigurationTop;
public:
	/**
	 * Construct a configuration of the default version with all attributes undefined.
	 */
	inline TDisplayConfiguration():	TDisplayConfigurationTop()
		{}
	/**
	 * Copy constructor. This constructor will read the version field of the source and target 
	 * objects and only copy the common set of fields. Any remaining fields in the target 
	 * object will be set as undefined.
	 * 
	 * @param aDisplayConfiguration Configuration to be copied.
	 */
	inline TDisplayConfiguration(const TDisplayConfiguration& aDisplayConfiguration);
	/**
	 * Constructs a display configuration for a particular version.
	 * 
	 * This constructor is designed to be used with the value returned by 
	 * MDisplayControlBase::PreferredDisplayConfigurationVersion(), and initializes the members 
	 * to represent an object compatible with that.
	 * 
	 * The version used is the earlier of aVersion and the compile time version 
	 * of TDisplayConfiguration.
	 * 
	 * @param aVersion Caller-defined maximum version of configuration.
	 */
	inline TDisplayConfiguration(TInt aVersion);
	/**
	 * Compares two TDisplayConfiguration instances.
	 * 
	 * The two objects are equivalent if they have the same version, the same set of attributes defined
	 * and all the defined attributes are the same. Undefined attributes are not compared.
	 * 
	 * @param aRhs The object to compare with this object.
	 * @return ETrue if the objects are equivalent, EFalse if not.
	 */
	inline TBool operator == (const TDisplayConfiguration& aRhs)const
		{
		return TDisplayConfiguration1::operator==(aRhs);
		}
private:
	//Intentionally blocked functionality
	inline TDisplayConfiguration operator=(const TDisplayConfiguration& aRhs) const;
	};

#include <graphics/displayconfiguration.inl>
#endif // _DISPLAYCONFIGURATION__INCLUDED_