diff -r d39add9822e2 -r 5bfc169077b2 webengine/osswebengine/webkit/s60/webview/WebPagePinchZoomHandler.cpp --- a/webengine/osswebengine/webkit/s60/webview/WebPagePinchZoomHandler.cpp Tue Feb 02 00:56:45 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -/* -* 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 <../bidi.h> -#include "WebPagePinchZoomHandler.h" -#include "WebView.h" - - -const int KBitmapUpdateTimeout = 100*1000; -const int KPinchExitWaitTimeout = 300*1000; - -const int KPinchZoomStepSizeSmall = 3; -const int KPinchZoomStepSizeMedium = 4; -const int KPinchZoomStepSizeLarge = 5; -const int KMinPinchFactor = 1; - -int pinchBitmapUpdateTimerCb( void* ptr ); -int pinchExitWaitTimerCb( void* ptr ); - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// WebPagePinchZoomHandler::NewL -// The two-phase Symbian constructor -// ----------------------------------------------------------------------------- -// -WebPagePinchZoomHandler* WebPagePinchZoomHandler::NewL(WebView* webView) -{ - WebPagePinchZoomHandler* self = new (ELeave) WebPagePinchZoomHandler(webView); - CleanupStack::PushL(self); - self->constructL(); - CleanupStack::Pop(); //self - return self; -} - -// ----------------------------------------------------------------------------- -// WebPagePinchZoomHandler::WebPointerEventHandler -// C++ default constructor -// -// ----------------------------------------------------------------------------- -// -WebPagePinchZoomHandler::WebPagePinchZoomHandler(WebView* webView) -: m_webView(webView) -, m_zoomOutBaseLevel(0) -, m_pinchCenterSet(false) -, m_zoomStepSize(0) -, m_pinchActive(false) -, m_pinchCenter(0,0) -{ -} - -// ----------------------------------------------------------------------------- -// WebPagePinchZoomHandler::constructL -// The constructor that can contain code that might leave. -// ----------------------------------------------------------------------------- -// -void WebPagePinchZoomHandler::constructL() -{ - m_bitmapUpdateTimer = CPeriodic::NewL(CActive::EPriorityHigh); - m_pinchExitWaitTimer = CPeriodic::NewL(CActive::EPriorityHigh); -} - -// ----------------------------------------------------------------------------- -// WebPagePinchZoomHandler::~WebPagePinchZoomHandler -// ----------------------------------------------------------------------------- -WebPagePinchZoomHandler::~WebPagePinchZoomHandler() -{ - if (m_bitmapUpdateTimer->IsActive()) - m_bitmapUpdateTimer->Cancel(); - delete m_bitmapUpdateTimer; - - if (m_pinchExitWaitTimer->IsActive()) - m_pinchExitWaitTimer->Cancel(); - delete m_pinchExitWaitTimer; - -} - -// ----------------------------------------------------------------------------- -// getPinchZoomStepSize -// ----------------------------------------------------------------------------- -TInt WebPagePinchZoomHandler::getPinchZoomStepSize() -{ - TInt zoomStepSize = 0; - - TInt absPinchFactor = Abs (m_pinchFactor); - if (absPinchFactor == 0) - return zoomStepSize; - - if ( absPinchFactor >= KMinPinchFactor && absPinchFactor <= 10 ) { - zoomStepSize = KPinchZoomStepSizeSmall; - } - else if ( absPinchFactor > 10 && absPinchFactor <= 20 ) { - zoomStepSize = KPinchZoomStepSizeMedium; - } - else if ( absPinchFactor > 20 ) { - zoomStepSize = KPinchZoomStepSizeLarge; - } - - return (m_pinchFactor/absPinchFactor) * zoomStepSize; -} - -// ----------------------------------------------------------------------------- -// handlePinchGestureEventL -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::handlePinchGestureEventL(const TStmGestureEvent& aGesture) -{ - if(aGesture.GestureState() == EGestureEnter) { - m_pinchActive = true; - handlePinchGestureL(aGesture); - } - else { - m_pinchActive = false; - handlePinchGestureExitL(aGesture); - } - -} - -// ----------------------------------------------------------------------------- -// handlePinchGestureL -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::handlePinchGestureL(const TStmGestureEvent& aGesture) -{ - - m_pinchFactor = aGesture.Details(); - TInt zoomValue = 0; - TInt currentZoom = m_webView->zoomLevel(); - TInt zoomStepSize = getPinchZoomStepSize(); - - if (zoomStepSize == 0) - return; - - zoomValue = currentZoom + zoomStepSize; - if (m_zoomStepSize > 0 && zoomStepSize < 0) m_zoomOutBaseLevel = currentZoom / 2; - - m_zoomStepSize = zoomStepSize; - - if(zoomValue >= m_webView->minZoomLevel() && zoomValue <= m_webView->maxZoomLevel()) { - if (!m_pinchCenterSet) { - TPoint pinchCenter = aGesture.PinchEndPos() + aGesture.CurrentPos(); - m_pinchCenter.iX = pinchCenter.iX / 2; - m_pinchCenter.iY = pinchCenter.iY / 2; - m_pinchCenterSet = true; - if (zoomStepSize < 0) m_zoomOutBaseLevel = currentZoom / 2; - } - if (!(zoomStepSize < 0 && zoomValue < m_zoomOutBaseLevel)) - setZoomLevel(zoomValue); - - } -} - -// ----------------------------------------------------------------------------- -// handlePinchGestureExitL -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::handlePinchGestureExitL(const TStmGestureEvent& aGesture) -{ - m_zoomOutBaseLevel = 0; - m_zoomStepSize = 0; - m_pinchCenterSet = false; - if (!m_bitmapUpdateTimer->IsActive()) - m_bitmapUpdateTimer->Start( KBitmapUpdateTimeout,KBitmapUpdateTimeout,TCallBack(&pinchBitmapUpdateTimerCb,this)); - - if (!m_pinchExitWaitTimer->IsActive()) - m_pinchExitWaitTimer->Start( KPinchExitWaitTimeout,0,TCallBack(&pinchExitWaitTimerCb,this)); - -} - -// ----------------------------------------------------------------------------- -// setZoomLevel -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::setZoomLevel(int zoomLevel) -{ - m_webView->setPinchBitmapZoomLevel(zoomLevel); -} - -// ----------------------------------------------------------------------------- -// isPinchActive -// ----------------------------------------------------------------------------- -TBool WebPagePinchZoomHandler::isPinchActive() -{ - bool pinchActive = false; - if (m_pinchActive == true || m_pinchExitWaitTimer->IsActive()) - pinchActive = true; - - return pinchActive; - -} - -// ----------------------------------------------------------------------------- -// updateBitmap -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::updateBitmap(void) -{ - m_bitmapUpdateTimer->Cancel(); - m_webView->restoreZoomLevel(m_webView->scalingFactor()); -} - -// ----------------------------------------------------------------------------- -// handlepinchExitWaitTimer -// ----------------------------------------------------------------------------- -void WebPagePinchZoomHandler::handlepinchExitWaitTimer(void) -{ - m_pinchExitWaitTimer->Cancel(); -} - -// ----------------------------------------------------------------------------- -// pinchBitmapUpdateTimerCb -// ----------------------------------------------------------------------------- -int pinchBitmapUpdateTimerCb(void* ptr) -{ - ((WebPagePinchZoomHandler*)ptr)->updateBitmap(); - return 0; -} - -// ----------------------------------------------------------------------------- -// pinchExitWaitTimerCb -// ----------------------------------------------------------------------------- -int pinchExitWaitTimerCb(void* ptr) -{ - ((WebPagePinchZoomHandler*)ptr)->handlepinchExitWaitTimer(); - return 0; -} - -// End of File - -