webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp
changeset 1 7c90e6132015
parent 0 dd21522fd290
child 5 10e98eab6f85
equal deleted inserted replaced
0:dd21522fd290 1:7c90e6132015
    39 #include "WebFrameView.h"
    39 #include "WebFrameView.h"
    40 #include "WebSurface.h"
    40 #include "WebSurface.h"
    41 #include "BrCtl.h"
    41 #include "BrCtl.h"
    42 #include "Frame.h"
    42 #include "Frame.h"
    43 #include "WebCursor.h"
    43 #include "WebCursor.h"
       
    44 #include "WebPointerEventHandler.h"
    44 #include "WebPageScrollHandler.h"
    45 #include "WebPageScrollHandler.h"
       
    46 #include "WebKitLogger.h"
    45 
    47 
    46 using namespace WebCore;
    48 using namespace WebCore;
       
    49 using namespace RT_GestureHelper;
    47 // CONSTANTS
    50 // CONSTANTS
    48 const TInt KPluginGranularity = 3;
    51 const TInt KPluginGranularity = 3;
    49 _LIT(KPath,"c:\\system\\temp\\");
    52 _LIT(KPath,"c:\\system\\temp\\");
    50 
    53 
    51 void panicPlugin(TInt error = KErrNone)
    54 void panicPlugin(TInt error = KErrNone)
   154 }
   157 }
   155 
   158 
   156 void PluginWin::windowChangedL()
   159 void PluginWin::windowChangedL()
   157 {
   160 {
   158     if (m_fullscreen) return;
   161     if (m_fullscreen) return;
       
   162     PlayPausePluginL();
   159     if (m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->setwindow ){
   163     if (m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->setwindow ){
   160         NPWindow  window;
   164         NPWindow  window;
   161     TRect rect( m_pluginskin->getPluginWinRect() );
   165     TRect rect( m_pluginskin->getPluginWinRect() );
   162     TRect clipRect = m_pluginskin->getClipRect();
   166     TRect clipRect = m_pluginskin->getClipRect();
   163     TRect myRect = Rect();
   167     TRect myRect = Rect();
   657 // CPluginWin::HitRegionContains
   661 // CPluginWin::HitRegionContains
   658 // -----------------------------------------------------------------------------
   662 // -----------------------------------------------------------------------------
   659 //
   663 //
   660 TBool PluginWin::HitRegionContains(const TPoint &aPoint, const CCoeControl &/*aControl*/) const
   664 TBool PluginWin::HitRegionContains(const TPoint &aPoint, const CCoeControl &/*aControl*/) const
   661     {
   665     {
       
   666     PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler();
       
   667     pluginHandler->setPluginToActivate(NULL);
   662 
   668 
   663     if (m_pluginskin->frame()->frameView()->topView()->focusedElementType() != TBrCtlDefs::EElementActivatedObjectBox)
   669     if (m_pluginskin->frame()->frameView()->topView()->focusedElementType() != TBrCtlDefs::EElementActivatedObjectBox)
   664         {
   670         {
   665 
   671 
   666         if ( !m_pluginskin->CanInteract() && !m_pluginskin->pluginPlayer() )
   672         if ( !m_pluginskin->CanInteract() && !m_pluginskin->pluginPlayer() )
   667         {
   673         {
   668             m_pluginskin->activate();
   674             m_pluginskin->activate();
   669         }
   675         }
   670         else {
   676         else {
       
   677             /* We are storing  plugin that we want to acrivate here 
       
   678              * When we get to WebPointerEventHandler::HandleGesture() we will check
       
   679              * if this pointer != NULL and will send mousePress event to WebCore.
       
   680              * This will trigger the plugin activation.
       
   681              */         
       
   682             pluginHandler->setPluginToActivate(m_pluginskin);
   671         TPoint point = m_pluginskin->getPluginWinRect().iTl + aPoint;
   683         TPoint point = m_pluginskin->getPluginWinRect().iTl + aPoint;
   672 
   684 
   673         // Plugin gets pointer event. Activate plugin
   685         // Plugin gets pointer event. Activate plugin
   674 	      control(m_pluginskin->frame())->webView()->setFocusNone();
   686 	      control(m_pluginskin->frame())->webView()->setFocusNone();
   675 
   687 
   676         WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
   688         WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
   677         cursor->setPosition(point);
   689         cursor->setPosition(point);
   678         TKeyEvent keyEvent;
       
   679         keyEvent.iModifiers = 0;
       
   680         keyEvent.iRepeats = 0;
       
   681         keyEvent.iCode = EKeyDevice3;
       
   682         keyEvent.iScanCode = EStdKeyDevice3;
       
   683         CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKeyDown);
       
   684         CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKey);
       
   685         CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKeyUp);
       
   686         PluginWin* win = const_cast<PluginWin*>(this);
       
   687         }
   690         }
   688         }
   691         }
   689     return ETrue;
   692     return ETrue;
   690     }
   693     }
   691 
   694 
   723 }
   726 }
   724 
   727 
   725 void PluginWin::TogleScreenMode(bool aFullScreen)
   728 void PluginWin::TogleScreenMode(bool aFullScreen)
   726 {
   729 {
   727   m_fullscreen = aFullScreen;
   730   m_fullscreen = aFullScreen;
   728   WebFrame* mf = mainFrame(m_pluginskin->frame());
   731   CBrCtl*   brCtl = control(m_pluginskin->frame());
       
   732 
       
   733   StaticObjectsContainer::instance()->setPluginFullscreen(aFullScreen);
       
   734   brCtl->reportStateChanged(TBrCtlDefs::EStatePluginFullScreen, m_fullscreen);
       
   735 }
       
   736 void PluginWin::adaptiveZoom(const TPoint& aCurPosition)
       
   737 {
   729   CBrCtl*   brCtl = control(m_pluginskin->frame());
   738   CBrCtl*   brCtl = control(m_pluginskin->frame());
   730   WebView*  view = brCtl->webView();
   739   WebView*  view = brCtl->webView();
   731 
   740   WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
   732   view->setPluginFullscreen(aFullScreen);
   741   cursor->setPosition(aCurPosition);
   733   brCtl->reportStateChanged(TBrCtlDefs::EStatePluginFullScreen, m_fullscreen);
   742   view->setZoomLevelAdaptively();
   734 }
   743 }
   735 
       
   736 void PluginWin::NotifyPluginVisible (TBool visible)
   744 void PluginWin::NotifyPluginVisible (TBool visible)
   737 
   745 
   738 {
   746 {
   739   if(m_notifier)
   747   if(m_notifier)
   740     {
   748     {
   746       {
   754       {
   747         TRAP_IGNORE(m_notifier->NotifyL(MPluginNotifier::EPluginInvisible, (void*)0));
   755         TRAP_IGNORE(m_notifier->NotifyL(MPluginNotifier::EPluginInvisible, (void*)0));
   748       }	
   756       }	
   749     }
   757     }
   750 }
   758 }
       
   759 void PluginWin::PlayPausePluginL ()
       
   760 {
       
   761     if(m_notifier) 
       
   762     {
       
   763         CBrCtl*   brCtl = control(m_pluginskin->frame());    
       
   764         WebView*  view = brCtl->webView();
       
   765         TBool scrolling = view->viewIsScrolling();
       
   766         if (scrolling) {
       
   767             m_notifier->NotifyL( MPluginNotifier::EPluginPause, (void*)1 );
       
   768         }
       
   769         else {
       
   770             m_notifier->NotifyL( MPluginNotifier::EPluginPause, (void*)0 );
       
   771         }
       
   772     }
       
   773 }
       
   774 
       
   775 void PluginWin::HandlePointerEventFromPluginL(const TPointerEvent& aEvent)
       
   776 {
       
   777     CBrCtl*   brCtl = control(m_pluginskin->frame());    
       
   778     WebView*  view = brCtl->webView();
       
   779     TPointerEvent event(aEvent);
       
   780     
       
   781     if (!StaticObjectsContainer::instance()->isPluginFullscreen()) {
       
   782         event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen();
       
   783     }
       
   784     view->pointerEventHandler()->HandlePointerEventL(event);
       
   785 }
       
   786 
       
   787 
       
   788 TBool PluginWin::HandleGesture(const TGestureEvent& aEvent)
       
   789 {
       
   790     TBool ret = EFalse;
       
   791     if (m_control) {
       
   792         TGestureEvent gestEvent(aEvent);
       
   793         CBrCtl*   brCtl = control(m_pluginskin->frame());    
       
   794         WebView*  view = brCtl->webView();
       
   795         TPoint newPos = aEvent.CurrentPos();
       
   796         TPoint startPos = aEvent.StartPos();
       
   797         TPoint viewPos = view->PositionRelativeToScreen();
       
   798         TPoint ctrlPos = m_control->PositionRelativeToScreen();
       
   799         
       
   800         if (!StaticObjectsContainer::instance()->isPluginFullscreen()) {
       
   801         // adjust the position to make it relative to top left corner of 
       
   802             newPos += viewPos; 
       
   803             startPos += viewPos;
       
   804             gestEvent.SetCurrentPos(newPos);
       
   805             gestEvent.SetStartPos(startPos);
       
   806         }
       
   807     
       
   808         if (StaticObjectsContainer::instance()->isPluginFullscreen() || 
       
   809 	    m_control->Rect().Contains(newPos - ctrlPos)) {
       
   810             NPEvent event;
       
   811             NPEventPointer ev;
       
   812             event.event = ENppEventPointer;
       
   813             ev.reserved = &gestEvent;
       
   814             ev.pointerEvent = NULL;
       
   815             event.param = &ev;
       
   816             ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), 
       
   817                                                          static_cast<void*>(&event));
       
   818         }
       
   819     }
       
   820     return ret;
       
   821 
       
   822 }