diff -r 2a9601315dfc -r 98ccebc37403 javauis/mmapi_qt/baseline/src/cmmabitmapwindow.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/mmapi_qt/baseline/src/cmmabitmapwindow.cpp Fri May 14 15:47:24 2010 +0300 @@ -0,0 +1,140 @@ +/* +* 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: This abstract class implements MMMADisplayWindow functionality +* in CFbsBitmap based displays. +* +*/ + + +// Include Files +#include +#include +#include +#include "cmmabitmapwindow.h" + +// Destructor (virtual by CBase) +CMMABitmapWindow::~CMMABitmapWindow() +{ + delete iBitmap; + delete iBitmapDevice; + delete iBitmapContext; +} + +CMMABitmapWindow* CMMABitmapWindow::NewL() +{ + CMMABitmapWindow* self = new(ELeave)CMMABitmapWindow(); + return self; +} + +CMMABitmapWindow::CMMABitmapWindow(): + iDrawRect(0, 0, 0, 0), + iClientRect(0, 0, 0, 0) +{ +} + +void CMMABitmapWindow::SetDestinationBitmapL(CFbsBitmap* aBitmap) +{ + CFbsBitmap* bitmap = new(ELeave)CFbsBitmap(); + CleanupStack::PushL(bitmap); + User::LeaveIfError(bitmap->Duplicate(aBitmap->Handle())); + + // create context for bitmap + CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(aBitmap); + CleanupStack::PushL(bitmapDevice); + + + CGraphicsContext* bitmapContext = NULL; + User::LeaveIfError(bitmapDevice->CreateContext(bitmapContext)); + + CleanupStack::Pop(bitmapDevice); // bitmapDevice + CleanupStack::Pop(bitmap); // bitmap + + delete iBitmap; + iBitmap = bitmap; + delete iBitmapDevice; + iBitmapDevice = bitmapDevice; + delete iBitmapContext; + iBitmapContext = bitmapContext; + + if (iDrawRect.IsEmpty()) + { + iDrawRect.SetSize(iBitmap->SizeInPixels()); + } +} + +void CMMABitmapWindow::DrawFrameL(const CFbsBitmap* aBitmap) +{ + if (iBitmap) + { + // leave in this function will panic thread + CFbsBitmap* bitmap = new(ELeave)CFbsBitmap(); + CleanupStack::PushL(bitmap); + User::LeaveIfError(bitmap->Duplicate(aBitmap->Handle())); + // set incoming bitmap display mode to 16MA + if (EColor16MU == bitmap->DisplayMode()) + { + bitmap->SetDisplayMode(EColor16MA); + } + AknIconUtils::ScaleBitmapL(iDrawRect, iBitmap, bitmap); + CleanupStack::PopAndDestroy(bitmap); + } +} + +void CMMABitmapWindow::SetDrawRect(const TRect& aRect) +{ + iDrawRect = aRect; +} + +void CMMABitmapWindow::SetDrawRectThread(const TRect& aRect) +{ + // Bitmap window's rect can be set in any thread. + SetDrawRect(aRect); +} + +const TRect& CMMABitmapWindow::DrawRect() +{ + return iDrawRect; +} + +TSize CMMABitmapWindow::WindowSize() +{ + if (!iBitmap) + { + // bitmap not ready returning currently set draw rect + return iDrawRect.Size(); + } + return iBitmap->SizeInPixels(); +} + +void CMMABitmapWindow::SetPosition(const TPoint& /*aPosition*/) +{ + // ignored, this is done by framework +} + +void CMMABitmapWindow::SetVisible(TBool /*aVisible*/, TBool /*aUseEventServer*/) +{ + // ignored, this is done by framework +} + +void CMMABitmapWindow::SetWindowRect(const TRect& aRect ,MMMADisplay::TThreadType /*aThreadType*/) +{ + iClientRect = aRect; +} + +const TRect& CMMABitmapWindow::WindowRect() +{ + return iClientRect; +} + +// END OF FILE