diff -r e6a39382bb9c -r c8fb4cf7b3ae textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp Tue Apr 27 16:59:43 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp Tue May 11 16:31:42 2010 +0300 @@ -59,9 +59,9 @@ iOwnWndCtrl(ETrue), iOrdinalPos(EOrderNomal) { -#ifdef RD_TACTILE_FEEDBACK - iReservered1 = reinterpret_cast(new CFepUiBaseCtrlExtension(ETouchFeedbackNone)); -#endif // RD_TACTILE_FEEDBACK + //todo code refactoring needed, move to BaseConstructL + iExtension = new CFepUiBaseCtrlExtension(); + iPenSize.SetSize(1,1); iBorderSize.SetSize(KDefaultFrameWidth,KDefaultFrameWidth); iValidRegion.AddRect(iRect); @@ -94,9 +94,9 @@ iUiLayout(aUiLayout), iOwnWndCtrl(aOwnership) { -#ifdef RD_TACTILE_FEEDBACK - iReservered1 = reinterpret_cast(new CFepUiBaseCtrlExtension(ETouchFeedbackNone)); -#endif // RD_TACTILE_FEEDBACK + //todo code refactoring needed, move to BaseConstructL + iExtension = new CFepUiBaseCtrlExtension(); + iRect = aControl->Rect(); iControlId = aControl->UniqueHandle(); iValidRegion.AddRect(iRect); @@ -128,8 +128,9 @@ //de-register the area for tactile feedback //if(aUiLayout) //there must be aUiLayout UiLayout()->DeRegisterFeedbackArea(reinterpret_cast(this), Rect()); - delete reinterpret_cast(iReservered1); #endif // RD_TACTILE_FEEDBACK + + delete iExtension; } // --------------------------------------------------------------------------- @@ -184,7 +185,7 @@ EXPORT_C void CFepUiBaseCtrl::SetTactileFeedbackType(TInt aTactileType) { #ifdef RD_TACTILE_FEEDBACK - reinterpret_cast(iReservered1)->SetTactileFeedbackType(aTactileType); + iExtension->SetTactileFeedbackType(aTactileType); #endif // RD_TACTILE_FEEDBACK } @@ -535,6 +536,11 @@ // EXPORT_C TBool CFepUiBaseCtrl::Contains(const TPoint& aPt) { + if( iExtension->iExtResponseAreaActive ) + { + return iExtension->iExtResponseArea.Contains( aPt ); + } + return iRect.Contains(aPt); //return iValidRegion.Contains(aPt); } @@ -765,6 +771,11 @@ // EXPORT_C CFepUiBaseCtrl* CFepUiBaseCtrl::HandlePointerDownEventL(const TPoint& aPoint) { + if ( iExtension->iExtResponseAreaEnabled ) + { + ActiveExtResponseArea(); + } + iPointerDown = ETrue; if(iWndControl) { @@ -789,6 +800,11 @@ EXPORT_C CFepUiBaseCtrl* CFepUiBaseCtrl::HandlePointerUpEventL( const TPoint& aPoint) { + if ( iExtension->iExtResponseAreaActive ) + { + CancelExtResponseArea(); + } + iPointerDown = EFalse; if(iWndControl) { @@ -843,6 +859,11 @@ // EXPORT_C void CFepUiBaseCtrl::CancelPointerDownL() { + if ( iExtension->iExtResponseAreaActive ) + { + CancelExtResponseArea(); + } + if (PointerDown()) { iPointerDown = EFalse; @@ -986,6 +1007,11 @@ // EXPORT_C void CFepUiBaseCtrl::HandlePointerLeave(const TPoint& /*aPt*/) { + if ( iExtension->iExtResponseAreaActive ) + { + CancelExtResponseArea(); + } + iPointerDown = EFalse; iPointerLeft = ETrue; //report event @@ -1000,6 +1026,11 @@ // EXPORT_C void CFepUiBaseCtrl::HandlePointerEnter(const TPoint& aPt) { + if ( iExtension->iExtResponseAreaEnabled ) + { + ActiveExtResponseArea(); + } + iPointerDown = ETrue; iPointerLeft = EFalse; TRAP_IGNORE(HandlePointerMoveEventL(aPt)); @@ -1334,7 +1365,73 @@ return order; } +// --------------------------------------------------------------------------- +// CFepUiBaseCtrl::EnableExtResponseArea +// Enable/disable extra response area support +// --------------------------------------------------------------------------- +// +EXPORT_C void CFepUiBaseCtrl::EnableExtResponseArea( TBool aEnable, + const TRect& aExtMargin ) + { + iExtension->iExtResponseAreaEnabled = aEnable; + iExtension->iExtResponseAreaMargin = aExtMargin; + } +// --------------------------------------------------------------------------- +// CFepUiBaseCtrl::EnableExtResponseArea +// Active extra response area +// --------------------------------------------------------------------------- +// +EXPORT_C void CFepUiBaseCtrl::ActiveExtResponseArea() + { + if ( iExtension->iExtResponseAreaEnabled ) + { + TRect response = Rect(); + response.iTl -= iExtension->iExtResponseAreaMargin.iTl; + response.iBr += iExtension->iExtResponseAreaMargin.Size(); + + UpdateExtResponseArea( response ); + } + } + +// --------------------------------------------------------------------------- +// CFepUiBaseCtrl::EnableExtResponseArea +// Cancel extra response area +// --------------------------------------------------------------------------- +// +EXPORT_C void CFepUiBaseCtrl::CancelExtResponseArea() + { + iExtension->iExtResponseAreaActive = EFalse; + + CFepUiBaseCtrl* parent = ParentCtrl(); + if( parent && parent->IsKindOfControl(ECtrlControlGroup) ) + { + parent->CancelExtResponseArea(); + } + } + +// --------------------------------------------------------------------------- +// CFepUiBaseCtrl::EnableExtResponseArea +// Update extra response area +// --------------------------------------------------------------------------- +// +void CFepUiBaseCtrl::UpdateExtResponseArea( const TRect& aRect ) + { + if ( aRect.iTl.iX < Rect().iTl.iX || aRect.iTl.iY < Rect().iTl.iY || + aRect.iBr.iX > Rect().iBr.iX || aRect.iBr.iY > Rect().iBr.iY ) + { + iExtension->iExtResponseAreaActive = ETrue; + iExtension->iExtResponseArea = Rect(); + iExtension->iExtResponseArea.BoundingRect( aRect ); + + //update parent + CFepUiBaseCtrl* parent = ParentCtrl(); + if ( parent && parent->IsKindOfControl( ECtrlControlGroup ) ) + { + parent->UpdateExtResponseArea( iExtension->iExtResponseArea ); + } + } + } // --------------------------------------------------------------------------- // CFepUiBaseCtrl::CFepUiBaseCtrlExtension @@ -1342,11 +1439,17 @@ // --------------------------------------------------------------------------- // -CFepUiBaseCtrl::CFepUiBaseCtrlExtension::CFepUiBaseCtrlExtension(TInt aTactileType) +CFepUiBaseCtrl::CFepUiBaseCtrlExtension::CFepUiBaseCtrlExtension() { #ifdef RD_TACTILE_FEEDBACK - iTactileType = aTactileType; + iTactileType = ETouchFeedbackNone; #endif // RD_TACTILE_FEEDBACK + + //temp code, can be removed after refactoring of CFepUiBaseCtrl::iExtension + iExtResponseAreaActive = EFalse; + iExtResponseArea.SetRect( TPoint(0,0), TSize(0,0) ); + iExtResponseAreaEnabled = EFalse; + iExtResponseAreaMargin.SetRect( TPoint(0,0), TSize(0,0) ); } void CFepUiBaseCtrl::CFepUiBaseCtrlExtension::SetTactileFeedbackType(TInt aTactileType)