diff -r 000000000000 -r 96612d01cf9f videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,994 @@ +/* +* 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 "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: Volume bar control +* +*/ + +// Version : %version: 15 % + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mpxcommonvideoplaybackview.hrh" +#include "mpxvideoplaybackvolumebar.h" +#include "mpxvideoplaybackviewfiledetails.h" +#include "mpxvideoplaybackcontrolscontroller.h" +#include "mpxvideo_debug.h" + +#ifdef RD_TACTILE_FEEDBACK +#include +#endif //RD_TACTILE_FEEDBACK + +// CONSTANTS +const TInt KMPXSliderHeight = 30; +const TInt KMPXSliderWidth = 18; +const TInt KMPXVolumeBarWidth = 24; +const TInt KMPXVolumeDragEventTimeOut = 100000; +const TInt KMPXPtrEventRepeatRequestTime = 200000; + +// ============================ MEMBER FUNCTIONS =================================================== + +CMPXVideoPlaybackVolumeBar::CMPXVideoPlaybackVolumeBar( + CMPXVideoPlaybackControlsController* aController, TRect aRect ) + : iOneVolumeIncrementHeight(0) + , iMuted(EFalse) + , iRect(aRect) + , iDragging(EVolumeNotDragging) + , iController(aController) +{ +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::ConstructL() +// Symbian 2nd phase constructor can leave. +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::ConstructL() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::ConstructL()")); + + SetLayout(); + SkinChangeL(); + + iDraggingHandlerTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + +#ifdef RD_TACTILE_FEEDBACK + iFeedback = MTouchFeedback::Instance(); +#endif //RD_TACTILE_FEEDBACK +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::NewL() +// Two-phased constructor. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackVolumeBar* CMPXVideoPlaybackVolumeBar::NewL( + CMPXVideoPlaybackControlsController* aController, TRect aRect ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::NewL()")); + + CMPXVideoPlaybackVolumeBar* self = + new ( ELeave ) CMPXVideoPlaybackVolumeBar( aController, aRect ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar() +// Destructor. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar()")); + + if ( iDraggingHandlerTimer ) + { + iDraggingHandlerTimer->Cancel(); + delete iDraggingHandlerTimer; + iDraggingHandlerTimer = NULL; + } + + if (iSpeakerIcon) + { + delete iSpeakerIcon; + iSpeakerIcon = NULL; + } + + if (iSpeakerMuteIcon) + { + delete iSpeakerMuteIcon; + iSpeakerMuteIcon = NULL; + } + + if (iSliderIcon) + { + delete iSliderIcon; + iSliderIcon = NULL; + } + + if (iSliderSelectedIcon) + { + delete iSliderSelectedIcon; + iSliderSelectedIcon = NULL; + } + + if (iVolumeUpIcon) + { + delete iVolumeUpIcon; + iVolumeUpIcon = NULL; + } + + if (iVolumeDownIcon) + { + delete iVolumeDownIcon; + iVolumeDownIcon = NULL; + } + + if (iVolumeFrameIconTop) + { + delete iVolumeFrameIconTop; + iVolumeFrameIconTop = NULL; + } + + if (iVolumeFrameIconMiddle) + { + delete iVolumeFrameIconMiddle; + iVolumeFrameIconMiddle = NULL; + } + + if (iVolumeFrameIconBottom) + { + delete iVolumeFrameIconBottom; + iVolumeFrameIconBottom = NULL; + } + + if (iNoAudioIcon) + { + delete iNoAudioIcon; + iNoAudioIcon = NULL; + } + +#ifdef RD_TACTILE_FEEDBACK + if (iFeedback) + { + iFeedback->RemoveFeedbackForControl(this); + } +#endif //RD_TACTILE_FEEDBACK + +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleResourceChange() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleResourceChange( TInt aType ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::HandleResourceChange(0x%X)"), aType); + + if ( aType == KAknsMessageSkinChange ) + { + TRAP_IGNORE( SkinChangeL() ); + } + + CCoeControl::HandleResourceChange( aType ); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SetLayout() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SetLayout() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::SetLayout()")); + + // + // Calculate icon rects + // + iRect = TRect(0, 0, iRect.Width(), iRect.Height() ); + TInt volumeUpDownIndicatorSize = iRect.Width() / 3; + + iVolumeControlRect = TRect( volumeUpDownIndicatorSize, + iRect.iTl.iY, + iRect.iBr.iX, + iRect.iTl.iY + iRect.Height() * 4 / 5 ); + + iVolumeBarRect = TRect( iVolumeControlRect.iTl.iX + iVolumeControlRect.Width() / 3, + iVolumeControlRect.iTl.iY + iVolumeControlRect.Height() / 20, + iVolumeControlRect.iTl.iX + iVolumeControlRect.Width() / 3 * 2, + iVolumeControlRect.iTl.iY + iVolumeControlRect.Height() ); + + iVolumeBarRectTop = TRect( iRect.Width() / 2 - KMPXVolumeBarWidth / 2 , + iVolumeBarRect.iTl.iY, + iRect.Width() / 2 + KMPXVolumeBarWidth / 2, + iVolumeBarRect.iTl.iY + iVolumeBarRect.Height() / 10 ); + + iVolumeBarRectMiddle = TRect( iVolumeBarRectTop.iTl.iX, + iVolumeBarRectTop.iBr.iY, + iVolumeBarRectTop.iBr.iX, + iVolumeBarRectTop.iBr.iY + iVolumeBarRectTop.Height() * 8 ); + + iVolumeBarRectBottom = TRect( iVolumeBarRectTop.iTl.iX, + iVolumeBarRectMiddle.iBr.iY, + iVolumeBarRectTop.iBr.iX, + iVolumeBarRect.iBr.iY ); + + iSliderRect = TRect( iRect.Width() / 2 - KMPXSliderWidth / 2 + 3, + iVolumeBarRect.iBr.iY - KMPXSliderHeight, + iRect.Width() / 2 + KMPXSliderWidth / 2 + 3, + iVolumeBarRect.iBr.iY ); + + iVolumeUpControlRect = TRect( iRect.iTl, + TSize( volumeUpDownIndicatorSize, + iVolumeControlRect.Height() / 2 ) ); + + iVolumeDownControlRect = TRect( TPoint ( iRect.iTl.iX, iVolumeControlRect.Height() / 2 ), + iVolumeUpControlRect.Size() ); + + iVolumeUpRect = TRect( iVolumeUpControlRect.iTl.iX + 2, + iVolumeUpControlRect.iTl.iY + 8, + iVolumeUpControlRect.iBr.iX + 2, + iVolumeUpControlRect.iTl.iY + volumeUpDownIndicatorSize ); + + iVolumeDownRect = TRect( iVolumeUpRect.iTl.iX, + iVolumeDownControlRect.iBr.iY - volumeUpDownIndicatorSize, + iVolumeUpRect.iBr.iX, + iVolumeDownControlRect.iBr.iY ); + + iSpeakerControlRect = TRect( TPoint( iRect.iTl.iX, iVolumeControlRect.iBr.iY ), + iRect.iBr ); + + iSpeakerRect = TRect( iSpeakerControlRect.iTl.iX + iSpeakerControlRect.Width() / 5, + iSpeakerControlRect.iTl.iY + iSpeakerControlRect.Height() / 5, + iSpeakerControlRect.iBr.iX - iSpeakerControlRect.Width() / 5, + iSpeakerControlRect.iBr.iY - iSpeakerControlRect.Height() / 5 ); + + iOneVolumeIncrementHeight = (TReal)( iVolumeBarRect.Height() - KMPXSliderHeight ) + / (TReal)KPbPlaybackVolumeLevelMax; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SkinChangeL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SkinChangeL() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::SkinChangeL()")); + + // + // Create icons + // + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + TFileName iconsPath; + iController->LocateBitmapFileL( iconsPath ); + + delete iSpeakerIcon; + iSpeakerIcon = NULL; + iSpeakerIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiNsliderUnmuted, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted_mask ); + + if ( iSpeakerIcon ) + { + AknIconUtils::SetSize( iSpeakerIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iSpeakerMuteIcon; + iSpeakerMuteIcon = NULL; + iSpeakerMuteIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiNsliderMuted, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted_mask ); + + + if ( iSpeakerMuteIcon ) + { + AknIconUtils::SetSize( iSpeakerMuteIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iNoAudioIcon; + iNoAudioIcon = NULL; + iNoAudioIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafMupLstCorrupttrack, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_mup_lst_corrupttrack, + EMbmMpxvideoplaybackcontrolsQgn_graf_mup_lst_corrupttrack_mask ); + + + if ( iNoAudioIcon ) + { + AknIconUtils::SetSize( iNoAudioIcon->Bitmap(), + iSpeakerRect.Size(), + EAspectRatioPreserved ); + } + + delete iSliderIcon; + iSliderIcon = NULL; + iSliderIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafNsliderVerticalMarker, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_mask ); + + if ( iSliderIcon ) + { + AknIconUtils::SetSize( iSliderIcon->Bitmap(), + TSize(KMPXSliderWidth, KMPXSliderHeight), + EAspectRatioNotPreserved ); + } + + delete iSliderSelectedIcon; + iSliderSelectedIcon = NULL; + iSliderSelectedIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnGrafNsliderVerticalMarkerSelected, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected_mask ); + + if ( iSliderSelectedIcon ) + { + AknIconUtils::SetSize( iSliderSelectedIcon->Bitmap(), + TSize(KMPXSliderWidth, KMPXSliderHeight), + EAspectRatioNotPreserved ); + } + + delete iVolumeUpIcon; + iVolumeUpIcon = NULL; + iVolumeUpIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMax, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase_mask ); + + if ( iVolumeUpIcon ) + { + AknIconUtils::SetSize( iVolumeUpIcon->Bitmap(), + iVolumeUpRect.Size(), + EAspectRatioPreserved ); + } + + delete iVolumeDownIcon; + iVolumeDownIcon = NULL; + iVolumeDownIcon = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMin, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease, + EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease_mask ); + + if ( iVolumeDownIcon ) + { + AknIconUtils::SetSize( iVolumeDownIcon->Bitmap(), + iVolumeDownRect.Size(), + EAspectRatioPreserved ); + } + + delete iVolumeFrameIconTop; + iVolumeFrameIconTop = NULL; + iVolumeFrameIconTop = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomTop, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top_mask ); + + if ( iVolumeFrameIconTop ) + { + AknIconUtils::SetSize( iVolumeFrameIconTop->Bitmap(), + TSize( KMPXVolumeBarWidth, iVolumeBarRectTop.Height() ), + EAspectRatioNotPreserved ); + } + + delete iVolumeFrameIconMiddle; + iVolumeFrameIconMiddle = NULL; + iVolumeFrameIconMiddle = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomMiddle, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle_mask ); + + if ( iVolumeFrameIconMiddle ) + { + AknIconUtils::SetSize( iVolumeFrameIconMiddle->Bitmap(), + TSize( KMPXVolumeBarWidth, iVolumeBarRectMiddle.Height() ), + EAspectRatioNotPreserved ); + } + + delete iVolumeFrameIconBottom; + iVolumeFrameIconBottom = NULL; + iVolumeFrameIconBottom = AknsUtils::CreateGulIconL( + skin, + KAknsIIDQgnIndiCam4ZoomBottom, + iconsPath, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom, + EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom_mask ); + + if ( iVolumeFrameIconBottom ) + { + AknIconUtils::SetSize( iVolumeFrameIconBottom->Bitmap(), + TSize( KMPXVolumeBarWidth, iVolumeBarRectBottom.Height() ), + EAspectRatioNotPreserved ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL()")); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButtonRepeat: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackSensitive ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + iController->HandleCommandL( EMPXPbvCmdIncreaseVolume ); + iDragging = EVolumeIncreaseDragging; + + } + case TPointerEvent::EButton1Down: + { + Window().RequestPointerRepeatEvent( + TTimeIntervalMicroSeconds32(KMPXPtrEventRepeatRequestTime) + ,iVolumeUpControlRect); + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeIncreaseDragging; + + break; + } + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackBasic ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + + iController->HandleCommandL( EMPXPbvCmdIncreaseVolume ); + + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL()")); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButtonRepeat: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackSensitive ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + iController->HandleCommandL( EMPXPbvCmdDecreaseVolume ); + iDragging = EVolumeDecreaseDragging; + + } + case TPointerEvent::EButton1Down: + { + Window().RequestPointerRepeatEvent( + TTimeIntervalMicroSeconds32(KMPXPtrEventRepeatRequestTime) + ,iVolumeDownControlRect); + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeDecreaseDragging; + break; + } + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackBasic ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + + iController->HandleCommandL( EMPXPbvCmdDecreaseVolume ); + + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL()")); + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Up: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackBasicButton ); +#else + iFeedback->InstantFeedback( ETouchFeedbackBasic ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + + if ( iMuted ) + { + iController->HandleCommandL( EMPXPbvCmdUnMute ); + } + else + { + iController->HandleCommandL( EMPXPbvCmdMute ); + } + + iDragging = EVolumeNotDragging; + + break; + } + case TPointerEvent::EDrag: + { + iDragging = EVolumeSpeakerDragging; + + break; + } + case TPointerEvent::EButton1Down: + { + iDragging = EVolumeNotDragging; + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL()")); + + TInt vol = 0; + + if ( aPointerEvent.iPosition.iY < iVolumeBarRect.iTl.iY + KMPXSliderHeight / 2 ) + { + vol = KPbPlaybackVolumeLevelMax; + } + else if ( aPointerEvent.iPosition.iY > iVolumeBarRect.iBr.iY - KMPXSliderHeight / 2 ) + { + vol = 0; + } + else + { + vol = ( iVolumeBarRect.iBr.iY - KMPXSliderHeight / 2 - aPointerEvent.iPosition.iY ) / + iOneVolumeIncrementHeight; + } + + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackBasic ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + + if ( ! iDraggingHandlerTimer->IsActive() ) + { + iDraggingHandlerTimer->Start( + KMPXVolumeDragEventTimeOut, + KMPXVolumeDragEventTimeOut, + TCallBack( CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut, this ) ); + } + + iDragging = EVolumeNotDragging; + + break; + } + case TPointerEvent::EDrag: + { +#ifdef RD_TACTILE_FEEDBACK + if ( iFeedback ) + { +#ifdef SYMBIAN_BUILD_GCE + iFeedback->InstantFeedback( ETouchFeedbackSlider ); +#else + iFeedback->InstantFeedback( ETouchFeedbackSensitive ); +#endif //SYMBIAN_BUILD_GCE + } +#endif //RD_TACTILE_FEEDBACK + + iVolumeWhileDraggingEvent = vol; + iDragging = EVolumeBarDragging; + + break; + } + case TPointerEvent::EButton1Up: + { + if ( iDraggingHandlerTimer->IsActive() ) + { + iDraggingHandlerTimer->Cancel(); + } + + SetVolumeL( vol ); + + if ( iDragging == EVolumeBarDragging && vol == 0 ) + { + // + // volume & mute levels are kept track in playbackplugin. + // + iController->HandleCommandL( EMPXPbvCmdMute ); + } + + iDragging = EVolumeNotDragging; + + if ( IsVisible() ) + { + DrawNow(); + } + + break; + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut +// ------------------------------------------------------------------------------------------------- +// +TInt CMPXVideoPlaybackVolumeBar::HandleVolumeDragEventTimeOut( TAny* aPtr ) +{ + static_cast(aPtr)->DoHandleVolumeDragEventTimeOut(); + return KErrNone; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::DoHandleVolumeDragEventTimeOut +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::DoHandleVolumeDragEventTimeOut() +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackController::DoHandleVolumeDragEventTimeOut()")); + + if ( iDragging == EVolumeBarDragging ) + { + SetVolumeL( iVolumeWhileDraggingEvent ); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::HandlePointerEventL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::HandlePointerEventL( const TPointerEvent& aPointerEvent ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandlePointerEventL()")); + + // + // Block pointer events in the following cases: + // - If TV-Out is connected and the clip is DRM protected + // + if ( iController->IsTvOutPlaybackAllowed() && iController->FileDetails()->iAudioEnabled ) + { + // + // Volume up + // + if ( iDragging == EVolumeIncreaseDragging || + ( iVolumeUpControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleVolumeIncreaseL( aPointerEvent ); + } + // + // Volume down + // + else if ( iDragging == EVolumeDecreaseDragging || + ( iVolumeDownControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleVolumeDecreaseL( aPointerEvent ); + } + // + // Speaker/Mute + // + else if ( iDragging == EVolumeSpeakerDragging || + ( iSpeakerControlRect.Contains( aPointerEvent.iPosition ) && + iDragging == EVolumeNotDragging ) ) + { + HandleSpeakerControlEventL( aPointerEvent ); + } + // + // Volume Bar + // + else + { + HandleVolumeBarEventL( aPointerEvent ); + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::Draw() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::Draw( const TRect& aRect ) const +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::Draw()")); + + CWindowGc& gc = SystemGc(); + gc.SetClippingRect( aRect ); + + if ( Window().DisplayMode() == EColor16MAP ) + { + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + gc.SetBrushColor( TRgb::Color16MAP( 255 ) ); + gc.Clear( aRect ); + } + else if ( Window().DisplayMode() == EColor16MA ) + { + gc.SetDrawMode( CGraphicsContext::EDrawModeWriteAlpha ); + gc.SetBrushColor( TRgb::Color16MA( 0 ) ); + gc.Clear( aRect ); + } + else + { + // draw a solid background so that the entire progress + // bar is shown not just the area representing the + // portion that has been played. + gc.SetBrushColor( KRgbBlack ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.DrawRect( aRect ); + gc.SetBrushStyle(CGraphicsContext::ENullBrush); + } + + if ( ! iController->FileDetails()->iAudioEnabled || iMuted ) + { + if ( iController->FileDetails()->iAudioEnabled ) + { + // + // use "Mute" icon for media clip with audio supported + // + gc.BitBltMasked( iSpeakerRect.iTl, + iSpeakerMuteIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iSpeakerMuteIcon->Mask(), + ETrue ); + } + else + { + // + // use "No Audio" icon instead of the generic "Mute" icon + // for media clip with audio not supported + // + gc.BitBltMasked( iSpeakerRect.iTl, + iNoAudioIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iNoAudioIcon->Mask(), + ETrue ); + } + } + else + { + gc.BitBltMasked( iSpeakerRect.iTl, + iSpeakerIcon->Bitmap(), + TRect(iSpeakerRect.Size()), + iSpeakerIcon->Mask(), + ETrue ); + } + + if ( iVolumeUpIcon ) + { + gc.BitBltMasked( iVolumeUpRect.iTl, + iVolumeUpIcon->Bitmap(), + TRect(iVolumeUpRect.Size()), + iVolumeUpIcon->Mask(), + ETrue ); + } + + if ( iVolumeDownIcon ) + { + gc.BitBltMasked( iVolumeDownRect.iTl, + iVolumeDownIcon->Bitmap(), + TRect(iVolumeDownRect.Size()), + iVolumeDownIcon->Mask(), + ETrue ); + } + + if ( iVolumeFrameIconTop ) + { + gc.BitBltMasked( iVolumeBarRectTop.iTl, + iVolumeFrameIconTop->Bitmap(), + TRect(iVolumeBarRectTop.Size()), + iVolumeFrameIconTop->Mask(), + ETrue ); + } + + if ( iVolumeFrameIconMiddle ) + { + gc.BitBltMasked( iVolumeBarRectMiddle.iTl, + iVolumeFrameIconMiddle->Bitmap(), + TRect(iVolumeBarRectMiddle.Size()), + iVolumeFrameIconMiddle->Mask(), + ETrue ); + } + + if ( iVolumeFrameIconBottom ) + { + gc.BitBltMasked( iVolumeBarRectBottom.iTl, + iVolumeFrameIconBottom->Bitmap(), + TRect(iVolumeBarRectBottom.Size()), + iVolumeFrameIconBottom->Mask(), + ETrue ); + } + + if ( iController->FileDetails() && + iController->FileDetails()->iAudioEnabled && + iSliderIcon && + iSliderSelectedIcon ) + { + if ( iDragging == EVolumeBarDragging ) + { + gc.BitBltMasked( iSliderRect.iTl, + iSliderSelectedIcon->Bitmap(), + TRect(iSliderRect.Size()), + iSliderSelectedIcon->Mask(), + ETrue ); + } + else + { + gc.BitBltMasked( iSliderRect.iTl, + iSliderIcon->Bitmap(), + TRect(iSliderRect.Size()), + iSliderIcon->Mask(), + ETrue ); + } + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::CountComponentControls() +// ------------------------------------------------------------------------------------------------- +// +TInt CMPXVideoPlaybackVolumeBar::CountComponentControls() const +{ + return 0; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::VolumeChanged() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::VolumeChanged( TInt aVolume ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::VolumeChanged() [%d]"), aVolume); + + iMuted = (aVolume == 0)? ETrue:EFalse; + + TReal volumeBarHeight = (TReal)iVolumeBarRect.iBr.iY - + iOneVolumeIncrementHeight * (TReal)aVolume; + + iSliderRect.iTl.iY = volumeBarHeight - KMPXSliderHeight; + iSliderRect.iBr.iY = volumeBarHeight; + + if ( IsVisible() ) + { + DrawNow(); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::Reset +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::Reset() +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::Reset()")); + + if ( iDragging != EVolumeNotDragging ) + { + iDragging = EVolumeNotDragging; + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoPlaybackVolumeBar::SetVolumeL() +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoPlaybackVolumeBar::SetVolumeL( TInt aVolume ) +{ + MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::SetVolumeL(%d)"), aVolume); + + iController->HandleCommandL( EMPXPbvCmdSetVolume, aVolume ); +} + +// End of File