webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp
branchRCL_3
changeset 94 919f36ff910f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/webkit/s60/webview/WebGestureInterface.cpp	Wed Sep 01 12:28:30 2010 +0100
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2008 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:
+*
+*/
+
+
+// INCLUDE FILES
+#include <Browser_platform_variant.hrh>
+#include "config.h"
+#include "../../bidi.h"
+#include <coemain.h>
+#include "brctl.h"
+#include <brctldefs.h>
+#include "WebGestureInterface.h"
+#include "WebView.h"
+#include "WebPointerEventHandler.h"
+
+const TInt TOUCH_AREA_TIMEOUT = 200;
+const TInt TOUCH_TIME_AREA_TIMEOUT = 0;
+const TInt HOLD_AREA_TIMEOUT = 1500;
+const TInt DOUBLE_TAP_TIMEOUT = 400;
+const TInt SUPPRESS_TIMEOUT = 0;
+const TInt MOVE_SUPPRESS_TIMEOUT = 0;
+
+const TInt TOUCH_TIME_AREA_WIDTH = 4;
+const TInt TOUCH_AREA_WIDTH = 4;
+const TInt HOLD_AREA_WIDTH = 4;
+
+const TInt PAN_SPEED_LOW = 0;
+const TInt PAN_SPEED_HIGH = 400;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CgesturetestAppView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+WebGestureInterface* WebGestureInterface::NewL(WebView* view)
+{
+    WebGestureInterface* self = WebGestureInterface::NewLC(view);
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// CgesturetestAppView::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+WebGestureInterface* WebGestureInterface::NewLC(WebView* view)
+{
+    WebGestureInterface* self = new (ELeave) WebGestureInterface(view);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// WebGestureInterface::WebGestureInterface
+// C++ default constructor
+//
+// -----------------------------------------------------------------------------
+//
+WebGestureInterface::WebGestureInterface(WebView* view)
+: m_webview(view)
+{
+}
+
+// -----------------------------------------------------------------------------
+// WebGestureInterface::~WebGestureInterface
+// -----------------------------------------------------------------------------
+WebGestureInterface::~WebGestureInterface()
+{
+    iGestureContext->Deactivate();
+    iGestureContext->RemoveListener(this);
+    delete iGestureEngine;
+}
+// -----------------------------------------------------------------------------
+// WebGestureInterface::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void WebGestureInterface::ConstructL()
+{
+    iGestureEngine = CStmGestureEngine::NewL();
+    iGestureContext = iGestureEngine->CreateContextL(TInt(this));
+    iGestureContext->SetContext(m_webview);
+    iGestureContext->AddListenerL(this);
+
+    CStmGestureParameters& gestureParams = iGestureContext->Config();
+    //Enable the Gestures needed
+    gestureParams.SetEnabled(stmGesture::EGestureUidTouch, ETrue);
+    gestureParams.SetEnabled(stmGesture::EGestureUidTap, ETrue);
+    gestureParams.SetEnabled(stmGesture::EGestureUidRelease, ETrue);
+    gestureParams.SetEnabled(stmGesture::EGestureUidPan, ETrue);
+    gestureParams.SetEnabled(stmGesture::EGestureUidFlick, ETrue);
+    gestureParams.SetEnabled(stmGesture::EGestureUidLongPress, ETrue);
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+    if (m_webview->brCtl()->capabilities() & TBrCtlDefs::ECapabilityPinchZoom) {
+        gestureParams.SetEnabled(stmGesture::EGestureUidPinch, ETrue);
+    }
+    else {
+        gestureParams.SetEnabled(stmGesture::EGestureUidPinch, EFalse);
+    }
+#else
+    gestureParams.SetEnabled(stmGesture::EGestureUidPinch, EFalse);
+#endif
+
+    //Set other parameters
+
+    TStmGestureArea& touchTimeArea = *gestureParams.Area(stmGesture::ETouchTimeArea);
+    TStmGestureArea& touchArea = *gestureParams.Area(stmGesture::ETouchArea);
+    TStmGestureArea& holdArea  = *gestureParams.Area(stmGesture::EHoldArea);
+
+    touchTimeArea.iShape = TStmGestureArea::ERectangle;
+    touchTimeArea.iTimeout =  TOUCH_TIME_AREA_TIMEOUT;
+    touchTimeArea.iSize.iWidth = TOUCH_TIME_AREA_WIDTH;
+
+    touchArea.iShape = TStmGestureArea::ERectangle;
+    touchArea.iTimeout =  TOUCH_AREA_TIMEOUT;
+    touchArea.iSize.iWidth = TOUCH_AREA_WIDTH;
+
+    holdArea.iShape = TStmGestureArea::ERectangle;
+    holdArea.iTimeout =  HOLD_AREA_TIMEOUT;
+    holdArea.iSize.iWidth = HOLD_AREA_WIDTH;
+    
+    //Double tap functionality is enabled based on ECapabilityFitToScreen capability.
+    //setting the doubletap timeout to ZERO if this cap is not defined
+    if (m_webview->brCtl()->capabilities() & TBrCtlDefs::ECapabilityFitToScreen) 
+        gestureParams[stmGesture::EDoubleTapTimeout   ] = DOUBLE_TAP_TIMEOUT;
+    else
+        gestureParams[stmGesture::EDoubleTapTimeout   ] = 0;    
+
+    gestureParams[stmGesture::ESuppressTimeout    ] = SUPPRESS_TIMEOUT;
+    gestureParams[stmGesture::EMoveSuppressTimeout] = MOVE_SUPPRESS_TIMEOUT;
+    gestureParams[stmGesture::EPanSpeedLow        ] = PAN_SPEED_LOW;
+    gestureParams[stmGesture::EPanSpeedHigh       ] = PAN_SPEED_HIGH;
+
+    gestureParams[stmGesture::EEnableFiltering    ] = ETrue;
+#ifdef BRDO_MULTITOUCH_ENABLED_FF
+    gestureParams[stmGesture::ECapacitiveUpUsed   ] = ETrue;
+#ifndef __WINSCW__    
+    gestureParams[stmGesture::EAdjustYPos         ] = ETrue;
+#endif    
+#else
+    gestureParams[stmGesture::ECapacitiveUpUsed   ] = EFalse;
+    gestureParams[stmGesture::EAdjustYPos         ] = EFalse;
+#endif
+    iGestureContext->ActivateL();
+
+}
+
+// -----------------------------------------------------------------------------
+// HandlePointerEventL
+// -----------------------------------------------------------------------------
+void WebGestureInterface::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+{
+    iGestureEngine->HandlePointerEventL(aPointerEvent, m_webview);
+}
+
+// -----------------------------------------------------------------------------
+// HandleGestureEventL
+// -----------------------------------------------------------------------------
+void  WebGestureInterface::HandleGestureEventL(const TStmGestureEvent& aGesture)
+{
+     m_webview->pointerEventHandler()->HandleGestureEventL(aGesture);
+}
+
+
+