--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkThumbnailPopupControl.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2002 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:
+* Provides methods for Control for thumbnail popup window.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkThumbnailPopupControl.h"
+#include <PbkView.rsg>
+#include <barsread.h> // TResourceReader
+#include <coemain.h> // CCoeEnv
+#include <eikenv.h> // CCoeMain
+#include <aknappui.h>
+#include <PbkDebug.h>
+
+#include <aknlayout.cdl.h>
+#include <applayout.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+
+// Unnamed namespace for local definitions
+namespace {
+
+// LOCAL CONSTANTS AND MACROS
+inline TRect RectFromCoords(const TRect& aParent, TAknWindowLineLayout& aLayout)
+ {
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect(aParent, aLayout);
+ return layoutRect.Rect();
+ }
+
+} // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+CPbkThumbnailPopupControl* CPbkThumbnailPopupControl::NewL()
+ {
+ CPbkThumbnailPopupControl* self = new (ELeave) CPbkThumbnailPopupControl();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CPbkThumbnailPopupControl::~CPbkThumbnailPopupControl()
+ {
+ delete iBitmap;
+ }
+
+void CPbkThumbnailPopupControl::ChangeBitmap(
+ CFbsBitmap* aBitmap,
+ CEikListBox* /*aListBox*/)
+ {
+
+ if ( !aBitmap )
+ {
+ return;
+ }
+
+ if(aBitmap != iBitmap && aBitmap != NULL )
+ {
+ delete iBitmap;
+ iBitmap = aBitmap;
+ }
+
+
+ if (iBitmap)
+ {
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("Thumbnail size(W:%d H:%d)"),
+ iBitmap->SizeInPixels().iWidth,
+ iBitmap->SizeInPixels().iHeight);
+
+ TRect appRect = iAvkonAppUi->ApplicationRect();
+ TAknLayoutRect statusPaneRect;
+ statusPaneRect.LayoutRect(appRect, AknLayout::status_pane(appRect, 0));
+
+ TSize bitmapSize = iBitmap->SizeInPixels();
+
+ /// bitmap blit position
+ TPoint controlPoint;
+
+ // bitmap
+ TAknWindowComponentLayout componentThumbnail =
+ AknLayoutScalable_Apps::popup_phob_thumbnail_window_g1();
+
+ // center of bitmap
+ TAknWindowComponentLayout componentThumbnailCenter =
+ AknLayoutScalable_Apps::aid_phob_thumbnail_center_pane();
+
+ TAknWindowLineLayout lineThumbnail = componentThumbnail.LayoutLine();
+ TAknLayoutRect aknRectThumbnail;
+ aknRectThumbnail.LayoutRect( TRect(), componentThumbnail );
+
+ TAknWindowLineLayout lineThumbnailCenter = componentThumbnailCenter.LayoutLine();
+ TAknLayoutRect aknRectThumbnailCenter;
+ aknRectThumbnailCenter.LayoutRect( TRect(), componentThumbnailCenter );
+
+ // Calculate Y position
+ const TInt imageMaxHeight( aknRectThumbnail.Rect().Height() );
+ if ( bitmapSize.iHeight/2 < aknRectThumbnailCenter.Rect().Height() )
+ {
+ controlPoint.iY = aknRectThumbnailCenter.Rect().Height() - bitmapSize.iHeight/2;
+ iControlSize.iHeight = bitmapSize.iHeight;
+ }
+ else
+ {
+ iCrop.iY = (bitmapSize.iHeight - imageMaxHeight )/2;
+ controlPoint.iY = 1;
+ iControlSize.iHeight = imageMaxHeight;
+ }
+
+ // calculate the X position of the bitmap
+ const TInt imageMaxWidth( aknRectThumbnail.Rect().Width() );
+ controlPoint.iX = aknRectThumbnailCenter.Rect().Width() - bitmapSize.iWidth/2;
+ if (controlPoint.iX <= 0)
+ {
+ controlPoint.iX = 0;
+ iCrop.iX = (bitmapSize.iWidth - imageMaxWidth)/2;
+ iControlSize.iWidth = imageMaxWidth;
+ }
+ else
+ {
+ iCrop.iX = 0;
+ iControlSize.iWidth = bitmapSize.iWidth;
+ }
+
+ // x-coordinates of aknRectThumbnail's rect is calculated wrong in
+ // Arab&Hebrew case. If Arab/Hebrew layout is used, update only
+ // y-coordinate to control point.
+ if (aknRectThumbnail.Rect().iTl.iX > 0)
+ {
+ controlPoint += aknRectThumbnail.Rect().iTl;
+ }
+ else
+ {
+ controlPoint.iY += aknRectThumbnail.Rect().iTl.iY;
+ }
+
+ // calculate the actual bitmap position according to LAF
+ TAknWindowLineLayout popupLayout = AppLayout::popup_pbook_thumbnail_window();
+ TRect popupWindowRect = RectFromCoords(statusPaneRect.Rect(), popupLayout);
+ controlPoint += popupWindowRect.iTl;
+
+
+ // Shadow size
+ TAknWindowComponentLayout componentThumbnailShadow =
+ AknLayoutScalable_Apps::popup_phob_thumbnail_window_g2();
+ TAknWindowLineLayout lineThumbnailShadow = componentThumbnailShadow.LayoutLine();
+ TAknLayoutRect aknRectThumbnailShadow;
+ aknRectThumbnailShadow.LayoutRect( TRect(), componentThumbnailShadow );
+
+ iShadowWidth = aknRectThumbnailShadow.Rect().iTl.iX - aknRectThumbnail.Rect().iTl.iX ;
+ if ( iShadowWidth < 0 )
+ {
+ iShadowWidth = aknRectThumbnail.Rect().iTl.iX - aknRectThumbnailShadow.Rect().iTl.iX;
+ }
+ iShadowHeight = aknRectThumbnailShadow.Rect().iTl.iY - aknRectThumbnail.Rect().iTl.iY;
+ if ( iShadowHeight < 0 )
+ {
+ iShadowHeight = aknRectThumbnail.Rect().iTl.iY - aknRectThumbnailShadow.Rect().iTl.iY;
+ }
+
+ // increment shadow size
+ iControlSize.iWidth += iShadowWidth;
+ iControlSize.iHeight += iShadowHeight;
+
+ // set the control size
+ SetExtent(controlPoint, iControlSize);
+ }
+
+ DrawNow();
+ }
+
+void CPbkThumbnailPopupControl::Draw
+ (const TRect& /*aRect*/) const
+ {
+ CWindowGc& gc = SystemGc();
+
+ if (iBitmap)
+ {
+ // draw the bitmap
+ PBK_DEBUG_PRINT(PBK_DEBUG_STRING("Thumbnail draw (Left:%d Top:%d Right:%d Bottom:%d)"),
+ Position().iX,
+ Position().iY,
+ Position().iX + iBitmap->SizeInPixels().iWidth,
+ Position().iY + iBitmap->SizeInPixels().iHeight);
+
+ gc.BitBltMasked( TPoint(iShadowWidth, iShadowHeight),
+ iThumbBackg,
+ TRect(0,0,iThumbBackg->SizeInPixels().iWidth, iThumbBackg->SizeInPixels().iHeight ),
+ iThumbBackgMask,
+ EFalse);
+ gc.BitBlt(TPoint(), iBitmap);
+ }
+ }
+
+CPbkThumbnailPopupControl::CPbkThumbnailPopupControl()
+ {
+ }
+
+void CPbkThumbnailPopupControl::ConstructL()
+ {
+ CreateWindowL();
+ MakeVisible(EFalse);
+ SetExtent(TPoint(0,0),TSize(0,0));
+ ActivateL();
+ }
+
+void CPbkThumbnailPopupControl::SetThumbnailBackg( CFbsBitmap* aThumbBackg, CFbsBitmap* aThumbBackgMask )
+ {
+ iThumbBackg = aThumbBackg;
+ iThumbBackgMask = aThumbBackgMask;
+ }
+
+void CPbkThumbnailPopupControl::MakeControlVisible( TBool aVisible )
+ {
+ // make control visible
+ MakeVisible(aVisible);
+ // MakeVisible does not seem to make sure the control is redrawn
+ DrawDeferred();
+ }
+
+
+// End of File