diff -r 000000000000 -r bde4ae8d615e os/graphics/windowing/windowserver/nonnga/CLIENT/scrdevextension.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/windowing/windowserver/nonnga/CLIENT/scrdevextension.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,124 @@ +// Copyright (c) 2000-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 "scrdevextension.h" +#include "../SERVER/w32cmd.h" +#include +#include "CLIENT.H" +#include "w32comm.h" + +CWsScreenDevice::CScrDevExtension::CScrDevExtension(RWsBuffer *aBuffer,TInt32 aWsHandle): MWsClientClass(aBuffer) + { + iWsHandle=aWsHandle; + __ASSERT_DEBUG(aBuffer,Panic(EW32PanicBadClientInterface)); + __ASSERT_DEBUG(aWsHandle,Panic(EW32PanicBadClientInterface)); + } + +CWsScreenDevice::CScrDevExtension::~CScrDevExtension() + { + //typeface store is not owned by this class, and is created/destroyed in CWsScreenDevice + } +/** Interface Extension capability + * Use of this interface going forward will allow the published client interface to be dynamically extended. + * Note that the pointer returned is only good for the lifetime of the called CBase derived object. + * @pre caller has already checked that the implementation is initialised using RepeatableConstruct + * @param aInterfaceId uniqueid or well known id of interface + * @return pointer to interface object matching this ID or NULL if no match. + **/ +void* CWsScreenDevice::CScrDevExtension::GetInterface(TUint aInterfaceId) + { + __ASSERT_DEBUG(this!=NULL,Panic(EW32PanicBadClientInterface)); + __ASSERT_DEBUG(iBuffer,Panic(EW32PanicBadClientInterface)); + __ASSERT_DEBUG(iWsHandle!=NULL,Panic(EW32PanicBadClientInterface)); + + switch (aInterfaceId) + { + case MTestScreenCapture::ETypeId: + { + return static_cast(this); + } + default: + break; + } + return NULL; +} +//Accessor to typeface store instance +CFbsTypefaceStore* CWsScreenDevice::CScrDevExtension::TypefaceStore() + { + return iTypefaceStore; + } +//Accessor to typeface store instance +void CWsScreenDevice::CScrDevExtension::SetTypefaceStore(CFbsTypefaceStore* aTypeFaceStore) + { + iTypefaceStore=aTypeFaceStore; + } + + +TInt CWsScreenDevice::CScrDevExtension::TranslateExtent(const TRect& aInitial, TRect& aTarget) const + { + // Current screen mode scale + TPckgBuf pntPkg; + TInt err = WriteReplyP(&pntPkg,EWsSdOpGetCurrentScreenModeScale); + TSize scale = pntPkg(); + + // Current screen mode offset + TPckgBuf soPkg; + err = WriteReplyP(&soPkg,EWsSdOpGetCurrentScreenModeScaledOrigin); + TPoint offset = soPkg(); + + // Calculate the top left point taking into account scale and offset + TInt startingPointWidth = (scale.iWidth * aInitial.iTl.iX) + offset.iX; + TInt startingPointHeight = (scale.iHeight * aInitial.iTl.iY) + offset.iY; + TPoint targetXY(startingPointWidth,startingPointHeight); + + // Calculate the extent size taking into account scale + TInt targetWidth = (scale.iWidth * aInitial.Width()); + TInt targetHeight = (scale.iHeight * aInitial.Height()); + TSize targetSize(targetWidth,targetHeight); + + aTarget.SetRect(targetXY,targetSize); + return err; + } + + +/** Gets the size of the screen device area in pixels. + +This function always causes a flush of the window server buffer. + +@return The x and y dimensions of the screen device area, in pixels. +@see CGraphicsDevice::SizeInPixels() */ +TInt CWsScreenDevice::CScrDevExtension::GetCompositedSize(TSize& aSize) const + { + TPckgBuf sizePkg; + TInt err = WriteReplyP(&sizePkg,EWsSdOpPixelSize); + aSize = sizePkg(); + return err; + } + + + +/** Saves the entire screen to a bitmap. + +This function always causes a flush of the window server buffer. + +@param aBitmap Bitmap to be filled with the screen image. +@return KErrNone if successful, otherwise one of the system-wide error codes. */ +TInt CWsScreenDevice::CScrDevExtension::ComposeScreen(const CFbsBitmap& aBitmap) const + { + TInt bitmapHandle = aBitmap.Handle(); + AddToBitmapArray(bitmapHandle); + TWsSdCmdCopyScreenToBitmap rectCompare(bitmapHandle); + return(WriteReply(&rectCompare,sizeof(rectCompare),EWsSdOpCopyScreenToBitmap)); + }