diff -r 0fd27995241b -r 9ac0a0a7da70 javauis/mmapi_qt/directcontent/src/cmmadcdisplay.cpp --- a/javauis/mmapi_qt/directcontent/src/cmmadcdisplay.cpp Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,361 +0,0 @@ -/* -* Copyright (c) 2002-2009 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 Files -#include -#include -#include - -#include "cmmaplayerevent.h" -#include "mmmaguiplayer.h" -#include "mmmadisplaywindow.h" -#include "cmmadcdisplay.h" -#include "mmmacontainer.h" -#include "mmafunctionserver.h" -#include "cmmadcrepaintevent.h" -#include "cmmadcfullscreenevent.h" -#include "cmmadcinvalidateevent.h" - -// CONSTRUCTION -// Static constructor, leaves pointer to cleanup-stack -CMMADCDisplay* CMMADCDisplay::NewLC(MMMAGuiPlayer* aPlayer, - MMAFunctionServer* aEventSource, - jobject aGUIObject) -{ - CMMADCDisplay* self = - new(ELeave) CMMADCDisplay(aPlayer, aEventSource, aGUIObject); - CleanupStack::PushL(self); - self->iRepaint = new(ELeave) CMMADCRepaintEvent(aGUIObject); - return self; -} - -// Destructor (virtual by CBase) -CMMADCDisplay::~CMMADCDisplay() -{ - if (iContainer) - { - iContainer->MdcRemoveContent(); - } - delete iBitmap; - delete iRepaint; -} - -// interface MMMADisplay -void CMMADCDisplay::DrawFrameL(const CFbsBitmap* aBitmap) -{ - // This method is called only if bitmap is used. - TInt err = InitBitmapMode(); - - if (iVisible && iWindow && - iContainer && iContainer->MdcContainerVisibility() && - err == KErrNone) - { - iWindow->DrawFrameL(aBitmap); - - // container will draw bitmap obtained with MdcFrameBuffer method - if (!iRepaint->IsActive()) - { - iRepaint->SetActive(); - iEventSource->PostEvent(iRepaint, CMMAEvent::EEventPriority); - } - } -} - -// interface MMMADisplay -void CMMADCDisplay::SetDisplaySizeL(const TSize& aSize) -{ - LOG2( EJavaMMAPI, EInfo, "CMMADCDisplay::SetDisplaySizeL w %d h %d", - aSize.iWidth, aSize.iHeight); - // user rect contains size set from java. - iUserRect.SetSize(aSize); - - if (iContainer) - { - CMMADCInvalidateEvent* event = - new(ELeave)CMMADCInvalidateEvent(iGUIObject, aSize); - iEventSource->PostEvent(event, CMMAEvent::EEventPriority); - } -} - -// interface MMMADisplay -void CMMADCDisplay::SetDisplayLocationL(const TPoint& /*aPosition*/) -{ - LOG( EJavaMMAPI, EInfo, "CMMADCDisplay::SetDisplayLocationL"); - // This method only works when the USE_DIRECT_VIDEO mode is set. - // In USE_GUI_PRIMITIVE mode, this call will be ignored. -} - -// interface MMMADisplay -TPoint CMMADCDisplay::DisplayLocation() -{ - LOG( EJavaMMAPI, EInfo, "CMMADCDisplay::DisplayLocation"); - // This method returns always (0,0), - // because SetDisplayLocationL call is ignored. - return TPoint(0, 0); -} - -// interface MMMADisplay -void CMMADCDisplay::SetFullScreenL(TBool aFullScreen) -{ - LOG1( EJavaMMAPI, EInfo, "CMMADCDisplay::SetFullScreenL %d", aFullScreen); - // This method tries to set eSWT Widget size to its parent size. - // If real full screen mode is needed parent Composite must be in - // fullscreen mode (for example with MobileShell's setFullScreenMode method). - if (iContainer) - { - CMMADCFullScreenEvent* event = - new(ELeave)CMMADCFullScreenEvent(iGUIObject, aFullScreen); - iEventSource->PostEvent(event, CMMAEvent::EEventPriority); - } -} - -// interface MMMADisplay -void CMMADCDisplay::SourceSizeChanged(const TSize& aSourceSize) -{ - LOG2( EJavaMMAPI, EInfo, "CMMADCDisplay::SourceSizeChanged %d %d", - aSourceSize.iWidth, - aSourceSize.iHeight); - -#ifdef RD_JAVA_NGA_ENABLED - if (iWindow) - { - TPoint topLeft(0, 0); - iWindow->SetVideoCropRegion(TRect(topLeft,aSourceSize)); - } -#endif - - if (iWindow) - { - TRect tmp(TPoint(0, 0), aSourceSize); - iWindow->SetDrawRect(tmp); - iWindow->SetWindowRect(tmp,MMMADisplay::EMmaThread); - - // set visibility without using event server because this is called - // from MMA thread - if (iContainer) - { - if (iContainer->MdcContainerVisibility()) - { - iWindow->SetVisible(ETrue, EFalse); - } - } - } -} - -// interface MMMADisplay -TBool CMMADCDisplay::IsVisible() -{ - TBool visible = EFalse; - if (iContainer) - { - visible = iContainer->MdcContainerVisibility(); - } - // else invisible - - // return true if both are visible - return iVisible && visible; -} - - -// interface MMMADisplay -TBool CMMADCDisplay::HasContainer() -{ - return iContainer != NULL; -} - - -// interface MMMADirectContent -void CMMADCDisplay::MdcContainerVisibilityChanged(TBool aVisible) -{ - LOG1( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcContainerVisibilityChanged aVisible %d", - aVisible); - if (iWindow) - { - iWindow->SetVisible(aVisible && iVisible); - } - LOG( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcContainerVisibilityChanged OK"); -} - -// interface MMMADirectContent -void CMMADCDisplay::MdcContentRectChanged(const TRect& aContentRect, - const TRect& aParentRect) -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMADCDisplay::MdcContentRectChanged"); - if (iWindow) - { - TSize size = aContentRect.Size(); - iWindow->SetDrawRectThread(TRect(size)); - TInt err = iEventSource->ExecuteTrap(CMMADCDisplay::SetDrawRectL, - this, - &size); - if (err == KErrNone) - { - // bitmap window ignores window rect and position - iWindow->SetWindowRect(aParentRect,MMMADisplay::EUiThread); - iWindow->SetPosition(aContentRect.iTl - aParentRect.iTl); - } - } -} - -void CMMADCDisplay::MdcContainerWindowRectChanged(const TRect& -#ifdef RD_JAVA_NGA_ENABLED - aRect -#endif - ) -{ - LOG( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcContainerWindowRectChanged"); - -#ifdef RD_JAVA_NGA_ENABLED - if (iWindow) - { - iWindow->SetRWindowRect(aRect, MMMADisplay::EUiThread); - } -#endif -} - -// interface MMMADirectContent -void CMMADCDisplay::MdcContainerDestroyed() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMADCDisplay::MdcContainerDestroyed"); - if (iContainer) - { - iContainer->MdcRemoveContent(); - } - - iContainer = NULL; - if (iWindow) - { - iWindow->SetVisible(EFalse); - iWindow->ContainerDestroyed(); - } -} - -// interface MMMADirectContent -void CMMADCDisplay::MdcSetContainer(MMMAContainer* aContainer) -{ - iContainer = aContainer; - TSize sourceSize = iPlayer->SourceSize(); - LOG2( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcSetContainer source size %d %d", - sourceSize.iWidth, sourceSize.iHeight); - aContainer->MdcInvalidate(sourceSize); - if (iWindow) - { - // Notify window that container has been set - iWindow->ContainerSet(); - - TRect controlRect; - TRect parentRect; - iContainer->MdcGetContentRect(controlRect, parentRect); - - // bitmap window ignores window rect and position - iWindow->SetWindowRect(parentRect,MMMADisplay::EUiThread); - iWindow->SetPosition(controlRect.iTl - parentRect.iTl); - - LOG1( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcSetContainer container visible %d", - aContainer->MdcContainerVisibility()); - LOG1( EJavaMMAPI, EInfo, "CMMADCDisplay::MdcSetContainer content visible %d", - iVisible); - - iWindow->SetVisible(aContainer->MdcContainerVisibility() && - iVisible); - } -} - -// interface MMMADirectContent -CFbsBitmap* CMMADCDisplay::MdcFrameBuffer() const -{ - return iBitmap; -} - -// interface MMMADirectContent -TSize CMMADCDisplay::MdcSourceSize() -{ - return iPlayer->SourceSize(); -} - -void CMMADCDisplay::MdcContentBoundsChanged(const TRect& /*aRect*/) -{ -} - -void CMMADCDisplay::UIGetDSAResources( - MUiEventConsumer& aConsumer, - MMMADisplay::TThreadType aThreadType) -{ - if (iContainer) - { - iContainer->MdcGetDSAResources(aConsumer, aThreadType); - } -} - -void CMMADCDisplay::UIGetCallback( - MUiEventConsumer& aConsumer, - TInt aCallbackId) -{ - if (iContainer) - { - iContainer->MdcGetUICallback(aConsumer, aCallbackId); - } -} - -TInt CMMADCDisplay::InitBitmapMode() -{ - TInt errCode = KErrNone; - // If there is no bitmap, create one and set it to window - if (!iBitmap && iWindow) - { - iBitmap = new CFbsBitmap; - if (iBitmap) - { - errCode = iBitmap->Create(iPlayer->SourceSize(), - EColor16MA); - } - else - { - errCode = KErrNoMemory; - } - - if (errCode == KErrNone) - { - TRAP(errCode, - iWindow->SetDestinationBitmapL(iBitmap)); - } - } - return errCode; -} - -void CMMADCDisplay::SetDrawRectL(CMMADCDisplay* aDisplay, TSize* aSize) -{ - if (aDisplay->iBitmap) - { - User::LeaveIfError(aDisplay->iBitmap->Resize(*aSize)); - aDisplay->iWindow->SetDestinationBitmapL(aDisplay->iBitmap); - } -} - -CMMADCDisplay::CMMADCDisplay(MMMAGuiPlayer* aPlayer, - MMAFunctionServer* aEventSource, - jobject aGUIObject) -{ - iPlayer = aPlayer; - iEventSource = aEventSource; - iGUIObject = aGUIObject; - // GUI_PRIMITIVE is visible by default. - iVisible = ETrue; -} - -// END OF FILE