diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/ImageEditorUI/src/VerticalSlider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/ImageEditorUI/src/VerticalSlider.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,369 @@ +/* +* 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: +* +*/ + + + +#include "VerticalSlider.h" +#include "CustomControlPanics.h" +#include +#include "ResolutionUtil.h" +#include "ImageEditorUiDefs.h" +#include +#include +#include + + +// CONSTANTS +const TInt KStandardSliderWidth = 7; +const TInt KStandardSliderHeight = 132; +const TInt KStandardSliderTabWidth = 7; +const TInt KStandardSliderTabHeight = 12; + +const TInt KDoubleSliderWidth = 13; +const TInt KDoubleSliderHeight = 244; +const TInt KDoubleSliderTabWidth = 13; +const TInt KDoubleSliderTabHeight = 24; + +const TInt KQVGASliderWidth = 10; +const TInt KQVGASliderHeight = 188; +const TInt KQVGASliderTabWidth = 10; +const TInt KQVGASliderTabHeight = 18; + +const TInt KHVGASliderWidth = 13; +const TInt KHVGASliderHeight = 244; +const TInt KHVGASliderTabWidth = 13; +const TInt KHVGASliderTabHeight = 24; + +const TInt KVGASliderWidth = 20; +const TInt KVGASliderHeight = 376; +const TInt KVGASliderTabWidth = 20; +const TInt KVGASliderTabHeight = 36; + +const TInt KQHDSliderWidth = 13; +const TInt KQHDSliderHeight = 244; +const TInt KQHDSliderTabWidth = 13; +const TInt KQHDSliderTabHeight = 24; + +//============================================================================= +EXPORT_C CVerticalSlider* CVerticalSlider::NewL(const TRect& aRect, const CCoeControl& aControl) + { + CVerticalSlider* self = CVerticalSlider::NewLC(aRect, aControl); + CleanupStack::Pop(self); + return self; + } + +//============================================================================= +EXPORT_C CVerticalSlider* CVerticalSlider::NewLC(const TRect& aRect, const CCoeControl& aControl) + { + CVerticalSlider* self = new (ELeave) CVerticalSlider; + CleanupStack::PushL(self); + self->ConstructL(aRect, aControl); + return self; + } + +//============================================================================= +EXPORT_C CVerticalSlider::~CVerticalSlider() + { + delete iSliderBg; + delete iSliderBgMask; + delete iSliderTab; + delete iSliderTabMask; + } + +//============================================================================= +void CVerticalSlider::ConstructL(const TRect& /*aRect*/, const CCoeControl& aControl) + { + SetContainerWindowL(aControl); + + // Load the bitmaps + LoadBitmapL( iSliderBg, iSliderBgMask, EMbmImageeditoruiQgn_graf_ied_vslider, EMbmImageeditoruiQgn_graf_ied_vslider_mask ); + LoadBitmapL( iSliderTab, iSliderTabMask, EMbmImageeditoruiQgn_graf_ied_vtab, EMbmImageeditoruiQgn_graf_ied_vtab_mask ); + SetBitmapSize(); + + ActivateL(); + } + +//============================================================================= +CVerticalSlider::CVerticalSlider() + { + // no implementation required + } + +//============================================================================= +EXPORT_C TInt CVerticalSlider::CountComponentControls() const + { + return 0; + } + +//============================================================================= +void CVerticalSlider::Draw(const TRect& /*aRect*/) const +{ + if ( iMinimumValue <= iMaximumValue ) + { + TUint height = iMaximumValue - iMinimumValue; // height of the slider + TUint pixelsFromMin = iPosition - iMinimumValue; // tab position from the beginning + + TReal factor = 0.0; + if (iMinimumValue < iMaximumValue ) + { + factor = (TReal) pixelsFromMin / height; // tab position from the beginning in percentage + } + TUint sliderTabHeight = iSliderTab->SizeInPixels().iHeight; // slider tab height + + // slider bitmap is actually a bit longer but this resolves the problem + // where the tab is drawn outside of the slider when in maximum position + TUint sliderBitmapHeight = iSliderBg->SizeInPixels().iHeight - sliderTabHeight; + + TUint tabPositionFromMinInPixels = (TUint) (factor * sliderBitmapHeight + 0.5); // calculate tab position + + // top left coordinate + const TPoint tl = Rect().iTl; + + CWindowGc& gc = SystemGc(); + + // draw actual slider using mask bitmap + TRect bgRect(TPoint(0,0), iSliderBg->SizeInPixels()); + gc.BitBltMasked(tl, iSliderBg, bgRect, iSliderBgMask, ETrue); + + // draw the tab using mask bitmap + TRect tabRect(TPoint(0,0),iSliderTab->SizeInPixels()); + gc.BitBltMasked(TPoint(tl.iX, tl.iY+tabPositionFromMinInPixels), iSliderTab, tabRect, iSliderTabMask, ETrue); + } +} + +//============================================================================= +EXPORT_C CCoeControl* CVerticalSlider::ComponentControl(TInt /*aIndex*/) const + { + return NULL; + } + +//============================================================================= +EXPORT_C TSize CVerticalSlider::MinimumSize() + { + TSize size = iSliderBg->SizeInPixels(); + return size; + } + +// setters + +//============================================================================= +EXPORT_C void CVerticalSlider::SetMinimum(TInt aValue) + { + iMinimumValue = aValue; + } + +//============================================================================= +EXPORT_C void CVerticalSlider::SetMaximum(TInt aValue) + { + iMaximumValue = aValue; + } + +//============================================================================= +EXPORT_C void CVerticalSlider::SetStep(TUint aValue) + { + iStep = aValue; + } + +//============================================================================= +EXPORT_C void CVerticalSlider::SetStepAmount(TUint8 aValue) + { + iNumberOfSteps = aValue; + + if(aValue == 0) + { + iStep = 0; + } + else + { + iStep = (iMaximumValue-iMinimumValue) / aValue; + } + } + +//============================================================================= +EXPORT_C void CVerticalSlider::SetPosition(TInt aValue) + { + __ASSERT_ALWAYS( aValue >= iMinimumValue, Panic(EVerticalSliderPanicIndexUnderflow) ); + __ASSERT_ALWAYS( aValue <= iMaximumValue, Panic(EVerticalSliderPanicIndexOverflow) ); + + iPosition = aValue; + } + +// getters + +//============================================================================= +EXPORT_C TInt CVerticalSlider::Minimum() const + { + return iMinimumValue; + } + +//============================================================================= +EXPORT_C TInt CVerticalSlider::Maximum() const + { + return iMaximumValue; + } + +//============================================================================= +EXPORT_C TInt CVerticalSlider::Step() const + { + return iStep; + } + +//============================================================================= +EXPORT_C TInt CVerticalSlider::Position() const + { + return iPosition; + } + +//============================================================================= +EXPORT_C void CVerticalSlider::Increment() + { + iPosition += iStep; + if(iPosition > iMaximumValue) + { + iPosition = iMaximumValue; + } + } + +//============================================================================= +EXPORT_C void CVerticalSlider::Decrement() + { + iPosition -= iStep; + if(iPosition < iMinimumValue) + { + iPosition = iMinimumValue; + } + } + + +//============================================================================= +void CVerticalSlider::LoadBitmapL( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask, TInt aBitmapId, TInt aMaskId ) const +{ + + TFileName iconFile( KImageEditorUiMifFile ); + User::LeaveIfError( CompleteWithAppPath(iconFile) ); + + // Get ids for bitmap and mask + AknIconUtils::CreateIconL( + aBitmap, + aMask, + iconFile, + aBitmapId, + aMaskId + ); + + +} + +//============================================================================= +void CVerticalSlider::SetBitmapSize() const +{ + + __ASSERT_ALWAYS( iSliderBg && iSliderTab, Panic(EVerticalSliderPanicBitmapsNotLoaded) ); + + // Get the screen mode from the Resolution Util + TInt screenMode = CResolutionUtil::Self()->GetScreenMode(); + + TSize sliderSize; + TSize tabSize; + + 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: + { + sliderSize = TSize (KStandardSliderWidth, KStandardSliderHeight); + tabSize = TSize (KStandardSliderTabWidth, KStandardSliderTabHeight); + break; + } + + // QVGA + case CResolutionUtil::EQVGA: + case CResolutionUtil::EQVGAFullScreen: + case CResolutionUtil::EQVGALandscape: + case CResolutionUtil::EQVGALandscapeFullScreen: + { + sliderSize = TSize (KQVGASliderWidth, KQVGASliderHeight); + tabSize = TSize (KQVGASliderTabWidth, KQVGASliderTabHeight); + break; + } + + case CResolutionUtil::EDouble: + case CResolutionUtil::EDoubleFullScreen: + case CResolutionUtil::EDoubleLandscape: + case CResolutionUtil::EDoubleLandscapeFullScreen: + { + sliderSize = TSize (KDoubleSliderWidth, KDoubleSliderHeight); + tabSize = TSize (KDoubleSliderTabWidth, KDoubleSliderTabHeight); + break; + } + + // HVGA + case CResolutionUtil::EHVGA: + case CResolutionUtil::EHVGAFullScreen: + case CResolutionUtil::EHVGALandscape: + case CResolutionUtil::EHVGALandscapeFullScreen: + { + sliderSize = TSize (KHVGASliderWidth, KHVGASliderHeight); + tabSize = TSize (KHVGASliderTabWidth, KHVGASliderTabHeight); + break; + } + + // VGA + case CResolutionUtil::EVGA: + case CResolutionUtil::EVGAFullScreen: + case CResolutionUtil::EVGALandscape: + case CResolutionUtil::EVGALandscapeFullScreen: + { + sliderSize = TSize (KVGASliderWidth, KVGASliderHeight); + tabSize = TSize (KVGASliderTabWidth, KVGASliderTabHeight); + break; + } + + // QHD + case CResolutionUtil::EQHD: + case CResolutionUtil::EQHDFullScreen: + case CResolutionUtil::EQHDLandscape: + case CResolutionUtil::EQHDLandscapeFullScreen: + { + sliderSize = TSize (KQHDSliderWidth, KQHDSliderHeight); + tabSize = TSize (KQHDSliderTabWidth, KQHDSliderTabHeight); + break; + } + + default: + { + sliderSize = TSize (KStandardSliderWidth, KStandardSliderHeight); + tabSize = TSize (KStandardSliderTabWidth, KStandardSliderTabHeight); + break; + } + } + + // Set size for scalable icons - MUST BE CALLED BEFORE ICON IS USABLE + AknIconUtils::SetSize( iSliderBg, sliderSize ); + AknIconUtils::SetSize( iSliderTab, tabSize ); + +} + +// End of File