camerauis/cameraapp/generic/src/camstartuplogo.cpp
branchRCL_3
changeset 24 bac7acad7cb3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/camstartuplogo.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2010 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:  CCoeControl to show a logo at camera application startup
+*
+*/
+
+#include <fbs.h>
+#include <e32math.h>
+#include <e32debug.h>
+#include <AknIconUtils.h>
+#include <cameraapp.mbg>
+#include "camlogging.h"
+#include "camstartuplogo.h"
+
+_LIT(KCamBitmapFile, "z:\\resource\\apps\\cameraapp.mif");
+const TInt KStartupLogoOrdinalPriority( 2 );
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+//
+CCamStartupLogo* CCamStartupLogo::NewL(CCamStartupLogoController& aController,
+                                       const TRect& aRect)
+    {
+    PRINT(_L("Camera => CCamStartupLogo::NewL"))
+    CCamStartupLogo* self = new (ELeave) CCamStartupLogo(aController, aRect);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    PRINT(_L("Camera <= CCamStartupLogo::NewL"))
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CCamStartupLogo::CCamStartupLogo(CCamStartupLogoController& aController,
+                                 const TRect& aRect)
+    : iRect(aRect), iController(aController)
+    {
+    // No implementation needed
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCamStartupLogo::~CCamStartupLogo()
+    {
+    iController.RemoveObserver(this);
+
+    delete iLogo;
+    delete iLogoMask;
+    }
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCamStartupLogo::ConstructL()
+    {
+    PRINT(_L("Camera => CCamStartupLogo::ConstructL"))
+
+    iController.AddObserver(this);
+
+    if (iController.State() == EStartupLogoVisible)
+        {
+        ShowL();
+        }
+
+    PRINT(_L("Camera <= CCamStartupLogo::ConstructL"))
+    }
+
+// ---------------------------------------------------------------------------
+// CCamStartupLogo::StartupLogoControllerStateChanged
+// ---------------------------------------------------------------------------
+//
+void CCamStartupLogo::StartupLogoControllerStateChanged(
+    TStartupLogoState aNewState)
+    {
+    PRINT(_L("Camera => CCamStartupLogo::StartupLogoControllerStateChanged"))
+
+    if (aNewState == EStartupLogoNotVisible)
+        {
+        Hide();
+        }
+    else if (aNewState == EStartupLogoVisible)
+        {
+        TRAP_IGNORE(ShowL()); 
+        }
+    else
+        {
+        PRINT(_L("Camera <> StartupLogoControllerStateChanged - unknown state"))
+        }
+
+    PRINT(_L("Camera <= CCamStartupLogo::StartupLogoControllerStateChanged"))
+    }
+
+// ---------------------------------------------------------------------------
+// CCamStartupLogo::ShowL
+// ---------------------------------------------------------------------------
+//
+void CCamStartupLogo::ShowL()
+    {
+    PRINT(_L("Camera => CCamStartupLogo::ShowL"))
+
+    if (!iLogo || !iLogoMask)
+        {
+        delete iLogo;
+        iLogo = NULL;
+        delete iLogoMask;
+        iLogoMask = NULL;
+
+        TTime t0;
+        t0.UniversalTime();
+
+        AknIconUtils::CreateIconL(iLogo,
+                                  iLogoMask,
+                                  KCamBitmapFile,
+                                  EMbmCameraappQgn_menu_cams,
+                                  EMbmCameraappQgn_menu_cams_mask);
+        
+        TSize logoSize(iRect.Size().iWidth/2, iRect.Size().iHeight/2);
+        AknIconUtils::SetSize(iLogo, logoSize);
+
+        TTime t1;
+        t1.UniversalTime();
+
+        PRINT1(_L("Camera <> Startup icon load took %d us"), I64LOW(t1.MicroSecondsFrom(t0).Int64()))
+        }
+
+    if (!iWindowCreated)
+        {
+        CreateWindowL();
+        iWindowCreated = ETrue;
+        }
+
+    if (!IsActivated())
+        {
+        ActivateL();
+        }
+
+    SetExtentToWholeScreen();
+
+    MakeVisible(ETrue);
+    RDrawableWindow* window = DrawableWindow();
+    if (window)
+        {
+        window->SetOrdinalPosition(0, KStartupLogoOrdinalPriority);
+        }
+
+    PRINT(_L("Camera <= CCamStartupLogo::ShowL"))
+    }
+
+// ---------------------------------------------------------------------------
+// CCamStartupLogo::Hide
+// ---------------------------------------------------------------------------
+//
+void CCamStartupLogo::Hide()
+    {
+    PRINT(_L("Camera => CCamStartupLogo::Hide"))
+
+    MakeVisible(EFalse);
+
+    if (iWindowCreated)
+        {
+        CloseWindow();
+        iWindowCreated = EFalse;
+        }
+
+    delete iLogo;
+    iLogo = NULL;
+    delete iLogoMask;
+    iLogoMask = NULL;
+
+    PRINT(_L("Camera <= CCamStartupLogo::Hide"))
+    }
+
+// ---------------------------------------------------------------------------
+// CCamStartupLogo::Draw
+// ---------------------------------------------------------------------------
+//
+void CCamStartupLogo::Draw(const TRect& /*aRect*/) const
+    {
+    PRINT(_L("Camera <> CCamStartupLogo::Draw"))
+
+    CWindowGc& gc = SystemGc();
+
+    gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
+    gc.SetBrushColor(TRgb::Color16MA(0xFF000000)); // opaque black
+    gc.SetPenStyle(CGraphicsContext::ENullPen);
+    gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+    gc.DrawRect(Rect());
+
+    if (iLogo && iLogoMask)
+        {
+        TSize logoSize(iLogo->SizeInPixels());
+        TPoint logoTl(iRect.Center().iX - logoSize.iWidth / 2,
+                      iRect.Center().iY - logoSize.iHeight / 2);
+        gc.BitBltMasked(logoTl, iLogo, TRect(logoSize), iLogoMask, EFalse);
+        }
+    }
+