diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/gdi/sgdi/ZOOMFAC.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicsdeviceinterface/gdi/sgdi/ZOOMFAC.CPP Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,205 @@ +// Copyright (c) 2003-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: +// + +#include +#include "GDIPANIC.h" + +_LIT(KGdiTZoomFactorPanicCategory,"TZoomFactor"); + +// +// TZoomFactor +// + + +EXPORT_C TZoomFactor::TZoomFactor(): + iZoomFactor(EZoomOneToOne), + iDevice(NULL) +/** Constructs a default zoom factor object. + +Note that a TZoomFactor object cannot be used until a CGraphicsDevice to which +it is associated is specified (by SetGraphicsDeviceMap()). Therefore the other +constructor is normally used for constructing TZoomFactors. The default constructor +function is provided for use in TZoomFactor-derived classes. */ + {} + + +EXPORT_C TZoomFactor::~TZoomFactor() +/** Destructor. + +Frees resources owned by the object, prior to its destruction. */ + {} + + +EXPORT_C TInt TZoomFactor::ZoomFactor() const +/** Gets the zoom factor. + +@return The zoom factor */ + { + return iZoomFactor; + } + + +EXPORT_C void TZoomFactor::SetZoomFactor(TInt aZoomFactor) +/** Sets the zoom factor. + +@param aZoomFactor The desired zoom factor. */ + { + iZoomFactor=aZoomFactor; + } + + +EXPORT_C void TZoomFactor::SetTwipToPixelMapping(const TSize& aSizeInPixels,const TSize& aSizeInTwips) +// Ensure that aSizeInTwips fits inside aSizeInPixels when zoomed +/** Sets the twips to pixels mapping for the graphics device with which the zoom +factor is associated. + +This setting is used by all the twips to pixels and pixels to twips conversion +functions. + +@param aSizeInPixels The size of the graphics device area in pixels. +@param aSizeInTwips The size of the graphics device area in twips. */ + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice!=NULL,User::Panic(KGdiTZoomFactorPanicCategory,KErrNotFound)); + TInt devicepixelwidth=iDevice->HorizontalTwipsToPixels(aSizeInTwips.iWidth); + TInt devicepixelheight=iDevice->VerticalTwipsToPixels(aSizeInTwips.iHeight); + if(devicepixelwidth==0 || devicepixelheight==0) + { + iZoomFactor=0; + return; + } + iZoomFactor = (1000*aSizeInPixels.iWidth+(devicepixelwidth/2))/devicepixelwidth; + TInt temp = (1000*aSizeInPixels.iHeight+(devicepixelheight/2))/devicepixelheight; + if (tempHorizontalTwipsToPixels(((aTwipWidth*iZoomFactor)/125))+((aTwipWidth<0)?-4:4))/8; + } + + +EXPORT_C TInt TZoomFactor::VerticalTwipsToPixels(TInt aTwipHeight) const +/** Converts a vertical dimension from twips to pixels on the graphics +device. + +This function implements the pure virtual function defined in +MGraphicsDeviceMap::VerticalTwipsToPixels() */ + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice!=NULL,User::Panic(KGdiTZoomFactorPanicCategory,KErrNotFound)); + return (iDevice->VerticalTwipsToPixels(((aTwipHeight*iZoomFactor)/125))+((aTwipHeight<0)?-4:4))/8; + } + + +EXPORT_C TInt TZoomFactor::HorizontalPixelsToTwips(TInt aPixelWidth) const +/** Converts a horizontal dimension from pixels to twips on the graphics +device. + +This function implements the pure virtual function defined in +MGraphicsDeviceMap::HorizontalPixelsToTwips() */ + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice!=NULL,User::Panic(KGdiTZoomFactorPanicCategory,KErrNotFound)); + TInt temp = iDevice->HorizontalPixelsToTwips(aPixelWidth*8)*1000; + temp+=(temp<0)?-(iZoomFactor*4):iZoomFactor*4; + TInt eightTimesZoom=iZoomFactor*8; + if(eightTimesZoom) + return temp/eightTimesZoom; + return(0); + } + +EXPORT_C TInt TZoomFactor::VerticalPixelsToTwips(TInt aPixelHeight) const +/** Converts a vertical dimension from pixels to twips on the graphics +device. + +This function implements the pure virtual function defined in +MGraphicsDeviceMap::VerticalPixelsToTwips() */ + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice!=NULL,User::Panic(KGdiTZoomFactorPanicCategory,KErrNotFound)); + TInt temp = iDevice->VerticalPixelsToTwips(aPixelHeight*8)*1000; + temp+=(temp<0)?-(iZoomFactor*4):iZoomFactor*4; + TInt eightTimesZoom=iZoomFactor*8; + if(eightTimesZoom) + return temp/eightTimesZoom; + return(0); + } + +/** +@publishedAll +*/ +EXPORT_C TInt TZoomFactor::GetNearestFontInTwips(CFont*& aFont, const TFontSpec& aFontSpec) + { + return GetNearestFontToDesignHeightInTwips(aFont, aFontSpec); + } + +/** +Gets the font which is the nearest to the given font specification. +Matching to design height gives no guarantees on the actual physical size of the font. + +@param aFont On return, contains a pointer to the nearest font. +@param aFontSpec The specification of the font to be matched. +@return KErrNone if successful; a system-wide error code otherwise. +@publishedAll +@released +*/ +EXPORT_C TInt TZoomFactor::GetNearestFontToDesignHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec) + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice, User::Panic(KGdiTZoomFactorPanicCategory, KErrNotFound)); + TFontSpec fontSpec = aFontSpec; + fontSpec.iHeight = (fontSpec.iHeight * iZoomFactor + EZoomOneToOne / 2) / EZoomOneToOne; + return (const_cast(iDevice))->GetNearestFontToDesignHeightInTwips(aFont, fontSpec); + } + +/** +Gets the font which is the nearest to the given font specification. +Matching to maximum height returns a font that will fit within the height specified. + +@param aFont On return, contains a pointer to the nearest font. +@param aFontSpec The specification of the font to be matched. +@param aMaxHeight The maximum height within which the font must fit. +This overrides the height specified in aFontSpec. If maximum height +is greater than 1024 pixels, the function returns KErrTooBig. And +returns KErrArgument if equals to 1 pixel. +@return KErrNone if successful; a system-wide error code otherwise. +@publishedAll +@released +*/ +EXPORT_C TInt TZoomFactor::GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight) + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice, User::Panic(KGdiTZoomFactorPanicCategory, KErrNotFound)); + TFontSpec fontSpec = aFontSpec; + fontSpec.iHeight = (fontSpec.iHeight * iZoomFactor + EZoomOneToOne / 2) / EZoomOneToOne; + aMaxHeight = (aMaxHeight * iZoomFactor + EZoomOneToOne / 2) / EZoomOneToOne; + return (const_cast(iDevice))->GetNearestFontToMaxHeightInTwips(aFont, fontSpec, aMaxHeight); + } + +/** Releases the specified font. + +This function implements the pure virtual function defined in +MGraphicsDeviceMap::ReleaseFont() +@param aFont A pointer to the font to be released. */ +EXPORT_C void TZoomFactor::ReleaseFont(CFont* aFont) + { + GDI_ASSERT_ALWAYS_GENERAL(iDevice != NULL, User::Panic(KGdiTZoomFactorPanicCategory, KErrNotFound)); + ((MGraphicsDeviceMap*)iDevice)->ReleaseFont(aFont); + }