--- a/svgtopt/SVGTPlugin/src/SvgtPluginControl.cpp Tue Jul 06 15:17:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,589 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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: SVGT Plugin Implementation source file
- *
-*/
-
-#include <featmgr.h>
-#include <eikenv.h>
-#include <w32std.h>
-#include <e32base.h>
-#include <barsread.h>
-#include <SVGEngineInterfaceImpl.h>
-//#include <Svgengineinterface.h>
-#include <f32file.h>
-
-#include "Svgtplugin.h"
-
-#define SVGT_PLUGIN_DEVICE_KEY_0 48
-#define SVGT_PLUGIN_DEVICE_KEY_1 49
-#define SVGT_PLUGIN_DEVICE_KEY_2 50
-#define SVGT_PLUGIN_DEVICE_KEY_3 51
-#define SVGT_PLUGIN_DEVICE_KEY_4 52
-#define SVGT_PLUGIN_DEVICE_KEY_5 53
-#define SVGT_PLUGIN_DEVICE_KEY_6 54
-#define SVGT_PLUGIN_DEVICE_KEY_7 55
-#define SVGT_PLUGIN_DEVICE_KEY_8 56
-#define SVGT_PLUGIN_DEVICE_KEY_9 57
-#define SVGT_PLUGIN_DEVICE_KEY_ASTERIX 42
-
-
-void CSvgtPluginControl::ConstructL(CSvgtPlugin* aPlugin, const CCoeControl* aParentControl)
- {
- iAsFileCalled = EFalse;
- iShowCursor = EFalse;
- iPointerX = 5;
- iPointerY = 5;
- iPlugin=aPlugin;
- this->CreateWindowL(aParentControl);
- ActivateL();
- EnableDragEvents();
- iLightObserver = CHWRMLight::NewL(this);
- }
-
-CSvgtPluginControl::~CSvgtPluginControl()
- {
- delete iLightObserver;
- }
-
-void CSvgtPluginControl::Draw(const TRect& aRect) const
- {
- CWindowGc &gc = SystemGc();
- if (iPlugin && iPlugin->iRenderBuffer !=NULL)
- {
-
- // Fix for the iframe scrolling.
- TRect lCliprect;
-
- lCliprect.iTl.iY = iPlugin->iCurrentWindow.clipRect.top;
- lCliprect.iTl.iX = iPlugin->iCurrentWindow.clipRect.left;
- lCliprect.iBr.iY = iPlugin->iCurrentWindow.clipRect.bottom;
- lCliprect.iBr.iX = iPlugin->iCurrentWindow.clipRect.right;
-
- TSize lWindowSize(iPlugin->iCurrentWindow.width,iPlugin->iCurrentWindow.height);
-
- if(lWindowSize!=(lCliprect.Size()))
- {
- // Get the Abs(x,y) of the window and render with the size of the cliprect
- TPoint lpt(Abs(iPlugin->iCurrentWindow.x),Abs(iPlugin->iCurrentWindow.y ));
- TRect lrect(lpt,lCliprect.Size());
- gc.BitBlt( aRect.iTl, (iPlugin->iRenderBuffer), lrect );
- }
- else
- {
- gc.BitBlt( aRect.iTl, (iPlugin->iRenderBuffer), aRect );
- }
-
-
- if ( iShowCursor )
- {
- TInt lX = iPointerX + aRect.iTl.iX;
- TInt lY = iPointerY + aRect.iTl.iY;
- TRect csrh ( lX - 2,
- lY - 5,
- lX + 2,
- lY + 5 );
- TRect csrv ( lX - 5,
- lY - 2,
- lX + 5,
- lY + 2 );
- gc.SetPenSize( TSize( 1, 1 ) );
- gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
- gc.SetBrushColor( TRgb( 0, 0, 0 ) );
- gc.SetPenColor( TRgb( 0, 0, 0 ) );
- gc.DrawRect( csrh );
- gc.DrawRect( csrv );
- csrh.Shrink( 1, 1 );
- csrv.Shrink( 1, 1 );
- gc.SetBrushColor( TRgb( 255, 225, 225 ) );
- gc.SetPenColor( TRgb( 255, 225, 225 ) );
- gc.DrawRect( csrh );
- gc.DrawRect( csrv );
- }
- }
- }
-
-TInt CSvgtPluginControl::CountComponentControls() const
- {
- return 0;
- }
-
-CCoeControl* CSvgtPluginControl::ComponentControl(TInt /*aIndex*/) const
- {
- return NULL;
- }
-
-void CSvgtPluginControl::SizeChanged()
- {
- }
-
-#ifndef ER5
-TCoeInputCapabilities CSvgtPluginControl::InputCapabilities() const
- {
- return TCoeInputCapabilities(TCoeInputCapabilities::ENavigation);
- }
-#endif
-
-void CSvgtPluginControl::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/)
- {
- }
-
-void CSvgtPluginControl::FocusChanged(TDrawNow /*aDrawNow*/)
- {
- }
-
-TKeyResponse CSvgtPluginControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
- {
- TKeyResponse retVal = EKeyWasNotConsumed;
- if( iPlugin->iSvgModule && iPlugin->iSvgModule->SvgDocument() )
- {
- if ( aType == EEventKeyUp )
- {
- iPointerDx = 0;
- iPointerDy = 0;
- if ( aKeyEvent.iScanCode == EStdKeyDevice3 ) // Center button of rocker key
- {
- iPlugin->iSvgModule->MouseUp( iPointerX, iPointerY );
- retVal = EKeyWasConsumed;
- }
- if(iPreviousScanCode.iScanCode == SVGT_PLUGIN_DEVICE_KEY_0)
- {
- if(!iPreviousScanCode.iRepeats) /*Short Key Press of 'Zero' Do Zoom Out*/
- {
- iPlugin->iSvgModule->Zoom(0.5f);
- iPlugin->iSvgModule->Redraw();
- }
- else /*Long Key Press of 'Zero' Reset to Original View*/
- {
- iPlugin->iSvgModule->OriginalView();
- iPlugin->iSvgModule->Redraw();
- }
- retVal = EKeyWasConsumed;
-
- }
- iPreviousScanCode.iRepeats = 0;
- iPreviousScanCode.iCode = 0;
- iPreviousScanCode.iScanCode = 0;
- }
- else if ( aType == EEventKey )
- {
- retVal = EKeyWasConsumed;
- // aKeyEvent.iScanCode does not recognize EStdKeyNkpAsterisk
- switch ( aKeyEvent.iScanCode )
- {
- case EStdKeyLeftArrow:
- iPointerDx -= 5;
- iPointerDy = 0;
- break;
- case EStdKeyRightArrow:
- iPointerDx += 5;
- iPointerDy = 0;
- break;
- case EStdKeyUpArrow:
- iPointerDx = 0;
- iPointerDy -= 5;
- break;
- case EStdKeyDownArrow:
- iPointerDx = 0;
- iPointerDy += 5;
- break;
- case EStdKeyDevice3:
- // Center button of rocker key
- iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY );
- break;
- case EStdKeyHash: // Pause/Resume
- if(iPlugin->iSvgModule->CurrentState() == 0)
- iPlugin->iSvgModule->Stop();
- else if(iPlugin->iSvgModule->CurrentState() == 1)
- iPlugin->iSvgModule->Resume();
- break;
-
- case SVGT_PLUGIN_DEVICE_KEY_5: //Zoom In
- iPlugin->iSvgModule->Zoom(2.0f);
- iPlugin->iSvgModule->Redraw();
- break;
-
- case SVGT_PLUGIN_DEVICE_KEY_1: //Rotate ClockWise 90
- iPlugin->iSvgModule->Rotate( (float) (3.1415926/2), iContentDimension.iWidth/2, iContentDimension.iHeight/2);
- iPlugin->iSvgModule->Redraw();
- break;
-
- case SVGT_PLUGIN_DEVICE_KEY_3: //Rotate Counter ClockWise 90
- iPlugin->iSvgModule->Rotate( (float) (-3.1415926/2), iContentDimension.iWidth/2, iContentDimension.iHeight/2);
- iPlugin->iSvgModule->Redraw();
- break;
- case SVGT_PLUGIN_DEVICE_KEY_7: //Rotate ClockWise 45
- iPlugin->iSvgModule->Rotate( (float) (3.1415926/4), iContentDimension.iWidth/2, iContentDimension.iHeight/2);
- iPlugin->iSvgModule->Redraw();
- break;
- case SVGT_PLUGIN_DEVICE_KEY_9: //Rotate Counter ClockWise 45
- iPlugin->iSvgModule->Rotate( (float) (-3.1415926/4), iContentDimension.iWidth/2, iContentDimension.iHeight/2);
- iPlugin->iSvgModule->Redraw();
- break;
- case SVGT_PLUGIN_DEVICE_KEY_0:
- iPreviousScanCode = aKeyEvent;
- break;
- default:
- retVal = EKeyWasNotConsumed;
- }
- }
-
- else if ( aType == EEventKeyDown)
- {
- // Send the mousedown event for triggering any animation
- // Since the EEventKey is not recieved when MSK is pressed,
- // the mousedown doesn't occur on engine. Hence EEventKey
- // handled here
- if ( aKeyEvent.iScanCode == EStdKeyDevice3 ) // Center button of rocker key
- {
- iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY );
- retVal=EKeyWasConsumed;
- }
- }
-
- if ( (iPointerDx != 0) || (iPointerDy != 0) )
- {
- UpdatePointer(iPointerDx,iPointerDy);
- }
- }
- return retVal;
- }
-
-
-void CSvgtPluginControl::AsFile(const TDesC& fname,NPStream* stream)
- {
- // -----------------------------------
- // Check for image was requested
- // -----------------------------------
- if( iPlugin && iFilename.Length() > 0 )
- {
- TInt lFileSize = 0;
- RFile lSvgFile;
- CEikonEnv* iEikEnv = CEikonEnv::Static();
-
- // Attempt to open the file in read mode
- User::LeaveIfError( lSvgFile.Open(iEikEnv->FsSession(),fname,EFileRead ) );
-
- // Save on cleanup stack
- CleanupClosePushL( lSvgFile );
-
- // Get the size of the data to create read buffer
- User::LeaveIfError( lSvgFile.Size(lFileSize) );
-
- // Create buffer that will contain the file data
- HBufC8* lFileData = HBufC8::NewLC(lFileSize);
- TPtr8 lFileDataPtr(lFileData->Des());
-
- // Read from the file
- User::LeaveIfError( lSvgFile.Read(lFileDataPtr) );
-
- TInt index = reinterpret_cast<TInt>((stream->notifyData));
-
- iPlugin->iSvgModule->AssignImageData(*(iPlugin->iImageUrlInfoList[index]), lFileData );
- iPlugin->iSvgModule->Redraw();
-
- // The ownership of lFileData is with the respective Image Element.
- CleanupStack::Pop(1);
- CleanupStack::PopAndDestroy(&lSvgFile); // lSvgFile.Close()
-
- return;
- }
-
- // Svg file
- iFilename.Zero();
- iFilename.Copy(fname);
-
- if ( ( iPlugin && iPlugin->iSvgModule ) )
- {
- iPlugin->iSvgModule->Stop();
- iPlugin->LoadSvgFile( iFilename );
- // After loading the content, the width & height will be visible to plugin.
- // It is time to adjust the size if needed.
- TBool widthInPercentage = EFalse;
- TBool heightInPercentage = EFalse;
- iContentDimension = iPlugin->iSvgModule->ContentDimensionsInPercentage();
-
- if(iContentDimension.iWidth == -1)
- {
- widthInPercentage = EFalse;
- if(iPlugin->iSvgModule->SvgDocument())
- {
- iContentDimension.iWidth = iPlugin->iSvgModule->GetViewportWidth(iPlugin->iSvgModule->SvgDocument());
- }
- else
- {
- return;
- }
- }
- else
- {
- widthInPercentage = ETrue;
- }
-
- if(iContentDimension.iHeight == -1)
- {
- heightInPercentage = EFalse;
- if(iPlugin->iSvgModule->SvgDocument())
- {
- iContentDimension.iHeight = iPlugin->iSvgModule->GetViewportHeight(iPlugin->iSvgModule->SvgDocument());
- }
- else
- {
- return;
- }
-
- }
- else
- {
- heightInPercentage = ETrue;
- }
- if(iPlugin->AdjustDimention(widthInPercentage, heightInPercentage))
- {
- // dimention change is needed so return and notify Browser.
- iAsFileCalled = ETrue;
- return;
- }
-
- iPlugin->iSvgModule->Start();
- }
- iAsFileCalled = ETrue;
- }
-
-
-TBool CSvgtPluginControl::IsAsFileCalled()
- {
- return iAsFileCalled;
- }
-
-TDesC& CSvgtPluginControl::GetFilename()
- {
- return iFilename;
- }
-
-
-void CSvgtPluginControl::LightStatusChanged(TInt aTarget, CHWRMLight::TLightStatus aStatus)
-{
- //TInt lState = iPlugin->iSvgModule->CurrentState();
- if((aTarget == CHWRMLight::EPrimaryDisplay) || (aTarget == CHWRMLight::EPrimaryDisplayAndKeyboard))
- {
- if(aStatus == CHWRMLight::ELightOff)
- {
-
- if (iPlugin && iPlugin->iSvgModule)
- {
- #ifdef _DEBUG
- RDebug::Printf("Backlight Off");
- #endif //_DEBUG
-
- iPlugin->iSvgModule->Pause();
- }
-
- }
- else if(aStatus == CHWRMLight::ELightOn)
- {
-
- if (iPlugin && iPlugin->iSvgModule)
- {
- #ifdef _DEBUG
- RDebug::Printf("Backlight On");
- #endif //_DEBUG
-
- iPlugin->iSvgModule->Resume();
- }
- }
- }
-
-}
-/**
-* MOperaPluginNotifier methods
-* - Handle notifications browser
-*/
-TInt CSvgtPluginControl::NotifyL(TNotificationType aCallType, void* aParam)
- {
- if ( (iPlugin == NULL ) || ( iPlugin->iSvgModule == NULL ) )
- {
- return KErrNone;
- }
-
- if(aCallType == EApplicationFocusChanged)
- {
- TInt lState = iPlugin->iSvgModule->CurrentState();
- TBool lInFocus = (TBool) aParam;
-
- if ( lInFocus )
- {
- // iShowCursor = ETrue;
- if ( lState == 1 )
- {
- iPlugin->iSvgModule->Resume();
- }
- DrawNow();
- }
- else if ( !lInFocus )
- {
- //ShowCursor = EFalse;
- if ( lState == 0 )
- {
- iPlugin->iSvgModule->Pause();
- }
- DrawNow();
- }
- }
- else if(aCallType == EPluginActivated)
- {
- iShowCursor = ETrue;
- DrawNow();
- }
- else if(aCallType == EPluginDeactivated)
- {
- iShowCursor = EFalse;
- DrawNow();
- }
- else if(aCallType == EPluginInvisible )
- {
- }
- return KErrNone;
- }
-
-
-void CSvgtPluginControl::ApplicationFocusChanged(TBool /*aInFocus*/)
- {
- }
-
-void CSvgtPluginControl::SystemNotification()
- {
- }
-
-void CSvgtPluginControl::HandlePointerEventL(const TPointerEvent& aPointerEvent)
- {
-
-
- if ( iPlugin->iSvgModule && iPlugin->iSvgModule->SvgDocument() )
- {
- iPointerDx = 0;
- iPointerDy = 0;
-
- if(aPointerEvent.iType == TPointerEvent::EButton1Down)
- {
- if(aPointerEvent.iPosition.iX <=iPlugin->iRenderWidth && aPointerEvent.iPosition.iY <=iPlugin->iRenderHeight)
- {
- iPointerX = aPointerEvent.iPosition.iX;
- iPointerY = aPointerEvent.iPosition.iY;
-
- iXPosAtMouseDown = iPointerX;
- iYPosAtMouseDown = iPointerY;
-
- iPlugin->iSvgModule->MouseDown( iPointerX, iPointerY );
- UpdatePointer();
- }
- }
- else if(aPointerEvent.iType == TPointerEvent::EButton1Up)
- {
- iPlugin->iSvgModule->MouseUp( iPointerX, iPointerY );
- DrawDeferred();
- }
- else if (aPointerEvent.iType == TPointerEvent::EDrag)
- {
- if((iPointerX != aPointerEvent.iPosition.iX || iPointerY != aPointerEvent.iPosition.iY) &&
- (aPointerEvent.iPosition.iX <=iPlugin->iRenderWidth && aPointerEvent.iPosition.iY <=iPlugin->iRenderHeight))
- {
- iPointerX = aPointerEvent.iPosition.iX;
- iPointerY = aPointerEvent.iPosition.iY;
-
- iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY );
-
- UpdatePointer((iXPosAtMouseDown-iPointerX),(iYPosAtMouseDown-iPointerY));
- }
- }
- }
- }
-
-void CSvgtPluginControl::UpdatePointer(
-#ifdef __PEN_SUPPORT
- TInt aShiftX , TInt aShiftY
-#else
- TInt , TInt
-#endif
- )
- {
- #ifdef __PEN_SUPPORT
- if(FeatureManager::FeatureSupported(KFeatureIdPenSupport))
- {
- if(aShiftX != 0 || aShiftY != 0 )
- {
- iPlugin->iSvgModule->Pan(-aShiftX,-aShiftY);
- iPlugin->iSvgModule->Redraw();
- iXPosAtMouseDown = iPointerX;
- iYPosAtMouseDown = iPointerY;
- iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY );
- User::After(10);
- DrawNow();
- }
- }
- #else//_PEN_SUPPORT
- {
- if (iPlugin->iRenderBuffer !=NULL)
- {
- // Due to the iframe scrolling the pointer will run out
- // of the iframe window when tried to pan inside the plugin.
- // So the control rect for the pointer is now the cliprect.
-
- // TRect lControlRect(TSize(iPlugin->iViewPortWidth, iPlugin->iViewPortHeight));
- TRect lControlRect;
-
- lControlRect.iTl.iY = iPlugin->iCurrentWindow.clipRect.top;
- lControlRect.iTl.iX = iPlugin->iCurrentWindow.clipRect.left;
- lControlRect.iBr.iY = iPlugin->iCurrentWindow.clipRect.bottom;
- lControlRect.iBr.iX = iPlugin->iCurrentWindow.clipRect.right;
-
- //X value
- iPointerX += iPointerDx;
- if ( iPointerX < 5 )
- {
- iPointerX = 5;
- iPlugin->iSvgModule->Pan( 30, 0 );
- //iPlugin->iSvgModule->Pan( -30, 0 );
- iPlugin->iSvgModule->Redraw();
- }
- else if ( lControlRect.Width() - 5 < iPointerX )
- {
- iPointerX = lControlRect.Width() - 5;
- iPlugin->iSvgModule->Pan( -30, 0 );
- //iPlugin->iSvgModule->Pan( 30, 0 );
- iPlugin->iSvgModule->Redraw();
- }
- //Y value
- iPointerY += iPointerDy;
- if ( iPointerY < 5 )
- {
- iPointerY = 5;
- iPlugin->iSvgModule->Pan( 0, 30 );
- //iPlugin->iSvgModule->Pan( 0, -30 );
- iPlugin->iSvgModule->Redraw();
- }
- else if ( lControlRect.Height() - 5 < iPointerY )
- {
- iPointerY = lControlRect.Height() - 5;
- iPlugin->iSvgModule->Pan( 0,-30 );
- //iPlugin->iSvgModule->Pan( 0,30 );
- iPlugin->iSvgModule->Redraw();
- }
- iPlugin->iSvgModule->MouseMove( iPointerX, iPointerY );
- DrawNow();
- }
- }
- #endif //_PEN_SUPPORT
-
- }
-