author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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 <graphics/displaycontrolbase.h> #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<MTestScreenCapture*>(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<TSize> pntPkg; TInt err = WriteReplyP(&pntPkg,EWsSdOpGetCurrentScreenModeScale); TSize scale = pntPkg(); // Current screen mode offset TPckgBuf<TPoint> 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<TSize> 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)); }