diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/plugins/DrawPlugin/src/imageeditordrawcontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/plugins/DrawPlugin/src/imageeditordrawcontrol.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,1065 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* Image Editor plugin control class. +* +*/ + + +// INCLUDES +#include "imageeditordrawcontrol.h" +#include "draw.hrh" + +#include "ImageEditorUI.hrh" +#include "ImageEditorPluginBase.hrh" + +#include "PluginInfo.h" +#include "JpTimer.h" +#include "ImageEditorUids.hrh" +#include "ImageEditorUiDefs.h" +#include "SystemParameters.h" +#include "drawpath.h" +#include "selectionpopup.h" + +#include "iepb.h" +// debug log +#include "imageeditordebugutils.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// Log file +_LIT(KDrawPluginLogFile,"drawplugin.log"); + +// CONSTANTS +const TInt KWait = 1; +const TInt KMainTextIndex = 0; + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CImageEditorDrawControl* CImageEditorDrawControl::NewL( + const TRect& aRect, + CCoeControl* aParent ) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::NewL()"); + + CImageEditorDrawControl * self = new (ELeave) CImageEditorDrawControl; + CleanupStack::PushL (self); + self->ConstructL (aRect, aParent); + CleanupStack::Pop (); // self + return self; + } + +// --------------------------------------------------------------------------- +// CImageEditorDrawControl +// --------------------------------------------------------------------------- +// +CImageEditorDrawControl::CImageEditorDrawControl() : +iTickCount(0), +iNaviStepMultiplier(KDefaultSmallNavigationStepMultiplier), +iDisplayingOkOptionsMenu(EFalse), +iReadyToRender(EFalse), +iResLoader( *ControlEnv() ) +{} + +// --------------------------------------------------------------------------- +// ~CImageEditorDrawControl() +// --------------------------------------------------------------------------- +// +CImageEditorDrawControl::~CImageEditorDrawControl() + { + LOG(KDrawPluginLogFile, + "CImageEditorDrawControl::~CImageEditorDrawControl()"); + delete iTimer; + delete iIndicator; + delete iIndicatorMask; + delete iPopupController; + delete iTooltipResize; + iPaths.ResetAndDestroy(); + delete iNaviPaneText; + iResLoader.Close(); + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::ConstructL( + const TRect& /*aRect*/, CCoeControl* aParent ) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::ConstructL()"); + // Set parent window + SetContainerWindowL(*aParent); + + // Create resource utility + TFileName resFile; + // resource file name + _LIT (KResourceFile, "draw.rsc"); + resFile.Append(KPgnResourcePath); + resFile.Append(KResourceFile); + + User::LeaveIfError( CompleteWithAppPath( resFile ) ); + // Implementation of RConeResourceLoader uses BaflUtils::NearestLanguageFile + // to search for a localised resource in proper search order + iResLoader.OpenL( resFile ); + + // Create timer for fast key repeat + iTimer = CJPTimer::NewL( this ); + + iPopupController = CAknInfoPopupNoteController::NewL(); + iTooltipResize = ControlEnv()->AllocReadResourceL(R_TOOLTIP_TEXT_RESIZE); + + EnableDragEvents(); + + // Activate control + ActivateL(); + } + +// --------------------------------------------------------------------------- +// SetView +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SetView(CAknView* aView) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::SetView()"); + ASSERT( aView ); + iEditorView = aView; + } + +// --------------------------------------------------------------------------- +// SetSelectedUiItemL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SetSelectedUiItemL(CPluginInfo* aItem) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::SetSelectedUiItemL()"); + ASSERT( aItem ); + iItem = aItem; + delete iNaviPaneText; + iNaviPaneText = NULL; + iNaviPaneText = (iItem->Parameters()[KMainTextIndex]).AllocL(); + iEditorView->HandleCommandL(EImageEditorCmdRender); + } + +// --------------------------------------------------------------------------- +// OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CImageEditorDrawControl::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::OfferKeyEventL()"); + + TKeyResponse response = EKeyWasNotConsumed; + + // If busy, do not handle anything + if ( Busy() ) + { + response = EKeyWasConsumed; + } + + // In main state handle the OK Options menu + else if ( aKeyEvent.iCode == EKeyOK ) + { + iDisplayingOkOptionsMenu = ETrue; + iEditorView->HandleCommandL (EImageEditorTryDisplayMenuBar); + response = EKeyWasConsumed; + } + + // We handle only event keys + else if (EEventKey == aType) + { + + switch (aKeyEvent.iCode) + { + + case EKeyDownArrow: + case EKeyUpArrow: + case EKeyRightArrow: + case EKeyLeftArrow: + { + SetPositionOnImage( ComputeIndicatorPosition() ); + StoreParameters( EFalse, EFalse ); + response = EKeyWasConsumed; + break; + } + + case EKeyOK: + { + break; + } + + case 0x30: // 0 + case 0x32: // 2 + case 0x34: // 4 + case 0x35: // 5 + case 0x36: // 6 + case 0x38: // 8 + case EStdKeyIncVolume: // zoom in key + case EStdKeyDecVolume: // zoom out key + { + StorePosAndScaleRelScreen(); + break; + } + + default: + { + break; + } + } + } + + // Key pressed down, mark pressed key + else if (aType == EEventKeyDown) + { + switch (aKeyEvent.iScanCode) + { + case EStdKeyUpArrow: + { + iKeyCode = 1; + response = EKeyWasConsumed; + break; + } + case EStdKeyDownArrow: + { + iKeyCode = 2; + response = EKeyWasConsumed; + break; + } + case EStdKeyLeftArrow: + { + iKeyCode = 3; + response = EKeyWasConsumed; + break; + } + case EStdKeyRightArrow: + { + iKeyCode = 4; + response = EKeyWasConsumed; + break; + } + } + + if ( iKeyCode != 0 ) + { + iNaviStepMultiplier = KDefaultSmallNavigationStepMultiplier; + iTickCount = 0; + iTimer->Call( KWait ); + } + } + + // Key released, mark all keys to zero + else if (aType == EEventKeyUp) + { + switch (aKeyEvent.iScanCode) + { + case EStdKeyUpArrow: + case EStdKeyDownArrow: + case EStdKeyLeftArrow: + case EStdKeyRightArrow: + { + iKeyCode = 0; + response = EKeyWasConsumed; + ShowTooltip(); + break; + } + } + } + + return response; + } + +// --------------------------------------------------------------------------- +// SizeChanged +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SizeChanged() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::SizeChanged()"); + } + +// --------------------------------------------------------------------------- +// GetParam +// --------------------------------------------------------------------------- +// +TDesC& CImageEditorDrawControl::GetParam() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::GetParam()"); + LOGDES(KDrawPluginLogFile, iParam); + return iParam; + } + +// --------------------------------------------------------------------------- +// SetSystemParameters +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SetSystemParameters(const CSystemParameters* aPars) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::SetSystemParameters()"); + ASSERT( aPars ); + iSysPars = aPars; + } + +// --------------------------------------------------------------------------- +// HandlePluginCommandL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::HandlePluginCommandL(const TInt aCommand) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::HandlePluginCommandL()"); + + switch (aCommand) + { + case EImageEditorFocusLost: + { + if (iTimer) + { + iTimer->Cancel(); + } + break; + } + case EPgnSoftkeyIdOk: + { + iPopupController->HideInfoPopupNote(); + break; + } + case EPgnSoftkeyIdCancel: + { + iPopupController->HideInfoPopupNote(); + iEditorView->HandleCommandL (EImageEditorCancelPlugin); + break; + } + case EPgnSoftkeyIdDone: + // FALLTROUHG + case EDrawPgnMenuCmdDone: + { + iPopupController->HideInfoPopupNote(); + StoreParameters(EFalse, ETrue); + iEditorView->HandleCommandL( EImageEditorCmdRender );//results Draw call + iEditorView->HandleCommandL(EImageEditorApplyPlugin); + break; + } + case EDrawPgnMenuCmdResize: + { + StoreParameters(ETrue, ETrue); + iEditorView->HandleCommandL( EImageEditorCmdRender );//results Draw call + SelectSizeL(); + break; + } + case EDrawPgnMenuCmdColor: + { + StoreParameters(ETrue, ETrue); + iEditorView->HandleCommandL( EImageEditorCmdRender );//results Draw call + SDrawUtils::LaunchColorSelectionPopupL(iPreview, Rect(), iRgb); + break; + } + case EDrawPgnMenuCmdCancel: + { + iReadyToRender = EFalse; + iEditorView->HandleCommandL(EImageEditorCancelPlugin); + break; + } + + case EImageEditorGlobalZoomChanged: + // FALLTROUGHT + case EImageEditorGlobalPanChanged: + { + RestorePosAndScaleRelScreen(); + //StoreParameters(); + StoreTempParams(); + iEditorView->HandleCommandL (EImageEditorCmdRender); + + //DrawNow(); + break; + } + + case EImageEditorPreScreenModeChange: + { + StorePosAndScaleRelImage(); + break; + } + + case EImageEditorPostScreenModeChange: + { + RestorePosAndScaleRelImage(); + ClipPosition(); + //StoreParameters(); + StoreTempParams(); + iEditorView->HandleCommandL (EImageEditorCmdRender); + //DrawNow(); + break; + } + + default: + { + break; + } + } + } + +// --------------------------------------------------------------------------- +// GetSoftkeyIndexL +// --------------------------------------------------------------------------- +// +TInt CImageEditorDrawControl::GetSoftkeyIndexL() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::GetSoftkeyIndexL()"); + // : Check needed states + TInt state(2); + return state; + } + +// --------------------------------------------------------------------------- +// GetContextMenuResourceId +// --------------------------------------------------------------------------- +// +TInt CImageEditorDrawControl::GetContextMenuResourceId() + { + return R_TEXT_CONTEXT_MENUBAR; + } + +// --------------------------------------------------------------------------- +// GetDimmedMenuItems +// --------------------------------------------------------------------------- +// +TBitField CImageEditorDrawControl::GetDimmedMenuItems() +{ + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::GetDimmedMenuItems()"); + + TBitField dimmedMenuItems; + TInt count = iItem->MenuItems().Count(); + + if ( iDisplayingOkOptionsMenu ) + { + // Dim the command EImageEditorCancelPlugin + for ( TInt i = 0; i < count; i++) + { + // get the menu item id + TInt menuItem = iItem->MenuItems().At(i).iCommandId; + if ( menuItem == EDrawPgnMenuCmdCancel ) + { + dimmedMenuItems.SetBit( i ); + } + } + iDisplayingOkOptionsMenu = EFalse; + } + + for ( TInt i = 0; i < count; i++) + { + // get the menu item id + TInt menuItem = iItem->MenuItems().At(i).iCommandId; + if ( menuItem == EDrawPgnMenuCmdMax ) + { + dimmedMenuItems.SetBit( i ); + } + } + return dimmedMenuItems; +} + +// --------------------------------------------------------------------------- +// GetNaviPaneTextL +// --------------------------------------------------------------------------- +// +TPtrC CImageEditorDrawControl::GetNaviPaneTextL( + TBool& aLeftNaviPaneScrollButtonVisibile, + TBool& aRightNaviPaneScrollButtonVisible ) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::GetNaviPaneTextL()"); + + aLeftNaviPaneScrollButtonVisibile = EFalse; + aRightNaviPaneScrollButtonVisible = EFalse; + return *iNaviPaneText; + } + +// --------------------------------------------------------------------------- +// Draw +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::Draw(const TRect& aRect) const + { + CWindowGc & gc = SystemGc(); + if( IsReadyToRender() ) + { + CPreviewControlBase::DrawPreviewImage(aRect); + } + + if( iPaths.Count() ) + { + ASSERT( iSysPars ); + for( TInt i(0); i* pathPoints = path->ItemArray(); + gc.SetPenStyle( CGraphicsContext::ESolidPen ); + gc.SetPenColor( path->Color() ); + gc.SetPenSize( ScaledLineSize( path->Size() ) ); + gc.DrawPolyLine( pathPoints ); + } + } + + /* + * : Too slow cause we need to redraw preview image everytime + * if( iIndicator && iIndicator->Handle() && + iIndicatorMask && iIndicatorMask->Handle() ) + { + gc.BitBltMasked ( + ComputeIndicatorPosition(), + iIndicator, + TRect (iIndicator->SizeInPixels()), + iIndicatorMask, + EFalse + ); + }*/ + } + +// --------------------------------------------------------------------------- +// NaviDown +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::NaviDown() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::NaviDown()"); + } + +// --------------------------------------------------------------------------- +// NaviUp +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::NaviUp() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::NaviUp()"); + } + +// --------------------------------------------------------------------------- +// NaviRight +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::NaviRight() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::NaviRight()"); + } + +// --------------------------------------------------------------------------- +// NaviLeft +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::NaviLeft() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::NaviLeft()"); + } + +// --------------------------------------------------------------------------- +// SelectSizeL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SelectSizeL() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::SelectSizeL()"); + // Symmetric line width / height + TInt size(iSize.iWidth); + CSelectionDialog::RunDlgLD( iPreview, Rect(), size ); + iSize = TSize(size,size); + } + +// --------------------------------------------------------------------------- +// StoreTempParams +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::StoreTempParams() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::StoreTempParams()"); + } + +// --------------------------------------------------------------------------- +// RestoreTempParams +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::RestoreTempParams() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::RestoreTempParams()"); + } + +// --------------------------------------------------------------------------- +// GetHelpContext +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::GetHelpContext(TCoeHelpContext& aContext) const +{ + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::GetHelpContext()"); + + aContext.iMajor = TUid::Uid(UID_IMAGE_EDITOR); + aContext.iContext = KSIE_HLP_EDIT_TEXT; +} + +// --------------------------------------------------------------------------- +// PrepareL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::PrepareL() + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::PrepareL()"); + + // Get current view port + TRect rect = iSysPars->VisibleImageRectPrev(); + + // Set default position + iX = (rect.iTl.iX + rect.iBr.iX) / 2; + iY = (rect.iTl.iY + rect.iBr.iY) / 2; + + // Set default color to white + iRgb = KRgbWhite; + + // Set default size + TInt defaultSize(8); + iSize = TSize(defaultSize, defaultSize); + iReadyToRender = ETrue; + + iEditorView->HandleCommandL( EImageEditorCmdRender ); + } + +// --------------------------------------------------------------------------- +// LoadIndicatorL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::LoadIndicatorL( + TInt aBitmapInd, TInt aMaskInd ) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::LoadIndicatorL()"); + + // Delete old indicator + delete iIndicator; + iIndicator = 0; + delete iIndicatorMask; + iIndicatorMask = 0; + + // Load new indicator + SDrawUtils::GetIndicatorBitmapL ( + iIndicator, + iIndicatorMask, + aBitmapInd, + aMaskInd + ); + } + +// --------------------------------------------------------------------------- +// ComputeIndicatorPosition +// --------------------------------------------------------------------------- +// +TPoint CImageEditorDrawControl::ComputeIndicatorPosition() const + { + TRect vprect = iSysPars->VisibleImageRect(); + TRect vpprect = iSysPars->VisibleImageRectPrev(); + + TInt x( 0 ); + TInt y( 0 ); + // check if there is no indicator + if ( !iIndicator ) + { + return TPoint ( x, y ); + } + + y = ((iY - vprect.iTl.iY) * vpprect.Height()) / vprect.Height(); + y += vpprect.iTl.iY; + //y -= iIndicator->SizeInPixels().iHeight; /// 4; + + x = ((iX - vprect.iTl.iX) * vpprect.Width()) / vprect.Width(); + x += vpprect.iTl.iX; + //x -= iIndicator->SizeInPixels().iWidth / 2; + + return TPoint (x,y); + } + +// --------------------------------------------------------------------------- +// IsReadyToRender +// --------------------------------------------------------------------------- +// +TBool CImageEditorDrawControl::IsReadyToRender() const + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::IsReadyToRender()"); + return iReadyToRender; + } + +// --------------------------------------------------------------------------- +// StoreParameters +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::StoreParameters(TBool aLastItem, TBool aDone) + { + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::StoreParameters()"); + RDebug::Print(_L("CImageEditorDrawControl::StoreParameters color[%d]"), + iRgb.Internal()); + + iParam.Copy(_L("x ")); + iParam.AppendNum (iX); + iParam.Append(_L(" y ")); + iParam.AppendNum (iY); + + if( aLastItem ) + { + iParam.Append(_L(" size ")); + iParam.AppendNum (iSize.iHeight); + iParam.Append(_L(" color ")); + iParam.AppendNum ( iRgb.Value() ); + iParam.Append(_L(" lastItem ")); + } + if( aDone ) + { + iParam.Append(_L("done")); + } + } + +// --------------------------------------------------------------------------- +// TimerCallBack +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::TimerCallBack() +{ + LOG(KDrawPluginLogFile, "CImageEditorDrawControl::TimerCallBack()"); + + if (iTickCount > KDefaultFastKeyTimerMultiplyThresholdInTicks) + { + iNaviStepMultiplier = KDefaultBigNavigationStepMultiplier; + } + else + { + iTickCount++; + } + + if (iKeyCode) + { + + switch (iKeyCode) + { + case 1: + { + NaviUp(); + break; + } + case 2: + { + NaviDown(); + break; + } + case 3: + { + NaviLeft(); + break; + } + case 4: + { + NaviRight(); + break; + } + default: + break; + } + //StoreParameters(); + TRAP_IGNORE( iEditorView->HandleCommandL(EImageEditorCmdRender) ); + iTimer->Call (KWait); + } +} + +// --------------------------------------------------------------------------- +// StorePosAndScaleRelScreen +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::StorePosAndScaleRelScreen() + { + LOG(KDrawPluginLogFile, + "CImageEditorClipartControl::StorePosAndScaleRelScreen()"); + iParam.Copy(_L("nop")); + } + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::RestorePosAndScaleRelScreen() + { + LOG(KDrawPluginLogFile, + "CImageEditorClipartControl::RestorePosAndScaleRelScreen()"); + } + + +// --------------------------------------------------------------------------- +// StorePosAndScaleRelImage +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::StorePosAndScaleRelImage() + { + TReal relscale = iSysPars->RelScale(); + LOGFMT(KDrawPluginLogFile, + "CImageEditorClipartControl::StorePosAndScaleRelImage():%g", + relscale); + } + +// --------------------------------------------------------------------------- +// RestorePosAndScaleRelImage +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::RestorePosAndScaleRelImage() + { + TReal relscale = iSysPars->RelScale(); + LOGFMT(KDrawPluginLogFile, + "CImageEditorClipartControl::RestorePosAndScaleRelImage():%g", + relscale); + } + +// --------------------------------------------------------------------------- +// ClipPosition +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::ClipPosition() +{ + if ( iX < iSysPars->VisibleImageRect().iTl.iX ) + { + iX = iSysPars->VisibleImageRect().iTl.iX; + } + else if ( iX > iSysPars->VisibleImageRect().iBr.iX ) + { + iX = iSysPars->VisibleImageRect().iBr.iX; + } + + if ( iY < iSysPars->VisibleImageRect().iTl.iY ) + { + iY = iSysPars->VisibleImageRect().iTl.iY; + } + else if ( iY > iSysPars->VisibleImageRect().iBr.iY ) + { + iY = iSysPars->VisibleImageRect().iBr.iY; + } +} + +// --------------------------------------------------------------------------- +// HandlePointerEventL +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::HandlePointerEventL( + const TPointerEvent &aPointerEvent) + { + RDebug::Print(_L("CImageEditorDrawControl::HandlePointerEventL pen[%d]"), + AknLayoutUtils::PenEnabled()); + if( AknLayoutUtils::PenEnabled() && !Busy()) + { + RDebug::Print(_L("CImageEditorDrawControl::iType [%d]"), + aPointerEvent.iType); + TBool lastItem( EFalse ); + switch( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + { + iReadyToRender = EFalse; + + CDrawPath* lastPath = CDrawPath::NewL(); + CleanupStack::PushL( lastPath ); + lastPath->SetColor( iRgb ); + lastPath->SetSize( iSize ); + SetPositionOnImage( aPointerEvent.iPosition ); + lastPath->AddItemL( aPointerEvent.iPosition ); + iPaths.AppendL( lastPath ); + CleanupStack::Pop( lastPath ); + break; + } + case TPointerEvent::EDrag: + { + if( iPaths.Count() ) + { + CDrawPath* path = iPaths[iPaths.Count()-1]; + // store current position for next round + iPointerPosition = aPointerEvent.iPosition; + SetPositionOnImage( aPointerEvent.iPosition ); + path->AddItemL( aPointerEvent.iPosition ); + } + break; + } + case TPointerEvent::EButton1Up: + { + iReadyToRender = ETrue; + ShowTooltip(); + lastItem = ETrue; + break; + } + + default: + { + break; + } + } + + StoreParameters( lastItem, EFalse ); + iEditorView->HandleCommandL( EImageEditorCmdRender );//results Draw call + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + } + +// --------------------------------------------------------------------------- +// SetPositionOnImage +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::SetPositionOnImage( TPoint aPointedPosition ) + { + ASSERT( iSysPars ); + // Get system parameters + TRect visibleImageRect( iSysPars->VisibleImageRect() ); + TRect visibleImageRectPrev( iSysPars->VisibleImageRectPrev() ); + + TInt xPosFactorDivider( visibleImageRectPrev.Width() ); + TInt yPosFactorDivider( visibleImageRectPrev.Height() ); + + LOGFMT2(KDrawPluginLogFile, "CImageEditorDrawControl::vir w:%d h:%d", + visibleImageRect.Width(), visibleImageRect.Height()); + LOGFMT2(KDrawPluginLogFile, "CImageEditorDrawControl::virp w:%d h:%d", + visibleImageRectPrev.Width(), visibleImageRectPrev.Height()); + + // Dividing by zero will cause panic -> check + if ( xPosFactorDivider == 0 || yPosFactorDivider == 0 ) + { + // Set default position + iX = (visibleImageRect.iTl.iX + visibleImageRect.iBr.iX) / 2; + iY = (visibleImageRect.iTl.iY + visibleImageRect.iBr.iY) / 2; + } + else + { + // Calculate relative position on the screen + TReal xPositionFactor + ( TReal( aPointedPosition.iX - visibleImageRectPrev.iTl.iX ) / + xPosFactorDivider ); + + TReal yPositionFactor + ( TReal( aPointedPosition.iY - visibleImageRectPrev.iTl.iY ) / + yPosFactorDivider ); + LOGFMT2(KDrawPluginLogFile, "CImageEditorDrawControl::pfx:%g pfy:%g", + xPositionFactor, yPositionFactor); + // Calculate position on visible image + + iX = visibleImageRect.iTl.iX + + visibleImageRect.Width() * xPositionFactor + 0.5; + + iY = visibleImageRect.iTl.iY + + visibleImageRect.Height() * yPositionFactor + 0.5; + } + + LOGFMT4(KDrawPluginLogFile, "CImageEditorDrawControl::Draw x:%d iX:%d y:%d iY:%d", + aPointedPosition.iX, iX, aPointedPosition.iY, iY); + // Check that not out of bounds + //ClipPosition(); + } + +// --------------------------------------------------------------------------- +// GetPositionOnView +// --------------------------------------------------------------------------- +// +TPoint CImageEditorDrawControl::GetPositionOnView() + { + ASSERT( iSysPars ); + // Get system parameters + TRect visibleImageRect( iSysPars->VisibleImageRect() ); + TRect visibleImageRectPrev( iSysPars->VisibleImageRectPrev() ); + + TInt xPosFactorDivider( visibleImageRectPrev.Width() ); + TInt yPosFactorDivider( visibleImageRectPrev.Height() ); + + // Calculate relative position on the screen + TReal xPositionFactor( TReal( iX + visibleImageRectPrev.iTl.iX ) / + xPosFactorDivider ); + + TReal yPositionFactor( TReal( iY + visibleImageRectPrev.iTl.iY ) / + yPosFactorDivider ); + + LOGFMT2(KDrawPluginLogFile, + "CImageEditorDrawControl::GetPositionOnView xf:%g yf:%g", + xPositionFactor , yPositionFactor ); + + LOGFMT2(KDrawPluginLogFile, + "CImageEditorDrawControl::GetPositionOnView xf:%d yf:%d", + xPosFactorDivider , yPosFactorDivider ); + + LOGFMT2(KDrawPluginLogFile, + "CImageEditorDrawControl::GetPositionOnView w:%d h:%d", + iX , iY ); + + TInt xPosition(iX + visibleImageRectPrev.iTl.iX); + TInt yPosition(iY + visibleImageRectPrev.iTl.iY); + + LOGFMT3(KDrawPluginLogFile, + "CImageEditorDrawControl::GetPositionOnView w:%d h:%d S:%g", + xPosition, yPosition, iSysPars->RelScale()); + + return TPoint(xPosition, yPosition); + } + +// --------------------------------------------------------------------------- +// ShowTooltip +// --------------------------------------------------------------------------- +// +void CImageEditorDrawControl::ShowTooltip() + { + iPopupController->HideInfoPopupNote(); + + TPoint iconPosition = ComputeIndicatorPosition(); + TRect iconRect( iconPosition.iX, iconPosition.iY, + iconPosition.iX, iconPosition.iY ); + + + /*SDrawUtils::ShowToolTip( iPopupController, + this, + iconPosition, + EHRightVTop, + *iTooltipResize ); + */ + + } + +// --------------------------------------------------------------------------- +// ScaledLineSize +// --------------------------------------------------------------------------- +// +TSize CImageEditorDrawControl::ScaledLineSize( TSize aOriginalSize ) const + { + TInt sizew(aOriginalSize.iWidth * iSysPars->RelScale() + 0.5); + TInt sizeh(aOriginalSize.iHeight * iSysPars->RelScale() + 0.5); + if( sizew < 1 ) + { + sizew++; + } + if( sizeh < 1 ) + { + sizeh++; + } + + LOGFMT3(KDrawPluginLogFile, + "CImageEditorDrawControl::ScaledLineSize w:%d h:%d S:%g", + sizew, sizeh, iSysPars->RelScale()); + return TSize(sizew , sizeh); + } + +// End of File