--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/apgrfx/APGPRIV.CPP Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,191 @@
+// Copyright (c) 1997-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:
+// apgpriv.cpp
+//
+
+#include "APGPRIV.H"
+#include <e32hal.h>
+#include <s32strm.h>
+#include "APGCLI.H"
+#include "APGICNFL.H"
+#include "APGSTD.H"
+
+#define KDefaultIconSizeInPixels TSize(96,96)
+
+CApaIconPicture* CApaIconPicture::NewL(const TSize& aIconSizeInTwips, const TUid aAppUid)
+ {
+ CApaIconPicture* self=new(ELeave) CApaIconPicture(aIconSizeInTwips, aAppUid);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->CreateIconL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CApaIconPicture::CApaIconPicture(const TSize& aIconSizeInTwips, const TUid aAppUid)
+ : iAppUid(aAppUid),
+ iOriginalSizeInTwips(aIconSizeInTwips),
+ iScaleFactorWidth(1000),
+ iScaleFactorHeight(1000)
+ {
+ }
+
+void CApaIconPicture::ConstructL()
+ {
+ TMachineInfoV1Buf machineInfoBuf;
+ User::LeaveIfError( UserHal::MachineInfo(machineInfoBuf) );
+ TMachineInfoV1& machineInfo=machineInfoBuf();
+ iDisplaySizeInTwips = machineInfo.iPhysicalScreenSize;
+ iDisplaySizeInPixels = machineInfo.iDisplaySizeInPixels;
+ //
+ }
+
+CApaIconPicture::~CApaIconPicture()
+ {
+ delete iIcon;
+ }
+
+
+void CApaIconPicture::CreateIconL()
+ {
+ // calculate the size of icon required in pixels
+ TSize sizeInPixels;
+ sizeInPixels.iWidth = (iOriginalSizeInTwips.iWidth*iDisplaySizeInPixels.iWidth*ScaleFactorWidth())/(iDisplaySizeInTwips.iWidth*1000);
+ sizeInPixels.iHeight = (iOriginalSizeInTwips.iHeight*iDisplaySizeInPixels.iHeight*ScaleFactorHeight())/(iDisplaySizeInTwips.iHeight*1000);
+ // if the required icon is not square get a large one and gdi will squash it during drawing
+ CApaMaskedBitmap* newIcon = CApaMaskedBitmap::NewLC();
+ RApaLsSession ls;
+ CleanupClosePushL(ls);
+ User::LeaveIfError(ls.Connect());
+ User::LeaveIfError(ls.GetAppIcon(iAppUid, sizeInPixels, *newIcon));
+ delete iIcon;
+ iIcon = newIcon;
+ CleanupStack::PopAndDestroy(&ls);
+ CleanupStack::Pop(newIcon);
+ //
+ // set physical size
+ TSize iconSizeInTwips;
+ iconSizeInTwips.iWidth = (iOriginalSizeInTwips.iWidth*ScaleFactorWidth())/1000;
+ iconSizeInTwips.iHeight = (iOriginalSizeInTwips.iHeight*ScaleFactorHeight())/1000;
+ iIcon->SetSizeInTwips(iconSizeInTwips);
+ }
+
+void CApaIconPicture::Draw(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect,
+ MGraphicsDeviceMap* aMap) const
+ {
+ __ASSERT_DEBUG(iIcon,Panic(EDPanicNoIconInPicture));
+ //
+ TSize sizeInPixels(0,0);
+ sizeInPixels.iWidth = aMap->HorizontalTwipsToPixels(iOriginalSizeInTwips.iWidth);
+ sizeInPixels.iHeight = aMap->VerticalTwipsToPixels(iOriginalSizeInTwips.iHeight);
+ sizeInPixels.iWidth = (ScaleFactorWidth()*sizeInPixels.iWidth)/1000;
+ sizeInPixels.iHeight = (ScaleFactorHeight()*sizeInPixels.iHeight)/1000;
+ //
+ TRect originalRectInPixels(aTopLeft,sizeInPixels);
+ aGc.SetClippingRect(aClipRect);
+ aGc.DrawBitmap(originalRectInPixels,iIcon);
+ aGc.CancelClippingRect();
+ }
+
+
+void CApaIconPicture::InternalizeL(RReadStream& /*aStream*/)
+ {} //lint !e1762 Suppress member function could be made const
+
+
+
+void CApaIconPicture::ExternalizeL(RWriteStream& /*aStream*/)const
+ {}
+
+
+void CApaIconPicture::GetOriginalSizeInTwips(TSize& aOriginalSize) const
+ {
+ aOriginalSize = iOriginalSizeInTwips;
+ }
+
+
+void CApaIconPicture::SetScaleFactor(TInt aScaleFactorWidth,TInt aScaleFactorHeight)
+ {
+ iScaleFactorWidth = aScaleFactorWidth;
+ iScaleFactorHeight = aScaleFactorHeight;
+ TRAP_IGNORE(CreateIconL()); // ignore any error, just keep using the current icon instead
+ }
+
+
+TInt CApaIconPicture::ScaleFactorWidth() const
+ {
+ return iScaleFactorWidth;
+ }
+
+
+TInt CApaIconPicture::ScaleFactorHeight() const
+ {
+ return iScaleFactorHeight;
+ }
+
+
+TPictureCapability CApaIconPicture::Capability() const
+ {
+ return TPictureCapability(TPictureCapability::ENotScaleable,EFalse); // scalable, not cropable
+ }
+
+
+//
+// class CApaAppServiceInfoArrayImpl
+//
+
+void CleanupAppServiceArray(TAny* aServiceArray)
+ {
+ __ASSERT_DEBUG(aServiceArray, Panic(EPanicNullPointer));
+ CArrayFixFlat<TApaAppServiceInfo>* serviceArray = static_cast<CArrayFixFlat<TApaAppServiceInfo>*>(aServiceArray);
+ TInt serviceCount = serviceArray->Count();
+ if (serviceCount > 0)
+ {
+ for (TInt i = serviceCount - 1; i >= 0; i--)
+ {
+ (*serviceArray)[i].Release();
+ }
+ }
+ delete serviceArray;
+ serviceArray = 0;
+ }
+
+CApaAppServiceInfoArrayImpl* CApaAppServiceInfoArrayImpl::NewL(CArrayFix<TApaAppServiceInfo>* aServiceInfoArray)
+ {
+ CApaAppServiceInfoArrayImpl* self = new CApaAppServiceInfoArrayImpl(aServiceInfoArray);
+ if (!self)
+ {
+ CleanupAppServiceArray(aServiceInfoArray);
+ User::LeaveNoMemory();
+ }
+ return self;
+ }
+
+CApaAppServiceInfoArrayImpl::CApaAppServiceInfoArrayImpl(CArrayFix<TApaAppServiceInfo>* aServiceInfoArray)
+ : iServiceInfoArray(aServiceInfoArray)
+ {
+ }
+
+CApaAppServiceInfoArrayImpl::~CApaAppServiceInfoArrayImpl()
+ {
+ CleanupAppServiceArray(iServiceInfoArray);
+ iServiceInfoArray = NULL;
+ }
+
+TArray<TApaAppServiceInfo> CApaAppServiceInfoArrayImpl::Array()
+ {
+ return iServiceInfoArray->Array();
+ }
+
+
+