webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp
branchRCL_3
changeset 48 79859ed3eea9
parent 47 e1bea15f9a39
child 49 919f36ff910f
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp	Thu Aug 19 10:58:56 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp	Tue Aug 31 16:17:46 2010 +0300
@@ -23,14 +23,14 @@
 #include <eikdef.h>
 #include <eikenv.h>
 #include <eikappui.h>
-#include <SysUtil.h>
+#include <sysutil.h>
 #include <AknUtils.h>
 
 #include "WebFrame.h"
 #include "HttpDefs.h"
-#include <brctldefs.h>
+#include "BrCtlDefs.h"
 #include "StaticObjectsContainer.h"
-#include <pluginadapterinterface.h>
+#include <PluginAdapterInterface.h>
 #include "PluginWin.h"
 #include "PluginSkin.h"
 #include "PluginHandler.h"
@@ -44,13 +44,9 @@
 #include "WebPointerEventHandler.h"
 #include "WebPageScrollHandler.h"
 #include "WebKitLogger.h"
-#include "WebCoreGraphicsContext.h"
-
-#include <rt_gestureif.h>
 
 using namespace WebCore;
 using namespace RT_GestureHelper;
-using namespace stmGesture; 
 // CONSTANTS
 const TInt KPluginGranularity = 3;
 _LIT(KPath,"c:\\system\\temp\\");
@@ -68,7 +64,7 @@
 //
 PluginWin::PluginWin(PluginSkin* pluginskin)
     : m_pluginskin(pluginskin)
-    , m_windowedPlugin(true), m_fullscreen(false), m_windowCreated(false), m_visibilty(false)
+    , m_windowedPlugin(true), m_fullscreen(false), m_windowCreated(false)
 {
 }
 
@@ -90,9 +86,6 @@
     }
     // Add the focus/foreground observer
     ControlEnv()->AddForegroundObserverL( *this ) ;
-    m_pluginHasBitmap = false;
-    m_pausedBitmap = NULL;
-    m_BitmapSupported = false;
 }
 
 // -----------------------------------------------------------------------------
@@ -102,21 +95,12 @@
 //
 PluginWin::~PluginWin()
 {
-    PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler();
-
-    int index = pluginHandler->getVisiblePlugins().Find(m_pluginskin);
-    if (index != KErrNotFound)
-        pluginHandler->getVisiblePlugins().Remove(index);
 
     TRAP_IGNORE( setPluginFocusL( EFalse ) );
 
     // Remove the foreground observer
     ControlEnv()->RemoveForegroundObserver( *this );
     delete m_bitmap;
-   if (m_pausedBitmap)
-        {
-        delete m_pausedBitmap;
-        }
 }
 
 // -----------------------------------------------------------------------------
@@ -236,7 +220,6 @@
             cursor->cursorUpdate(EFalse);
             consumed = ETrue;
             setPluginFocusL( ETrue );
-            m_pluginskin->pluginFocusChanged(ETrue);
             }
 
             else
@@ -289,16 +272,12 @@
         ret = m_control->OfferKeyEventL( aKeyEvent, aType );
     }
     else if (!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event) {
-        WebCursor* c = StaticObjectsContainer::instance()->webCursor();
-        TPoint pt = (c->position());
-        pt = m_pluginskin->frame()->frameView()->viewCoordsInFrameCoords(pt);
-        pt -= m_pluginskin->rect().iTl;
         NPEvent event;
         NPEventKey eventKey;
         event.event = ENppEventKey;
         eventKey.keyEvent = &aKeyEvent;
         eventKey.type = aType;
-        eventKey.reserved = static_cast<void*>(&pt);
+        eventKey.reserved = NULL;
         event.param = &eventKey;
         ret = (TKeyResponse)m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), static_cast<void*>(&event));
     }
