diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/ImageEditorUI/src/DrawUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/ImageEditorUI/src/DrawUtils.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,509 @@ +/* +* 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: +* Utils class for helping in drawing. +* +*/ + + +// CAknTextQueryDialog +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "ResolutionUtil.h" +#include "ImageEditorUiDefs.h" +#include "DrawUtils.h" +#include "ColorSelectionGrid.h" +#include "colorselectionpopup.h" +#include "CMultiLineQueryDialog.h" + +//============================================================================= +EXPORT_C void SDrawUtils::DrawGuide ( + CGraphicsContext & aGc, + const TRect & aRect, + const TGuideType aType, + const TRgb & aColor + ) +{ + + // Set graphics context parameters + aGc.SetPenStyle (CGraphicsContext::ESolidPen); + aGc.SetPenColor (aColor); + aGc.SetBrushStyle (CGraphicsContext::ESolidBrush); + aGc.SetBrushColor (aColor); + + switch (aType) + { + case EGuideTypeUp: + { + TInt colstart = ((aRect.iBr.iX + aRect.iTl.iX) >> 1) + 1; + TInt colstop = colstart + 1; + for (TInt i = aRect.iTl.iY; i <= aRect.iBr.iY; ++i, --colstart, ++colstop) + { + aGc.DrawLine (TPoint (colstart, i), TPoint (colstop, i)); + } + break; + } + case EGuideTypeDown: + { + TInt colstart = ((aRect.iBr.iX + aRect.iTl.iX) >> 1) + 1; + TInt colstop = colstart + 1; + for (TInt i = aRect.iBr.iY; i >= aRect.iTl.iY; --i, --colstart, ++colstop) + { + aGc.DrawLine (TPoint (colstart, i), TPoint (colstop, i)); + } + break; + } + case EGuideTypeLeft: + { + TInt rowstart = ((aRect.iBr.iY + aRect.iTl.iY) >> 1) + 1; + TInt rowstop = rowstart + 1; + for (TInt i = aRect.iTl.iX; i <= aRect.iBr.iX; ++i, --rowstart, ++rowstop) + { + aGc.DrawLine (TPoint (i, rowstart), TPoint (i, rowstop)); + } + break; + } + case EGuideTypeRight: + { + TInt rowstart = ((aRect.iBr.iY + aRect.iTl.iY) >> 1) + 1; + TInt rowstop = rowstart + 1; + for (TInt i = aRect.iBr.iX; i >= aRect.iTl.iX; --i, --rowstart, ++rowstop) + { + aGc.DrawLine (TPoint (i, rowstart), TPoint (i, rowstop)); + } + break; + } + default: + { + break; + } + + } +} + +//============================================================================= +EXPORT_C void SDrawUtils::DrawBeveledRect ( + CGraphicsContext & aGc, + const TRect & aRect, + const TRgb & aColor, + const TRgb & aLight, + const TRgb & aShadow + ) +{ + // Set graphics context parameters + aGc.SetPenStyle (CGraphicsContext::ESolidPen); + aGc.SetPenColor (aShadow); + aGc.SetBrushStyle (CGraphicsContext::ESolidBrush); + aGc.SetBrushColor (aColor); + + // Draw shadow + rectangle area + aGc.DrawRect (aRect); + + // Get corners + TInt ulc = aRect.iTl.iX; + TInt ulr = aRect.iTl.iY; + TInt lrc = aRect.iBr.iX; + TInt lrr = aRect.iBr.iY; + + // Draw light + aGc.SetPenColor (aLight); + aGc.DrawLine ( TPoint(lrc - 1, ulr + 1), TPoint(lrc - 1, lrr)); + aGc.DrawLine ( TPoint(ulc + 1, lrr - 1), TPoint(lrc - 1, lrr - 1)); + +} + +//============================================================================= +EXPORT_C void SDrawUtils::DrawFlatRect ( + CGraphicsContext & aGc, + const TRect & aRect, + const TRgb & aColor, + const TRgb & aLight, + const TRgb & aShadow + ) +{ + // Set graphics context parameters + aGc.SetPenStyle (CGraphicsContext::ESolidPen); + aGc.SetPenColor (aShadow); + aGc.SetBrushStyle (CGraphicsContext::ESolidBrush); + aGc.SetBrushColor (aColor); + + // Get corners + TInt ulc = aRect.iTl.iX; + TInt ulr = aRect.iTl.iY; + TInt lrc = aRect.iBr.iX; + TInt lrr = aRect.iBr.iY; + + // Draw shadow + rectangle area + aGc.DrawRect (TRect (ulc, ulr, lrc - 1, lrr - 1)); + + // Draw light + aGc.SetPenColor (aLight); + aGc.DrawLine ( TPoint(lrc - 1, ulr), TPoint(lrc - 1, lrr)); + aGc.DrawLine ( TPoint(ulc, lrr - 1), TPoint(lrc, lrr - 1)); + aGc.DrawLine ( TPoint(ulc + 1, ulr + 1), TPoint(lrc - 2, ulr + 1)); + aGc.DrawLine ( TPoint(ulc + 1, ulr + 2), TPoint(ulc + 1, lrr - 2)); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchQueryDialogL (const TDesC & aPrompt) +{ + CAknQueryDialog * dlg = + new (ELeave) CAknQueryDialog ( const_cast(aPrompt) ); + + return dlg->ExecuteLD (R_IMAGE_EDITOR_CONFIRMATION_QUERY); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchQueryDialogOkOnlyL (const TDesC & aPrompt) +{ + CAknQueryDialog * dlg = + new (ELeave) CAknQueryDialog ( const_cast(aPrompt) ); + + return dlg->ExecuteLD (R_IMAGE_EDITOR_CONFIRMATION_QUERY_OK_ONLY); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchTextQueryDialogL ( + TDes & aData, + const TDesC & aPrompt + ) +{ + // Create a query dialog + CAknTextQueryDialog * dlg = + new (ELeave) CAknTextQueryDialog (aData); + + // Enable predictive input + dlg->SetPredictiveTextInputPermitted(ETrue); + + // Execute query dialog + return dlg->ExecuteLD (R_IMAGE_EDITOR_TEXT_QUERY, aPrompt); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchMultiLineTextQueryDialogL ( + TDes & aData, + const TDesC & aPrompt + ) +{ + // Create a query dialog + CMultiLineQueryDialog* dlg = CMultiLineQueryDialog::NewL( aData ); + + // Enable predictive input + dlg->SetPredictiveTextInputPermitted( ETrue ); + + // Execute query dialog + return dlg->ExecuteLD ( R_IMAGE_EDITOR_TEXT_QUERY, aPrompt ); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchListQueryDialogL ( + MDesCArray * aTextItems, + const TDesC & aPrompt + ) +{ + // Selected text item index + TInt index (-1); + + // Create a new list dialog + CAknListQueryDialog * dlg = new (ELeave) CAknListQueryDialog (&index); + + // Prepare list query dialog + dlg->PrepareLC (R_IMAGE_EDITOR_LIST_QUERY); + + // Set heading + dlg->QueryHeading()->SetTextL (aPrompt); + + // Set text item array + dlg->SetItemTextArray (aTextItems); + + // Set item ownership + dlg->SetOwnershipType (ELbmDoesNotOwnItemArray); + + // Execute + if (dlg->RunLD()) + { + return index; + } + else + { + return -1; + } +} + +//============================================================================= +EXPORT_C void SDrawUtils::LaunchWaitNoteL ( + CAknWaitDialog** aSelfPtr, + TInt aResourceID, + const TDesC & aPrompt, + MProgressDialogCallback* aCallback + ) +{ + (*aSelfPtr) = new (ELeave) CAknWaitDialog ( (CEikDialog**)aSelfPtr, ETrue); + (*aSelfPtr)->SetTextL ( aPrompt ); + (*aSelfPtr)->ExecuteLD (aResourceID); + if (aCallback) + { + (*aSelfPtr)->SetCallback (aCallback); + } +} + +//============================================================================= +EXPORT_C void SDrawUtils::LaunchProgressNoteL ( + CAknProgressDialog** aSelfPtr, + TInt aResourceID, + const TDesC & aPrompt, + TInt aFinalValue, + MProgressDialogCallback* aCallback + ) +{ + (*aSelfPtr) = new (ELeave) CAknWaitDialog ( (CEikDialog**)aSelfPtr, ETrue); + (*aSelfPtr)->PrepareLC(aResourceID); + (*aSelfPtr)->GetProgressInfoL()->SetFinalValue (aFinalValue); + (*aSelfPtr)->SetTextL ( aPrompt ); + if (aCallback) + { + (*aSelfPtr)->SetCallback (aCallback); + } + (*aSelfPtr)->RunLD(); +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchColorSelectionGridL (TRgb & aColor) +{ + + CColorSelectionGrid * grid = new (ELeave) CColorSelectionGrid; + CleanupStack::PushL(grid); + + CAknPopupList * popup_list = + CAknPopupList::NewL (grid, R_AVKON_SOFTKEYS_SELECT_BACK__SELECT); + CleanupStack::PushL (popup_list); + + grid->ConstructL (popup_list, CEikListBox::ELeftDownInViewRect); + + // Create dialog prompt + HBufC * prompt = + grid->ControlEnv()->AllocReadResourceLC (R_SELECT_COLOUR); + + popup_list->SetTitleL ( prompt->Des() ); + + CleanupStack::PopAndDestroy(); // prompt + + TInt popup_ok = popup_list->ExecuteLD(); + CleanupStack::Pop(); // popupList + if (popup_ok) + { + // Get the selected item descriptor from the grid + TInt index = grid->CurrentDataIndex(); + TPtrC ptr = grid->Model()->MatchableTextArray()->MdcaPoint (index); + + // Extract the color information from the descriptor + TInt i = ptr.Locate (TChar('\t')); + if( i != KErrNotFound ) + { + TBuf<32> colordes; + colordes.Copy ( ptr.Mid ( i + 1 ) ); + TLex val (colordes); + val.SkipSpace(); + TInt color = 0; + val.Val (color); + aColor.SetRed (color & 0xFF); + aColor.SetGreen ((color >> 8) & 0xFF); + aColor.SetBlue ((color >> 16) & 0xFF); + } + } + CleanupStack::PopAndDestroy(); // grid + + return popup_ok; +} + +//============================================================================= +EXPORT_C TInt SDrawUtils::LaunchColorSelectionPopupL (const CFbsBitmap* aPreview, + TRect aRect, + TRgb & aColor) + { + TInt dialog_ok = CColorSelectionDialog::RunDlgLD( aPreview, aRect, aColor); + + return dialog_ok; + } + +//============================================================================= +EXPORT_C TInt SDrawUtils::GetIndicatorBitmapL ( + CFbsBitmap *& aChBitmap, + CFbsBitmap *& aChMask, + TInt aBmpIndex, + TInt aMaskIndex + ) +{ + + // Get the icon file name + TFileName iconFile (KImageEditorUiMifFile); + User::LeaveIfError( CompleteWithAppPath(iconFile) ); + + // Create bitmap and mask + AknIconUtils::CreateIconL ( + aChBitmap, + aChMask, + iconFile, + aBmpIndex, + aMaskIndex + ); + + // Get the screen mode from the Resolution Util + TInt screenMode = CResolutionUtil::Self()->GetScreenMode(); + TSize bitmapSize; + + switch( screenMode ) + { + // small screen sizes + case CResolutionUtil::EStandard: + case CResolutionUtil::EStandardFullScreen: + case CResolutionUtil::EStandardLandscape: + case CResolutionUtil::EStandardLandscapeFullScreen: + case CResolutionUtil::ESquare: + case CResolutionUtil::ESquareFullScreen: + case CResolutionUtil::ESquareRotated: + case CResolutionUtil::ESquareRotatedFullScreen: + { + bitmapSize = TSize (KStandardCrosshairWidth, KStandardCrosshairHeight); + break; + } + + // big screen sizes + case CResolutionUtil::EQVGA: + case CResolutionUtil::EQVGAFullScreen: + case CResolutionUtil::EQVGALandscape: + case CResolutionUtil::EQVGALandscapeFullScreen: + { + bitmapSize = TSize (KQVGACrosshairWidth, KQVGACrosshairHeight); + break; + } + + case CResolutionUtil::EDouble: + case CResolutionUtil::EDoubleFullScreen: + case CResolutionUtil::EDoubleLandscape: + case CResolutionUtil::EDoubleLandscapeFullScreen: + { + bitmapSize = TSize (KDoubleCrosshairWidth, KDoubleCrosshairHeight); + break; + } + + // HVGA + case CResolutionUtil::EHVGA: + case CResolutionUtil::EHVGAFullScreen: + case CResolutionUtil::EHVGALandscape: + case CResolutionUtil::EHVGALandscapeFullScreen: + { + bitmapSize = TSize (KHVGACrosshairWidth, KHVGACrosshairHeight); + break; + } + + // VGA + case CResolutionUtil::EVGA: + case CResolutionUtil::EVGAFullScreen: + case CResolutionUtil::EVGALandscape: + case CResolutionUtil::EVGALandscapeFullScreen: + { + bitmapSize = TSize (KVGACrosshairWidth, KVGACrosshairHeight); + break; + } + + // QHD + case CResolutionUtil::EQHD: + case CResolutionUtil::EQHDFullScreen: + case CResolutionUtil::EQHDLandscape: + case CResolutionUtil::EQHDLandscapeFullScreen: + { + bitmapSize = TSize (KVGACrosshairWidth, KVGACrosshairHeight); + break; + } + + default: + { + bitmapSize = TSize (KStandardCrosshairWidth, KStandardCrosshairHeight); + break; + } + } + + // Set size for scalable icons - MUST BE CALLED BEFORE ICON IS USABLE + AknIconUtils::SetSize( aChBitmap, bitmapSize ); + + return KErrNone; +} + +//============================================================================= +EXPORT_C void SDrawUtils::ShowToolTip ( + CAknInfoPopupNoteController* aPopupController, + CCoeControl* aCallingControl, + TRect aPositionRect, + const TDesC& aText ) + { + TPoint controlPosition( 0, 0 ); + if ( AknsUtils::GetControlPosition( aCallingControl, + controlPosition ) != KErrNone ) + { + controlPosition = aCallingControl->PositionRelativeToScreen(); + } + + // add calling control's relative position to rect coordinates + TRect positionRect( TPoint( aPositionRect.iTl.iX + controlPosition.iX, + aPositionRect.iTl.iY + controlPosition.iY ), + aPositionRect.Size() ); + if( aPopupController ) + { + aPopupController->SetTextL( aText ); + aPopupController->SetTimePopupInView( KTimeTooltipInView ); + aPopupController->SetTooltipModeL( ETrue ); + aPopupController->SetPositionByHighlight( positionRect ); + aPopupController->ShowInfoPopupNote(); + } + + } + +//============================================================================= +EXPORT_C void SDrawUtils::ShowToolTip ( + CAknInfoPopupNoteController* aPopupController, + CCoeControl* aCallingControl, + TPoint aPosition, + TGulAlignmentValue aAlignment, + const TDesC& aText ) + { + TPoint controlPosition( 0, 0 ); + if ( AknsUtils::GetControlPosition( aCallingControl, + controlPosition ) != KErrNone ) + { + controlPosition = aCallingControl->PositionRelativeToScreen(); + } + + // add calling control's relative position to coordinates + TPoint finalPosition = TPoint( aPosition.iX + controlPosition.iX, + aPosition.iY + controlPosition.iY ); + if( aPopupController ) + { + aPopupController->SetTextL( aText ); + aPopupController->SetTimePopupInView( KTimeTooltipInView ); + aPopupController->SetTooltipModeL( ETrue ); + aPopupController->SetPositionAndAlignment( finalPosition, aAlignment ); + aPopupController->ShowInfoPopupNote(); + } + } +// End of File