diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/plugins/PluginPlayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginPlayer.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Page overview control +* +*/ +#include "../../bidi.h" + +#include "PluginPlayer.h" +#include "BrCtl.h" +#include "PluginWin.h" +#include "PluginSkin.h" +#include "WebView.h" +#include "WebFrame.h" +#include + +PluginPlayer* PluginPlayer::NewL( CBrCtl& parent, PluginWin* plugin ) + { + PluginPlayer* self = new (ELeave) PluginPlayer(parent, plugin ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +PluginPlayer::PluginPlayer( CBrCtl& parent, PluginWin* plugin ) + : m_brctl( parent ), m_plugin( plugin ) + { + } + +void PluginPlayer::ConstructL() + { + SetContainerWindowL( m_brctl ); + SetRect( m_brctl.Rect() ); + if (AknLayoutUtils::PenEnabled()) { + DrawableWindow()->SetPointerGrab(ETrue); + EnableDragEvents(); + } + + ActivateL(); + } + +PluginPlayer::~PluginPlayer() + { + } + +void PluginPlayer::Draw( const TRect& rect ) const + { + CWindowGc& gc = SystemGc(); + + // draw the background + gc.SetPenStyle( CGraphicsContext::ESolidPen ); + gc.SetPenColor( TRgb( 128, 128, 128 ) ); + gc.SetBrushColor( TRgb( 192, 192, 192 ) ); + gc.SetBrushStyle( CGraphicsContext::EDiamondCrossHatchBrush ); + gc.DrawRect( rect ); + } + +TInt PluginPlayer::CountComponentControls() const + { + if( m_plugin ) + return 1; + else + return 0; + } + +CCoeControl *PluginPlayer::ComponentControl(TInt /*aIndex*/) const + { + return m_plugin; + } + + +TKeyResponse PluginPlayer::OfferKeyEventL(const TKeyEvent keyEvent, TEventCode type) + { + return m_plugin->OfferKeyEventL( keyEvent, type ); + } + +void PluginPlayer::start() + { + m_orgparent = m_plugin->Parent(); + m_orgrect = TRect( m_plugin->Position(), m_plugin->Size() ); + + m_plugin->SetParent( this ); + + // try to guess what part the user wants to see, this way + // we can avoid unnecessary scrolling; + // - if the content can be made fully visible, we just center the content. + // - if any of the edge is clipped away, we try to show as much as possible while still + // keep the opposite edge visible. + // - if both edge are clipped away, don't do anything. + const TRect& rect = Rect(); + TInt x = ( rect.Width() - m_orgrect.Width() )/2; + TInt y = ( rect.Height() - m_orgrect.Height() )/2; + + // horizontal + if( x < 0 ) + { + if( m_orgrect.iBr.iX < rect.iBr.iX ) + x = m_orgrect.iTl.iX + rect.iBr.iX - m_orgrect.iBr.iX; // right edge visible + else if( m_orgrect.iTl.iX > rect.iTl.iX ) + x = rect.iTl.iX; // left edge visible + else + x = m_orgrect.iTl.iX; // both edges are clipped away + } + + // vertical + if( y < 0 ) + { + if( m_orgrect.iBr.iY < rect.iBr.iY ) + y = m_orgrect.iTl.iY + rect.iBr.iY - m_orgrect.iBr.iY; // bottom edge visible + else if( m_orgrect.iTl.iY > rect.iTl.iY ) + y = rect.iTl.iY; // top edge visible + else + y = m_orgrect.iTl.iY; // both edges are clipped away + } + + m_plugin->SetRect( TRect( TPoint(x,y), m_orgrect.Size() ) ); + m_plugin->makeVisible( ETrue ); + + DrawNow(); + // not sure why we need this for bavp + m_plugin->SetRect( TRect( TPoint(x,y), m_orgrect.Size() ) ); + m_plugin->setPluginFocusL(ETrue); + + } + +void PluginPlayer::stop() + { + m_plugin->setPluginFocusL(EFalse); + m_plugin->SetParent( m_orgparent ); + m_plugin->SetRect( TRect( m_orgrect.iTl, m_orgrect.Size() ) ); + m_plugin->makeVisible( EFalse ); + } + +void PluginPlayer::HandlePointerEventL(const TPointerEvent& aPointerEvent) +{ + m_plugin->HandlePointerEventL(aPointerEvent); +} + +// END OF FILE