@@ -386,26 +365,10 @@
 //
 void PluginWin::makeVisible( TBool visible )
     {
-    WebView* view = control(m_pluginskin->frame())->webView();
-    if(!view)
-        return;
-    
-    if((!m_pluginHasBitmap) && (IsVisible() != visible) && (!view->isPinchZoom()))
+    if(IsVisible() != visible) 
     {
         CCoeControl::MakeVisible(visible);
     }
-    
-    PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler();
-    int index = pluginHandler->getVisiblePlugins().Find(m_pluginskin);
-    if (visible && (m_visibilty != visible) && (index == KErrNotFound)) {
-        pluginHandler->getVisiblePlugins().AppendL(m_pluginskin);
-        m_visibilty = visible;
-    }
-    else if (!visible && (index != KErrNotFound)) {
-        pluginHandler->getVisiblePlugins().Remove(index);
-        m_visibilty = visible;
-    }
-    
     NotifyPluginVisible(visible);
     if (!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event) {
         NPEvent event;
@@ -490,11 +453,6 @@
 void PluginWin::HandleGainingForeground()
 {
     if (m_notifier) {
-        if(m_pluginHasBitmap)
-            { 
-            ClearPluginBitmap(); 
-            m_pluginskin->activateVisiblePlugins(); 
-            }
         TRAP_IGNORE(m_notifier->NotifyL(MPluginNotifier::EApplicationFocusChanged, (void*)1));
     }
 }
@@ -576,12 +534,11 @@
     }
     else {
         WebFrame* mf = (m_pluginskin->frame());
-        if (mf && mf->frameView()) {
-            WebFrameView* fv = mf->frameView();
-            TRect rect(Rect());
-            rect = TRect(fv->viewCoordsInFrameCoords(Rect().iTl), fv->viewCoordsInFrameCoords(Rect().iBr));
-            fv->invalidateRect(rect, drawNow);
-        }
+        WebFrameView* fv = mf->frameView();
+        TRect rect(Rect());
+        rect = TRect(fv->viewCoordsInFrameCoords(Rect().iTl), fv->viewCoordsInFrameCoords(Rect().iBr));
+    if (mf && mf->frameView())
+            mf->frameView()->invalidateRect(rect, drawNow);
     }
 }
 
@@ -609,7 +566,6 @@
 		    TPoint newPos ((aOffset.iX  * 100)/zoomlevel, (aOffset.iY  * 100)/zoomlevel);
 	        c->offsetCursor( aOffset );
             mf->frameView()->scrollTo(oldPos + newPos);
-            view->scrollStatus(false); 
             c->cursorUpdate(EFalse);        
         }
 
@@ -752,124 +708,28 @@
     }
 }
 
