uiacceltk/hitchcock/coretoolkit/src/huicanvasbackground.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 07:56:43 +0200
changeset 0 15bf7259bb7c
permissions -rw-r--r--
Revision: 201003

/*
* Copyright (c) 2006-2008 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 "huicanvasbackground.h"
#include "huicanvasgc.h"
#include <uiacceltk/HuiSkin.h>
#include <uiacceltk/HuiS60Skin.h>
#include <uiacceltk/HuiCanvasVisual.h>
#include <uiacceltk/HuiDisplay.h>
#include <uiacceltk/HuiStatic.h>
#include <uiacceltk/HuiEnv.h>

#include <e32cmn.h>


// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
//
CHuiCanvasBackground::CHuiCanvasBackground()
    {	    
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CHuiCanvasBackground::~CHuiCanvasBackground()
    {
    iBackgroundItems.Close();
    }
    
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHuiCanvasBackground* CHuiCanvasBackground::NewL()
    {
    CHuiCanvasBackground* self = CHuiCanvasBackground::NewLC();
    CleanupStack::Pop(self);
    return self;        
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CHuiCanvasBackground* CHuiCanvasBackground::NewLC()
    {
    CHuiCanvasBackground* self = new (ELeave) CHuiCanvasBackground();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }


// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::ConstructL()
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::SetVisual(CHuiCanvasVisual* aVisual)
    {
    iCanvasVisual = aVisual;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::SetClearBackground(CHuiDisplay::TClearMode aClearBackground)
    {
    iClearBackground = aClearBackground;    
    iBackgroundItems.Reset();
    if(aClearBackground == CHuiDisplay::EClearWithSkinBackground)
        {
        TRAP_IGNORE(CHuiStatic::Env().Skin().TextureL(EHuiSkinBackgroundTexture));
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TInt CHuiCanvasBackground::ClearBackground()
    {
    return iClearBackground;        
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//

TInt CHuiCanvasBackground::BackgroundItemsCount()
    {
    return iBackgroundItems.Count();        
    }
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::SetBackgroundColor(const TRgb& aBackgroundColor)
    {
    iBackgroundColor = aBackgroundColor;    
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TRgb CHuiCanvasBackground::BackgroundColor() const
    {
    return iBackgroundColor;    
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::SetBackgroundItems(const RArray<THuiDisplayBackgroundItem>& aItems)
    {
    iClearBackground = CHuiDisplay::EClearNone;
    iBackgroundItems.Reset();
    for(TInt i = 0; i < aItems.Count(); ++i)
        {
        iBackgroundItems.Append(aItems[i]);
        }   
    if (!CHuiStatic::Env().Renderer() == EHuiRendererBitgdi)
        {
        CHuiS60Skin* s60skin = static_cast<CHuiS60Skin*>(&CHuiStatic::Env().Skin());
        TRAP_IGNORE(s60skin->UpdateBackgroundsL(iBackgroundItems));
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::GetBackgroundItems(RArray<THuiDisplayBackgroundItem>& aItems)
    {
    aItems.Reset();
    for(TInt i = 0; i < iBackgroundItems.Count(); ++i)
        {
        aItems.Append(aItems[i]);
        }   
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::DrawSelf(CHuiGc& aGc, const TRect& aDisplayRect)
    {
	iCanvasVisual->CanvasGc().SetGc(aGc);
	    
    // Clear background for the dirty area
    if (iBackgroundItems.Count() != 0)
        {
        ClearWithBackgroundItems(aDisplayRect);    
        }
    else
        {
        switch (iClearBackground)
            {
            case CHuiDisplay::EClearWithColor:
                {
                ClearWithColor(aGc, aDisplayRect);                            
                break;    
                }
            case CHuiDisplay::EClearWithSkinBackground:
                {
                ClearWithSkinBackground(aDisplayRect);                                                    
                break;    
                }
            case CHuiDisplay::EClearNone:
            default:
                {
                // Don't do anything
                break;    
                }                                                
            }                                    
        }                                                
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::ClearWithBackgroundItems(const TRect& aDisplayRect)
    {    
    if (!iCanvasVisual)
        {
        return;    
        }

    CHuiCanvasGc& canvasGc = iCanvasVisual->CanvasGc();
    canvasGc.ClearWithBackgroundItems(aDisplayRect, iBackgroundItems);    
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::ClearWithSkinBackground(const TRect& aDisplayRect)
    {    
    if (!iCanvasVisual)
        {
        return;    
        }

    CHuiCanvasGc& canvasGc = iCanvasVisual->CanvasGc();
    canvasGc.ClearWithSkinBackground(aDisplayRect);    
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CHuiCanvasBackground::ClearWithColor(CHuiGc& /*aGc*/, const TRect& aDisplayRect)
    {    
    if (!iCanvasVisual)
        {
        return;    
        }

    CHuiCanvasGc& canvasGc = iCanvasVisual->CanvasGc();
            
    canvasGc.SetPenColor(iBackgroundColor);
    canvasGc.SetOpacity(TReal32(iBackgroundColor.Alpha()) / 255.f);    
    canvasGc.Clear(aDisplayRect);    
    }