webengine/osswebengine/WebKit/s60/webview/WebPageZoomHandler.cpp
changeset 0 dd21522fd290
child 16 a359256acfc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPageZoomHandler.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,216 @@
+/*
+* 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 <aknutils.h>
+#include "WebPageZoomHandler.h"
+#include "SettingsContainer.h"
+#include <AknVolumePopup.h>
+#include "WebView.h"
+#include "BrCtl.h"
+#include "WebFrameView.h"
+#include "WebFrame.h"
+
+
+const int KZoomSliderDefaultValue = 50;
+const int KZoomSliderMinRange  = 0;
+const int KZoomSliderStepSize  = 10;
+const int KZoomSliderTimeout   = 5;
+const int KBitmapUpdateTimeout = 100*1000;
+
+int bitmapUpdateTimerCb( void* ptr );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// WebPageZoomHandler::NewL
+// The two-phase Symbian constructor
+// -----------------------------------------------------------------------------
+//
+WebPageZoomHandler* WebPageZoomHandler::NewL(WebView& webView)
+{
+    WebPageZoomHandler* self = new (ELeave) WebPageZoomHandler( webView );
+    CleanupStack::PushL(self);
+    self->constructL();
+    CleanupStack::Pop(); //self
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// WebPageZoomHandler::WebPointerEventHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+WebPageZoomHandler::WebPageZoomHandler(WebView& webView)
+: m_webView(&webView), m_zoomSlider(0)
+{
+}
+
+// -----------------------------------------------------------------------------
+// WebPageZoomHandler::constructL
+// The constructor that can contain code that might leave.
+// -----------------------------------------------------------------------------
+//
+void WebPageZoomHandler::constructL()
+{
+    m_bitmapUpdateTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+    m_stepSize = KZoomSliderStepSize;
+}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+WebPageZoomHandler::~WebPageZoomHandler()
+{
+    if ( m_bitmapUpdateTimer && m_bitmapUpdateTimer->IsActive() )
+        {
+        m_bitmapUpdateTimer->Cancel();
+        }
+
+    delete m_bitmapUpdateTimer;
+
+    if ( m_zoomSlider )
+        {
+        delete m_zoomSlider;
+        }
+}
+// -----------------------------------------------------------------------------
+
+void WebPageZoomHandler::showZoomSliderL()
+{
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        if (m_zoomSlider) {
+            delete m_zoomSlider;
+            m_zoomSlider = NULL;
+            }
+        m_zoomSlider = CAknVolumePopup::NewL( NULL, ETrue);
+        m_zoomSlider->SetValueType( EAknSliderValuePercentage );
+        m_zoomSlider->SetStepSize( m_stepSize );
+        m_zoomSlider->SetAdjustmentIndicatorDisplay( ETrue );
+        m_zoomSlider->SetTimeOutAsSecond( KZoomSliderTimeout );
+        m_zoomSlider->ClosePopupWhenTappedOutside( EFalse );
+        m_zoomSlider->SetRange( m_webView->minZoomLevel(), m_webView->maxZoomLevel());
+        m_zoomSlider->SetValue( m_webView->scalingFactor());
+        m_zoomSlider->SetObserver(this);
+    
+        TRect currRect = m_webView->brCtl()->Rect();
+        TPoint newPos ( currRect.iTl.iX + ( currRect.iBr.iX - m_zoomSlider->Size().iWidth ) , currRect.iTl.iY + 30 );
+    
+        m_zoomSlider->SetPosition( newPos );
+        m_zoomSlider->ShowVolumePopupL();
+        }
+}
+
+void WebPageZoomHandler::hideZoomSliderL()
+{
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        if (m_zoomSlider) 
+            {
+            if( m_zoomSlider->IsVisible())
+                m_zoomSlider->CloseVolumePopup();
+    
+            delete m_zoomSlider;
+            m_zoomSlider = NULL;
+            m_webView->notifyZoomSliderModeChangeL(false);
+            }
+        }
+}
+
+void WebPageZoomHandler::setZoomLevel(int zoomLevel)
+{
+    m_webView->setBitmapZoomLevel(zoomLevel);
+}
+
+
+void WebPageZoomHandler::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
+{
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        TBool sliderVisibility = false;
+        TInt zoomValue = 0;
+    
+        if(m_zoomSlider == aControl) {
+    
+            if (m_bitmapUpdateTimer && m_bitmapUpdateTimer->IsActive())
+                m_bitmapUpdateTimer->Cancel();
+    
+            sliderVisibility = m_zoomSlider->IsVisible();
+    
+            switch(aEventType) {
+                case EEventStateChanged:
+            	case EEventRequestFocus:
+                    if(sliderVisibility) {
+                        zoomValue = m_zoomSlider->Value();
+                        if(zoomValue >= m_webView->minZoomLevel() && zoomValue <= m_webView->maxZoomLevel()){
+                            setZoomLevel(zoomValue);
+                        }
+                        else if( zoomValue < m_webView->minZoomLevel()) {
+    
+                              m_zoomSlider->SetValue( m_webView->scalingFactor() );
+                        }
+                    }
+                    break;
+    
+                default:
+                    break;
+            }
+            if(sliderVisibility && m_bitmapUpdateTimer)
+                m_bitmapUpdateTimer->Start( KBitmapUpdateTimeout,KBitmapUpdateTimeout,TCallBack(&bitmapUpdateTimerCb,this));
+    
+    
+            if( !sliderVisibility && EEventStateChanged == aEventType ) {
+                m_webView->notifyZoomSliderModeChangeL(false);
+            }
+        }
+    } 
+}
+
+
+int WebPageZoomHandler::stepSize()
+{
+    return m_stepSize;
+}
+
+
+WebView* WebPageZoomHandler::view( void )
+{
+    return m_webView;
+}
+
+bool WebPageZoomHandler::isActive( void )
+{
+    return ( m_zoomSlider && m_zoomSlider->IsVisible())?true:false;
+}
+void WebPageZoomHandler::updateBitmap(void)
+{
+    m_bitmapUpdateTimer->Cancel();
+    m_webView->restoreZoomLevel(m_webView->scalingFactor());
+}
+
+int bitmapUpdateTimerCb(void* ptr)
+{
+    ((WebPageZoomHandler*)ptr)->updateBitmap();
+    return 0;
+}
+
+//  End of File