src/screensaverindicatoricon.cpp
changeset 0 040fcad49f44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicatoricon.cpp	Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2003 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:   CScreensaverIndicatorIcon implementation.
+*
+*/
+
+
+
+#include <AknsUtils.h>
+#include <barsread.h>
+
+#include "screensaverindicatoricon.h"
+
+//
+// CScreensaverIconIndicator
+//
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::~CScreensaverIconIndicator
+// -----------------------------------------------------------------------------
+//
+CScreensaverIndicatorIcon::~CScreensaverIndicatorIcon()
+    {
+    delete iIcon;
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::Draw
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::Draw(CWindowGc& aGc) const
+    {
+    aGc.SetPenColor(iTextColor);
+    aGc.SetBrushColor(iBgColor);
+    if (Visible() && iIcon)
+        {
+        if (!iIcon->Mask())
+            {
+            aGc.BitBlt(iTopLeft, iIcon->Bitmap(), iRect);
+            }
+        else
+            {
+            aGc.BitBltMasked(iTopLeft, iIcon->Bitmap(), iRect, iIcon->Mask(),
+                    ETrue);
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::ConstructL(TResourceReader &aReader,
+        TUint32 aBgColor, TUint aTextColor)
+    {
+    CScreensaverIndicator::ConstructL(aReader, aBgColor, aTextColor);
+
+    // Icon & mask ids
+    TInt id = aReader.ReadInt32();
+    TInt maskid = aReader.ReadInt32();
+
+    // Icon & mask skin identifiers
+    TInt skinid = aReader.ReadInt32();
+    TInt skinmaskid = aReader.ReadInt32();
+
+    iIcon = CGulIcon::NewL();
+
+    CFbsBitmap* bmp= NULL;
+    CFbsBitmap* mask= NULL;
+
+    // Load skinned bitmap
+    AknsUtils::CreateColorIconLC(AknsUtils::SkinInstance(),
+            MakeSkinItemId(skinid),
+            KAknsIIDNone, // Lie so that we get default color, not skin color
+            0, // No color group
+            bmp, mask, AknIconUtils::AvkonIconFileName(), id, maskid,
+            iTextColor);
+
+    CleanupStack::Pop(2);
+
+    // Save the icon
+    iIcon->SetBitmap(bmp);
+    iIcon->SetMask(mask);
+
+    // Set initial size for SVG graphics, this is later altered
+    // as the layout is known
+    // Set desired size for SVG graphics (height from LAF, width 3 x height)
+    TAknLayoutRect screenLayout;
+    screenLayout.LayoutRect(TRect(0, 0, 0, 0), AknLayout::screen() );
+    TRect screenRect = screenLayout.Rect();
+    TAknLayoutRect powerSavePaneLayout;
+    powerSavePaneLayout.LayoutRect(screenRect,
+            AknLayout::Power_save_pane_descendants_Line_1() );
+    TRect powerSavePaneRect = powerSavePaneLayout.Rect();
+    TAknLayoutRect rect;
+    rect.LayoutRect(powerSavePaneRect,
+            AknLayout::Power_save_pane_descendants_Line_3() );
+    TInt height = rect.Rect().Height();
+    TSize iconSize(3 * height, height);
+    AknIconUtils::SetSize(iIcon->Bitmap(), iconSize);
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::SetupDrawingParameters
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::SetupDrawingParameters(const TPoint &aCorner,
+        const TRect& aParentRect)
+    {
+    iVisible = EFalse;
+
+    if (!iIcon)
+        {
+        return;
+        }
+
+    TSize size = iIcon->Bitmap()->SizeInPixels();
+    iTopLeft.iX = aCorner.iX;
+    if (iAlignment == ESsAlignRight)
+        {
+        // Change topright to topleft.      
+        iTopLeft.iX -= size.iWidth;
+        }
+    // Center bitmap in y direction.
+    iTopLeft.iY = aCorner.iY + (aParentRect.Size().iHeight / 2) - (size.iHeight / 2) - 2;
+
+    iRect = TRect(0, 0, size.iWidth, size.iHeight);
+
+    iVisible = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::CheckVisibilityConditions
+// -----------------------------------------------------------------------------
+//
+TBool CScreensaverIndicatorIcon::CheckVisibilityConditions() const
+    {
+    return (iIcon == 0 ? EFalse : ETrue);
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::Payload
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::Payload(TIndicatorPayload& aPayload) const
+    {
+    aPayload.iType = EPayloadTypeIcon;
+    aPayload.iInteger = -1;
+    aPayload.iText = KNullDesC;
+    aPayload.iIsDisplayed = Visible();
+    aPayload.iIcon = iIcon;
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::SetPayload
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::SetPayload(const TIndicatorPayload& /*aPayload*/)
+    {
+    // Nothing to set, payload is icon and it is created from resources.    
+    }
+
+// -----------------------------------------------------------------------------
+// CScreensaverIconIndicator::SetIconLayout
+// -----------------------------------------------------------------------------
+//
+void CScreensaverIndicatorIcon::SetIconLayout(TAknLayoutRect& aLayout, TInt aX)
+    {
+    if (!iIcon)
+        {
+        ASSERT(iIcon);
+        return;
+        }
+
+    // Resize icon according to layout
+    TInt height = aLayout.Rect().Height();
+    TSize iconSize(KMaxTInt, height);
+    AknIconUtils::SetSize(iIcon->Bitmap(), iconSize,
+            EAspectRatioPreservedAndUnusedSpaceRemoved);
+
+    // Set vertical icon position according to layout (this overrides
+    // what's already there. Also set correct width in iRect
+    iTopLeft.iY = aLayout.Rect().iTl.iY;
+    iTopLeft.iX = aX;
+    TSize size = iIcon->Bitmap()->SizeInPixels();
+    iRect = TRect(0, 0, size.iWidth, size.iHeight);
+
+    if (iAlignment == ESsAlignRight)
+        {
+        // Change topright to topleft.
+        iTopLeft.iX -= size.iWidth;
+        }
+
+#ifdef SS_LAYOUTTRACE
+    SCRLOGGER_WRITEF(_L("SCR: Icon indicator (%d):"), iId);
+    SCRLOGGER_WRITEF(_L("SCR:   Rect: (%d,%d,%d,%d)"),
+            iRect.iTl.iX,
+            iRect.iTl.iY,
+            iRect.iBr.iX,
+            iRect.iBr.iY);
+    SCRLOGGER_WRITEF(_L("SCR:   Size: (%d,%d)"), size.iWidth, size.iHeight);
+    SCRLOGGER_WRITEF(_L("SCR:   Pos:  (%d,%d)"), iTopLeft.iX, iTopLeft.iY);
+#endif
+    }
+
+
+// End of file