-TBool PluginWin::IsCollectBitmapSupported ()
-{
-    if(m_notifier) {
-        m_BitmapSupported = m_notifier->NotifyL( MPluginNotifier::ECollectBitmapSupported, (void*)0 ) ;
-    }
-    return m_BitmapSupported;
-}
-
-
-void PluginWin::GetBitmapFromPlugin (bool status)
-    {
-    if(m_notifier) {
-         if (status) {
-             //if plugin fails to send bitmap even though the "ECollectBitmapSupported"
-             CBrCtl*   brCtl = control(m_pluginskin->frame());    
-             WebView*  view = brCtl->webView();
-             
-             if(view && view->isPinchZoom())
-                 m_PluginInvisibleOnPinchZoom = ETrue; 
-             m_notifier->NotifyL( MPluginNotifier::ECollectBitmap, (void*)1 );
-			 
-			 //if Notify CollectBitmap failed to send bitmap to SetBitmapFromPlugin, 
-			 //Then forcefully make the plugin window invisible for pinch zoom 
-             if(m_PluginInvisibleOnPinchZoom)
-                 { 
-                 m_PluginInvisibleOnPinchZoom = EFalse; 
-                 if (IsVisible())
-                     {
-                     MakeVisible(false);
-                     }
-                 }
-         }
-         else {
-             m_notifier->NotifyL( MPluginNotifier::ECollectBitmap, (void*)0 );
-             
-             m_pluginHasBitmap = 0;
-             if(m_pausedBitmap)
-                 {
-                 delete m_pausedBitmap;
-                 m_pausedBitmap = NULL;
-                 }
-         }
-       }
-}
-
-
 void PluginWin::HandlePointerEventFromPluginL(const TPointerEvent& aEvent)
 {
     CBrCtl*   brCtl = control(m_pluginskin->frame());    
     WebView*  view = brCtl->webView();
-#ifdef BRDO_MULTITOUCH_ENABLED_FF	
-    if (aEvent.IsAdvancedPointerEvent()) {
-        TAdvancedPointerEvent tadvp = *(static_cast<const TAdvancedPointerEvent *>(&aEvent));
-        if (!StaticObjectsContainer::instance()->isPluginFullscreen()) {
-            tadvp.iPosition = aEvent.iPosition - view->PositionRelativeToScreen();
-        }
-        view->pointerEventHandler()->HandlePointerEventL(tadvp);
+    TPointerEvent event(aEvent);
+    
+    if (!StaticObjectsContainer::instance()->isPluginFullscreen()) {
+        event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen();
     }
-    else {
-#endif 	
-        TPointerEvent event(aEvent);
-        if (!StaticObjectsContainer::instance()->isPluginFullscreen()) {
-            event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen();
-        }
-        view->pointerEventHandler()->HandlePointerEventL(event);
-#ifdef BRDO_MULTITOUCH_ENABLED_FF			
-    }
-#endif 	
+    view->pointerEventHandler()->HandlePointerEventL(event);
 }
 
 
-TBool PluginWin::HandleGesture(const TStmGestureEvent& aEvent)
+TBool PluginWin::HandleGesture(const TGestureEvent& aEvent)
 {
     TBool ret = EFalse;
-    
-    TGestureEvent eventForPlugin; 
-    switch(aEvent.Code()) 
-        {
-        case EGestureUidUnknown :
-            eventForPlugin.SetCode(EGestureUnknown); 
-            break; 
-        case EGestureUidTouch :
-            eventForPlugin.SetCode(EGestureStart);
-            break; 
-        case EGestureUidTap : 
-            if(aEvent.Type() == ETapTypeSingle)
-                eventForPlugin.SetCode(EGestureTap); 
-            else 
-                eventForPlugin.SetCode(EGestureDoubleTap); 
-            break; 
-        case EGestureUidLongPress :
-            eventForPlugin.SetCode(EGestureLongTap); 
-            break; 
-        case EGestureUidPan :
-            eventForPlugin.SetCode(EGestureDrag);
-            break; 
-        case EGestureUidRelease :
-            eventForPlugin.SetCode(EGestureReleased); 
-            break; 
-        case EGestureUidFlick :
-            eventForPlugin.SetCode(EGestureFlick);
-            break; 
-        case EGestureUidPinch :
-            eventForPlugin.SetCode(EGesturePinch);
-            break; 
-        default : 
-            break; 
-
-        }
-    
-    
-    
     if (m_control) {
+        TGestureEvent gestEvent(aEvent);
         CBrCtl*   brCtl = control(m_pluginskin->frame());    
         WebView*  view = brCtl->webView();
         TPoint newPos = aEvent.CurrentPos();
-        // Not sure plugins need the start position of the gesture. Not inlcuded in the new struct
-        TPoint startPos = aEvent.CurrentPos();
+        TPoint startPos = aEvent.StartPos();
         TPoint viewPos = view->PositionRelativeToScreen();
         TPoint ctrlPos = m_control->PositionRelativeToScreen();
         
@@ -877,15 +737,16 @@
         // adjust the position to make it relative to top left corner of 
             newPos += viewPos; 
             startPos += viewPos;
+            gestEvent.SetCurrentPos(newPos);
+            gestEvent.SetStartPos(startPos);
         }
-        eventForPlugin.SetCurrentPos(newPos);
-        eventForPlugin.SetStartPos(startPos);
-        if (StaticObjectsContainer::instance()->isPluginFullscreen() ||
+    
+        if (StaticObjectsContainer::instance()->isPluginFullscreen() || 
 	    m_control->Rect().Contains(newPos - ctrlPos)) {
             NPEvent event;
             NPEventPointer ev;
             event.event = ENppEventPointer;
-            ev.reserved = &eventForPlugin;
+            ev.reserved = &gestEvent;
             ev.pointerEvent = NULL;
             event.param = &ev;
             ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), 
@@ -894,15 +755,13 @@
     }
     else if(!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event){
         TRect cliprect = m_pluginskin->getClipRect();
-        TPoint newPos = aEvent.CurrentPos();
-        eventForPlugin.SetCurrentPos(newPos);
-        eventForPlugin.SetCurrentPos(newPos);
-
-        if(cliprect.Contains(newPos)){
+        TPoint newpos = aEvent.CurrentPos();
+        if(cliprect.Contains(newpos)){
+           TGestureEvent gestEvent(aEvent);
            NPEvent event;
            NPEventPointer ev;
            event.event = ENppEventPointer;
-           ev.reserved = &eventForPlugin;
+           ev.reserved = &gestEvent;
            ev.pointerEvent = NULL;
            event.param = &ev;
            ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), 
@@ -912,102 +771,3 @@
     return ret;
 
 }
-
-bool PluginWin::containsPoint(WebView& view, const TPoint& pt)
-{
-    if (m_control) {
-        if (StaticObjectsContainer::instance()->isPluginFullscreen()) {
-            return true;
-        }
-        else {
-            TPoint point = pt;
-            TPoint viewPos = view.PositionRelativeToScreen();
-            TPoint ctrlPos = m_control->PositionRelativeToScreen();
-            point += viewPos;
-            return m_control->Rect().Contains(point - ctrlPos);
-        }
-    }
-    else 
-        return false;   
-}
-// -----------------------------------------------------------------------------
-// PluginWin::SetBitmapFromPlugin
-// Plugin video is captured in CFBsBitmap and handle is passed to plugin window 
-// Duplicate the bitmap handle and use it to draw while Panning or Pinch zoom
-// -----------------------------------------------------------------------------
-void PluginWin::SetBitmapFromPlugin(TInt aHandle)
-    {
-    m_PluginInvisibleOnPinchZoom = EFalse;
-
-    if (aHandle)
-        {
-        if (m_pausedBitmap)
-            {
-            delete m_pausedBitmap;
-            m_pausedBitmap = NULL;
-            }
-        m_pausedBitmap = new (ELeave) CFbsBitmap();
-        TInt dupStatus = m_pausedBitmap->Duplicate(aHandle);
-        if(dupStatus == KErrNone)
-            { 
-            m_pluginHasBitmap = true;
-            
-            
-            if (IsVisible())
-                   {
-                   MakeVisible(false);
-                   }
-            //setPluginFocusL(false);
-            drawBitmapToWebCoreContext();
-            } 
-       }
-    else
-        {
-        if(m_pausedBitmap)
-        {
-            delete m_pausedBitmap;
-        	m_pausedBitmap = NULL;
-		}
-        m_pluginHasBitmap = false;
-        }
-    }
-
-void PluginWin::ClearPluginBitmap()
-    {
-    if(m_pausedBitmap)
-        {
-        delete m_pausedBitmap;
-        m_pausedBitmap = NULL;
-        m_pluginHasBitmap = false; //clearing plugin bitmap
-        }
-    }
-
-void PluginWin::drawBitmapToWebCoreContext()
-    { 
-    CBrCtl* brCtl = control(m_pluginskin->frame());
-    WebView* view = brCtl->webView();
-    WebCoreGraphicsContext* context = view->getGraphicsContext();
-    CFbsBitGc& gc = context->gc();
-    TRect plWinRect(m_pluginskin->getPluginWinRect());
-
-    TRect oldcontextrect = context->clippingRect();
-    TRect clippingRect = context->clippingRect();
-
-    // save the gc state
-    TWebCoreSavedContext saved(context->save());
-    
-    if(plWinRect != clippingRect)
-        {
-        context->setClippingRect(plWinRect);
-        }
-    gc.DrawBitmap(plWinRect, m_pausedBitmap);
-    context->restore(saved);
-    }
-
-// Notify Plugins about the change in Access Point during Upgrade / Downgrade
-void PluginWin::notifyAPChange(void* ap)
-{
-    if (m_notifier) {
-        m_notifier->NotifyL( MPluginNotifier::EAccesPointChanged, ap );
-    }
-}