2827 // CAknButton::SetFlags |
2844 // CAknButton::SetFlags |
2828 // Sets the button flags |
2845 // Sets the button flags |
2829 // ----------------------------------------------------------------------------- |
2846 // ----------------------------------------------------------------------------- |
2830 // |
2847 // |
2831 EXPORT_C void CAknButton::SetButtonFlags( const TInt aFlags ) |
2848 EXPORT_C void CAknButton::SetButtonFlags( const TInt aFlags ) |
2832 { |
2849 { |
2833 if ( !( iFlags & KAknButtonNoFrame ) ) |
2850 if ( !( iFlags & KAknButtonNoFrame ) ) |
2834 { |
2851 { |
2835 if ( aFlags & KAknButtonNoFrame ) |
2852 if ( aFlags & KAknButtonNoFrame ) |
2836 { |
2853 { |
2837 iExtension->iMargins.SetAllValuesTo( 0 ); |
2854 iExtension->iMargins.SetAllValuesTo( 0 ); |
2838 ConvertTextToVisualAndClip(); |
|
2839 } |
|
2840 // aFlags does not include KAknButtonNoFrame |
|
2841 else if ( iFlags & KAknButtonTextInsideFrame != |
|
2842 aFlags & KAknButtonTextInsideFrame ) |
|
2843 { |
|
2844 ConvertTextToVisualAndClip(); |
|
2845 } |
2855 } |
2846 } |
2856 } |
2847 if ( aFlags & KAknButtonHitTest ) |
2857 if ( aFlags & KAknButtonHitTest ) |
2848 { |
2858 { |
2849 SetHitTest( iExtension ); |
2859 SetHitTest( iExtension ); |
2850 iExtension->HandleFeedbackAreaChange(); |
2860 iExtension->HandleFeedbackAreaChange(); |
2851 } |
2861 } |
2852 if ( aFlags & KAknButtonNoFrame && aFlags & KAknButtonPressedDownFrame ) |
2862 if ( aFlags & KAknButtonNoFrame && aFlags & KAknButtonPressedDownFrame ) |
2853 { |
2863 { |
2854 TRAP_IGNORE ( CreatePressedDownFrameL() ); |
2864 TRAP_IGNORE ( CreatePressedDownFrameL() ); |
2855 } |
|
2856 if ( iFlags & KAknButtonNoFrame && !( aFlags & KAknButtonNoFrame ) ) |
|
2857 { |
|
2858 SetFrameIDs(); |
|
2859 if ( aFlags & KAknButtonTextInsideFrame ) |
|
2860 { |
|
2861 ConvertTextToVisualAndClip(); |
|
2862 } |
|
2863 } |
2865 } |
2864 iFlags = aFlags; |
2866 iFlags = aFlags; |
2865 } |
2867 } |
2866 |
2868 |
2867 // ----------------------------------------------------------------------------- |
2869 // ----------------------------------------------------------------------------- |
3520 // Continues drawing of the button which has only text |
3522 // Continues drawing of the button which has only text |
3521 // ----------------------------------------------------------------------------- |
3523 // ----------------------------------------------------------------------------- |
3522 // |
3524 // |
3523 void CAknButton::DrawTextButton( CWindowGc& aGc ) const |
3525 void CAknButton::DrawTextButton( CWindowGc& aGc ) const |
3524 { |
3526 { |
|
3527 TRect textRect; |
|
3528 |
|
3529 TRect iconRect; //this is no use |
|
3530 GetCurrentStateTextAndIconRect( iconRect, textRect ); |
|
3531 |
3525 CAknButtonState* state = State(); |
3532 CAknButtonState* state = State(); |
3526 if ( !state || !state->HasText() ) |
3533 if ( state->TextChanged() || iExtension->TextRectSizeChanged( textRect ) ) |
3527 return; |
3534 { |
3528 |
3535 ConvertTextToVisualAndClip( textRect ); |
3529 if ( state->TextChanged() ) |
|
3530 { |
|
3531 ConvertTextToVisualAndClip(); |
|
3532 } |
|
3533 |
|
3534 TRect textRect = iExtension->iMargins.InnerRect( Rect() ); |
|
3535 |
|
3536 if ( !( iFlags & KAknButtonNoFrame ) && |
|
3537 ( iFlags & KAknButtonTextInsideFrame ) ) |
|
3538 { |
|
3539 TAknLayoutRect center; |
|
3540 center.LayoutRect( Rect(), |
|
3541 AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() ); |
|
3542 |
|
3543 textRect = center.Rect(); |
|
3544 } |
3536 } |
3545 DrawText( aGc, textRect ); |
3537 DrawText( aGc, textRect ); |
3546 } |
3538 } |
3547 |
3539 |
3548 // ----------------------------------------------------------------------------- |
3540 // ----------------------------------------------------------------------------- |
3694 { |
3686 { |
3695 CAknButtonState* state = State(); |
3687 CAknButtonState* state = State(); |
3696 if ( !state || !state->HasText() ) |
3688 if ( !state || !state->HasText() ) |
3697 { |
3689 { |
3698 return; |
3690 return; |
3699 } |
3691 } |
3700 if ( state->TextChanged() ) |
|
3701 { |
|
3702 ConvertTextToVisualAndClip(); |
|
3703 } |
|
3704 |
3692 |
3705 const CGulIcon* icon = GetCurrentIcon(); |
3693 const CGulIcon* icon = GetCurrentIcon(); |
3706 if ( !icon ) |
3694 |
3707 { |
3695 |
3708 return; |
|
3709 } |
|
3710 |
|
3711 TRect rect = iExtension->iMargins.InnerRect( Rect() ); |
|
3712 TRect iconRect; |
3696 TRect iconRect; |
3713 TRect textRect; |
3697 TRect textRect; |
3714 |
3698 GetCurrentStateTextAndIconRect( iconRect, textRect ); |
3715 if ( !( iFlags & KAknButtonNoFrame ) && |
3699 |
3716 ( iFlags & KAknButtonTextInsideFrame )) |
|
3717 { |
|
3718 TAknLayoutRect centerLayout; |
|
3719 centerLayout.LayoutRect( rect, |
|
3720 AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() ); |
|
3721 rect = centerLayout.Rect(); |
|
3722 } |
|
3723 |
|
3724 CFbsBitmap* buttonBmp = icon->Bitmap(); |
3700 CFbsBitmap* buttonBmp = icon->Bitmap(); |
3725 CFbsBitmap* buttonMask = icon->Mask(); |
3701 CFbsBitmap* buttonMask = icon->Mask(); |
3726 TSize iconSize ( buttonBmp->SizeInPixels()); |
3702 TSize iconSize ( buttonBmp->SizeInPixels()); |
3727 |
3703 |
3728 // Set rects for icon and text according to their positioning |
3704 |
3729 // First icon rect according to icon size - rest is for text |
3705 if ( state->TextChanged() || iExtension->TextRectSizeChanged( textRect ) ) |
3730 |
3706 { |
3731 switch ( iExtension->iTextAndIconAlignment ) |
3707 ConvertTextToVisualAndClip( textRect ); |
3732 { |
3708 } |
3733 case EIconBeforeText: |
|
3734 if ( AknLayoutUtils::LayoutMirrored() ) |
|
3735 { |
|
3736 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3737 rect.iBr.iX - iconSize.iWidth, rect.iBr.iY); |
|
3738 iconRect.SetRect( rect.iTl.iX + |
|
3739 rect.Width() -iconSize.iWidth, |
|
3740 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
3741 } |
|
3742 else |
|
3743 { |
|
3744 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3745 rect.iTl.iX + iconSize.iWidth, rect.iBr.iY); |
|
3746 textRect.SetRect( rect.iTl.iX + iconSize.iWidth, |
|
3747 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
3748 } |
|
3749 |
|
3750 break; |
|
3751 |
|
3752 case EIconAfterText: |
|
3753 if ( AknLayoutUtils::LayoutMirrored() ) |
|
3754 { |
|
3755 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3756 rect.iTl.iX + iconSize.iWidth, rect.iBr.iY); |
|
3757 textRect.SetRect( rect.iTl.iX + iconSize.iWidth, |
|
3758 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
3759 } |
|
3760 else |
|
3761 { |
|
3762 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3763 rect.iBr.iX - iconSize.iWidth, rect.iBr.iY); |
|
3764 iconRect.SetRect( rect.iTl.iX + |
|
3765 rect.Width() -iconSize.iWidth, |
|
3766 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
3767 } |
|
3768 break; |
|
3769 |
|
3770 case EIconOverText: |
|
3771 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3772 rect.iBr.iX, rect.iTl.iY + iconSize.iHeight ); |
|
3773 textRect.SetRect( rect.iTl.iX, rect.iTl.iY + iconSize.iHeight, |
|
3774 rect.iBr.iX, rect.iBr.iY ); |
|
3775 break; |
|
3776 |
|
3777 case EIconUnderText: |
|
3778 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
3779 rect.iBr.iX, rect.iBr.iY - iconSize.iHeight ); |
|
3780 iconRect.SetRect( rect.iTl.iX, rect.iBr.iY - iconSize.iHeight, |
|
3781 rect.iBr.iX, rect.iBr.iY ); |
|
3782 break; |
|
3783 |
|
3784 case EOverlay: |
|
3785 { |
|
3786 textRect = rect; |
|
3787 iconRect = rect; |
|
3788 } |
|
3789 break; |
|
3790 |
|
3791 default: |
|
3792 return; |
|
3793 } |
|
3794 |
|
3795 // Draw icon |
3709 // Draw icon |
3796 TPoint iconPoint; |
3710 TPoint iconPoint; |
3797 switch ( iExtension->iHorizontalIconAlignment ) |
3711 switch ( iExtension->iHorizontalIconAlignment ) |
3798 { |
3712 { |
3799 case ERight: |
3713 case ERight: |
4635 state->ResetTextChanged(); |
4556 state->ResetTextChanged(); |
4636 } |
4557 } |
4637 return; |
4558 return; |
4638 } |
4559 } |
4639 |
4560 |
4640 TRect textRect = iExtension->iMargins.InnerRect( Rect() ); |
4561 TRect textRect( aRect ); |
4641 |
4562 //Using given rect to calculate the visual text if it's not empty. |
4642 if ( !( iFlags & KAknButtonNoFrame ) && |
4563 if ( !textRect.IsEmpty() ) |
4643 ( iFlags & KAknButtonTextInsideFrame ) ) |
4564 { |
4644 { |
4565 iExtension->iTextRect = textRect; |
4645 TAknLayoutRect center; |
4566 } |
4646 center.LayoutRect( Rect(), |
4567 //Calculate text area. |
4647 AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() ); |
4568 //This branch means that it's the first calling after the state changed |
4648 |
4569 //or client using new font before this is shown. |
4649 textRect = center.Rect(); |
4570 else |
4650 } |
4571 { |
4651 |
4572 TRect iconRect; |
|
4573 GetCurrentStateTextAndIconRect( iconRect, textRect ); |
|
4574 iExtension->iTextRect = textRect; |
|
4575 } |
|
4576 |
4652 TInt clipWidth = textRect.Width(); |
4577 TInt clipWidth = textRect.Width(); |
4653 |
4578 |
4654 const CFont* font = iFont; |
4579 const CFont* font = iFont; |
4655 if ( !font ) |
4580 if ( !font ) |
4656 { |
4581 { |
4663 iExtension->iVisualText, |
4588 iExtension->iVisualText, |
4664 *font, |
4589 *font, |
4665 clipWidth, |
4590 clipWidth, |
4666 clipWidth ); |
4591 clipWidth ); |
4667 } |
4592 } |
|
4593 |
|
4594 // ----------------------------------------------------------------------------- |
|
4595 // CAknButton::GetCurrentStateTextAndIconRect() |
|
4596 // Get rect for icon and text of the current button state . |
|
4597 // ----------------------------------------------------------------------------- |
|
4598 // |
|
4599 void CAknButton::GetCurrentStateTextAndIconRect( TRect& aIconRect, |
|
4600 TRect& aTextRect ) const |
|
4601 { |
|
4602 TRect iconRect( TRect::EUninitialized ) ; |
|
4603 TRect textRect( TRect::EUninitialized ); |
|
4604 |
|
4605 CAknButtonState* state = State(); |
|
4606 |
|
4607 //Return directly if no state |
|
4608 if ( !state ) |
|
4609 { |
|
4610 aIconRect = iconRect; |
|
4611 aTextRect = textRect; |
|
4612 return; |
|
4613 } |
|
4614 |
|
4615 TBool hasText( state->HasText() ); |
|
4616 TBool hasIcon( EFalse ); |
|
4617 |
|
4618 const CGulIcon* icon = GetCurrentIcon(); |
|
4619 if ( icon ) |
|
4620 { |
|
4621 hasIcon = ETrue; |
|
4622 } |
|
4623 |
|
4624 TRect rect = iExtension->iMargins.InnerRect( Rect() ); |
|
4625 |
|
4626 //Icon area is not effected by the frame flags. |
|
4627 if ( hasIcon ) |
|
4628 { |
|
4629 iconRect = rect; |
|
4630 } |
|
4631 |
|
4632 if ( !( iFlags & KAknButtonNoFrame ) && |
|
4633 ( iFlags & KAknButtonTextInsideFrame )) |
|
4634 { |
|
4635 TAknLayoutRect centerLayout; |
|
4636 centerLayout.LayoutRect( rect, |
|
4637 AknLayoutScalable_Avkon::toolbar_button_pane_g1().LayoutLine() ); |
|
4638 rect = centerLayout.Rect(); |
|
4639 } |
|
4640 |
|
4641 if ( hasText ) |
|
4642 { |
|
4643 textRect = rect; |
|
4644 } |
|
4645 |
|
4646 |
|
4647 if ( hasText && hasIcon ) |
|
4648 { |
|
4649 CFbsBitmap* buttonBmp = icon->Bitmap(); |
|
4650 CFbsBitmap* buttonMask = icon->Mask(); |
|
4651 TSize iconSize ( buttonBmp->SizeInPixels()); |
|
4652 |
|
4653 // Set rects for icon and text according to their positioning |
|
4654 // First icon rect according to icon size - rest is for text |
|
4655 |
|
4656 switch ( iExtension->iTextAndIconAlignment ) |
|
4657 { |
|
4658 case CAknButton::EIconBeforeText: |
|
4659 if ( AknLayoutUtils::LayoutMirrored() ) |
|
4660 { |
|
4661 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4662 rect.iBr.iX - iconSize.iWidth, rect.iBr.iY); |
|
4663 iconRect.SetRect( rect.iTl.iX + |
|
4664 rect.Width() -iconSize.iWidth, |
|
4665 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
4666 } |
|
4667 else |
|
4668 { |
|
4669 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4670 rect.iTl.iX + iconSize.iWidth, rect.iBr.iY); |
|
4671 textRect.SetRect( rect.iTl.iX + iconSize.iWidth, |
|
4672 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
4673 } |
|
4674 |
|
4675 break; |
|
4676 |
|
4677 case CAknButton::EIconAfterText: |
|
4678 if ( AknLayoutUtils::LayoutMirrored() ) |
|
4679 { |
|
4680 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4681 rect.iTl.iX + iconSize.iWidth, rect.iBr.iY); |
|
4682 textRect.SetRect( rect.iTl.iX + iconSize.iWidth, |
|
4683 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
4684 } |
|
4685 else |
|
4686 { |
|
4687 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4688 rect.iBr.iX - iconSize.iWidth, rect.iBr.iY); |
|
4689 iconRect.SetRect( rect.iTl.iX + |
|
4690 rect.Width() -iconSize.iWidth, |
|
4691 rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); |
|
4692 } |
|
4693 break; |
|
4694 |
|
4695 case CAknButton::EIconOverText: |
|
4696 iconRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4697 rect.iBr.iX, rect.iTl.iY + iconSize.iHeight ); |
|
4698 textRect.SetRect( rect.iTl.iX, rect.iTl.iY + iconSize.iHeight, |
|
4699 rect.iBr.iX, rect.iBr.iY ); |
|
4700 break; |
|
4701 |
|
4702 case CAknButton::EIconUnderText: |
|
4703 textRect.SetRect( rect.iTl.iX, rect.iTl.iY, |
|
4704 rect.iBr.iX, rect.iBr.iY - iconSize.iHeight ); |
|
4705 iconRect.SetRect( rect.iTl.iX, rect.iBr.iY - iconSize.iHeight, |
|
4706 rect.iBr.iX, rect.iBr.iY ); |
|
4707 break; |
|
4708 |
|
4709 case CAknButton::EOverlay: |
|
4710 { |
|
4711 textRect = rect; |
|
4712 iconRect = rect; |
|
4713 } |
|
4714 break; |
|
4715 default: |
|
4716 break; //Do nothing. |
|
4717 } |
|
4718 } |
|
4719 aTextRect = textRect; |
|
4720 aIconRect = iconRect; |
|
4721 } |
4668 // ----------------------------------------------------------------------------- |
4722 // ----------------------------------------------------------------------------- |
4669 // CAknButton::TouchArea |
4723 // CAknButton::TouchArea |
4670 // Returns the button touchable area. |
4724 // Returns the button touchable area. |
4671 // ----------------------------------------------------------------------------- |
4725 // ----------------------------------------------------------------------------- |
4672 // |
4726 // |