--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/uiklaf/src/LAFCMBUT.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,419 @@
+/*
+* Copyright (c) 1997-1999 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:
+*
+*/
+
+
+#include <gulbordr.h>
+#include <gulutil.h>
+#include <gdi.h>
+#include <gulcolor.h>
+#include <coecntrl.h>
+
+#include "LAFSTD.H"
+#include "LAFCMBUT.H"
+#include <uiklaf/private/lafenv.h>
+#include "lafcommn.h"
+#include "uikon.hrh"
+#include <eikon.hrh>
+#include "lafpublc.h"
+
+
+const TInt KPressedDepth=2;
+const TInt KSetDepth=1;
+const TInt KImageMargin=0;
+const TInt KLabelMargin=0;
+const TInt KIntraComponentMargin=2;
+
+const TInt KCommandButtonBaseHorizontalMargins=KPressedDepth; //deals with command,twopicturecommand & invertercommand buttons
+const TInt KCommandButtonBaseVerticalMargins=KPressedDepth; //deals with command,twopicturecommand & invertercommand buttons
+const TInt KBitmapButtonHorizontalMargins=2;
+const TInt KBitmapButtonVerticalMargins=2;
+const TInt KTextButtonHorizontalMargins=2;
+const TInt KTextButtonVerticalMargins=2;
+
+// The border types for the above set and pressed depths
+const TInt KBorderClear =TGulBorder::EDeepRaised;
+const TInt KBorderClearPressed =TGulBorder::EDeepSunken;
+const TInt KBorderSet =TGulBorder::EDeepSunken;
+const TInt KBorderSetPressed =TGulBorder::EDeepSunken;
+
+
+//
+// Class LafCommandButtonBase
+//
+
+/**
+ * Gets the default border for the matched control in aBorder. Called from the constructor of the matched control.
+ */
+EXPORT_C void LafCommandButtonBase::GetDefaultBorder(TGulBorder& aBorder)
+ {
+ aBorder=KBorderClear;
+ }
+
+/**
+ * Gets the set of border colors for the matched control in aBorderColors. The RGB values of the colors obtained
+ * may depend on the the display mode, the environment color list and the instance of the
+ * matched control aMatchedControl. Called by the matched control from its Draw() method and passed on to the
+ * Draw() method of TGulBorder.
+ */
+EXPORT_C void LafCommandButtonBase::GetBorderColors(TGulBorder::TColors& aBorderColors,const MLafEnv& aLafEnv,const CCoeControl& aMatchedControl)
+ {
+ LafCommonUtils::GetRgbDerivedBorderColors( aBorderColors,
+ EColorButtonFaceClear, aLafEnv,aMatchedControl );
+ }
+
+/**
+ * Gets the border appropriate for the behavior (including default buttons) and state of the control.
+ */
+EXPORT_C void LafCommandButtonBase::GetBorder(TGulBorder& aBorder, TInt aDrawState,
+ TInt aFlags,const CCoeControl& /*aButtonBase*/,
+ const TBool /*aIsDefaultButton*/)
+ {
+ TInt borderType = TGulBorder::ENone;
+
+ if (aFlags&EEikButLatches)
+ {
+ switch (aDrawState)
+ {
+ case SLafButtonBase::EDrawClear:
+ borderType = KBorderClear;
+ break;
+ case SLafButtonBase::EDrawClearPressed:
+ borderType = KBorderClearPressed;
+ break;
+ case SLafButtonBase::EDrawSet:
+ borderType = KBorderSet;
+ break;
+ case SLafButtonBase::EDrawSetPressed:
+ borderType = KBorderSetPressed;
+ break;
+ default:
+ __ASSERT_DEBUG(EFalse,Panic(ELafPanicConstantNotKnown));
+ break;
+ }
+ }
+ else
+ {
+ switch (aDrawState)
+ {
+ case SLafButtonBase::EDrawSetPressed:
+ borderType = KBorderSetPressed;
+ break;
+ case SLafButtonBase::EDrawClear:
+ borderType = KBorderClear;
+ break;
+ case SLafButtonBase::EDrawClearPressed:
+ case SLafButtonBase::EDrawSet:
+ borderType = KBorderSet;
+ break;
+ default:
+ __ASSERT_DEBUG(EFalse,Panic(ELafPanicConstantNotKnown));
+ break;
+ }
+ }
+
+ aBorder.SetType(borderType);
+ }
+
+EXPORT_C TInt LafCommandButtonBase::ComponentOffset(TInt aDrawState, TInt aFlags)
+ {
+ TInt pos = 0;
+ if (aFlags&EEikButLatches)
+ {
+ switch (aDrawState)
+ {
+ default:
+ case SLafButtonBase::EDrawClear:
+ break;
+ case SLafButtonBase::EDrawClearPressed:
+ pos = KPressedDepth;
+ break;
+ case SLafButtonBase::EDrawSet:
+ pos = KSetDepth;
+ break;
+ case SLafButtonBase::EDrawSetPressed:
+ pos = KPressedDepth;
+ break;
+ }
+ }
+ else
+ {
+ switch (aDrawState)
+ {
+ case SLafButtonBase::EDrawSetPressed:
+ pos = KPressedDepth;
+ break;
+ default:
+ case SLafButtonBase::EDrawClear:
+ break;
+ case SLafButtonBase::EDrawClearPressed:
+ case SLafButtonBase::EDrawSet:
+ pos = KSetDepth;
+ break;
+ }
+ }
+ return pos;
+ }
+
+
+/**
+ * Prepares the basic graphic contents according to the the type of command
+ * button, e.g. pen and brush colors.
+ *
+ * @since ER5U
+ */
+EXPORT_C void LafCommandButtonBase::PrepareContext(CWindowGc& aGc,TInt aDrawState,
+ const MLafEnv& aLafEnv,
+ const CCoeControl& aButtonBase)
+ {
+ aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+ TRgb penColor;
+ TRgb brushColor;
+ switch (aDrawState)
+ {
+ case SLafButtonBase::EDrawSet:
+ penColor=aLafEnv.ControlColor(EColorButtonTextPressed,aButtonBase);
+ brushColor=aLafEnv.ControlColor(EColorButtonFaceSet,aButtonBase);
+ break;
+ case SLafButtonBase::EDrawClearPressed:
+ penColor=aLafEnv.ControlColor(EColorButtonTextPressed,aButtonBase);
+ brushColor=aLafEnv.ControlColor(EColorButtonFaceClearPressed,aButtonBase);
+ break;
+ case SLafButtonBase::EDrawClear:
+ penColor=aLafEnv.ControlColor(EColorButtonText,aButtonBase);
+ brushColor=aLafEnv.ControlColor(EColorButtonFaceClear,aButtonBase);
+ break;
+ case SLafButtonBase::EDrawSetPressed:
+ penColor=aLafEnv.ControlColor(EColorButtonText,aButtonBase);
+ brushColor=aLafEnv.ControlColor(EColorButtonFaceSetPressed,aButtonBase);
+ break;
+ default:
+ __ASSERT_DEBUG(EFalse,Panic(ELafPanicConstantNotKnown));
+ break;
+ }
+ aGc.SetPenColor(penColor);
+ aGc.SetBrushColor(brushColor);
+ }
+
+/**
+ * Prepares the graphics context, picks the appropriate border colors, sets up internal rectangles
+ * and draws border and internal controls. Also facilitates different drawing of selected buttons
+ * and buttons with default focus.
+ */
+EXPORT_C void LafCommandButtonBase::Draw(const MLafEnv& aLafEnv, const CCoeControl& aMatchedControl,
+ CWindowGc& aGc,
+ const TGulBorder& aBorder,
+ TInt aDrawOffset,TInt aDrawState,
+ TMargins8 aMargins,
+ TBool /*aIsDefaultButton*/)
+ {
+ PrepareContext(aGc,aDrawState,aLafEnv,aMatchedControl);
+ TGulBorder::TColors borderColors;
+ GetBorderColors(borderColors,aLafEnv, aMatchedControl);
+ const TRect rect(aMatchedControl.Rect());
+ aBorder.Draw(aGc, rect, borderColors);
+
+ const TRect outerRect(aBorder.InnerRect(rect));
+ TRect innerRect(outerRect);
+
+ innerRect.SetRect(innerRect.iTl.iX+aMargins.iLeft+1,innerRect.iTl.iY+aMargins.iTop+1,
+ innerRect.iBr.iX-aMargins.iRight-1,innerRect.iBr.iY-aMargins.iBottom-1);
+ innerRect.Move(aDrawOffset,aDrawOffset);
+ innerRect.iBr.iX-=1;
+ innerRect.iBr.iY-=1;
+
+ DrawUtils::ClearBetweenRects(aGc,outerRect,innerRect);
+
+ if(aMatchedControl.IsFocused())
+ DrawSelection(aBorder,rect,aGc);
+ }
+
+EXPORT_C void LafCommandButtonBase::GetColorUseListL(CArrayFix<TCoeColorUse>& aColorUseList)
+ { // static
+ TInt commonAttributes = TCoeColorUse::ESurrounds|TCoeColorUse::ENeutral;
+ TCoeColorUse colorUse;
+
+ colorUse.SetLogicalColor(EColorButtonText);
+ colorUse.SetUse(TCoeColorUse::EFore|TCoeColorUse::EActive|TCoeColorUse::ENormal|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorButtonFaceClear);
+ colorUse.SetUse(TCoeColorUse::EBack|TCoeColorUse::EActive|TCoeColorUse::ENormal|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorButtonTextPressed);
+ colorUse.SetUse(TCoeColorUse::EFore|TCoeColorUse::EPressed|TCoeColorUse::ENormal|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorButtonFaceClearPressed);
+ colorUse.SetUse(TCoeColorUse::EBack|TCoeColorUse::EPressed|TCoeColorUse::ENormal|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorButtonFaceSet);
+ colorUse.SetUse(TCoeColorUse::EBack|TCoeColorUse::EActive|TCoeColorUse::ESet|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorButtonFaceSetPressed);
+ colorUse.SetUse(TCoeColorUse::EBack|TCoeColorUse::EPressed|TCoeColorUse::ESet|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+
+ colorUse.SetLogicalColor(EColorLabelDimmedText);
+ colorUse.SetUse(TCoeColorUse::EFore|TCoeColorUse::EPressed|TCoeColorUse::ESet|commonAttributes);
+ aColorUseList.AppendL(colorUse);
+ }
+
+/**
+ * Draws a dashed rectangle inside the button.
+ *
+ * @since ER5U
+ */
+void LafCommandButtonBase::DrawSelection(const TGulBorder& aBorder,const TRect& aRect,
+ CWindowGc& aGc)
+ {
+ aGc.SetPenStyle(CGraphicsContext::EDashedPen);
+ TRect innerRect=aBorder.InnerRect(aRect);
+// innerRect.Shrink(1,1);
+ TInt offset=2;
+ innerRect.iTl.iX += 1;
+ innerRect.iTl.iY += 1;
+ innerRect.iBr.iX -= offset;
+ innerRect.iBr.iY -= offset;
+ TPoint posTl=innerRect.iTl;
+ TPoint posBr=innerRect.iBr;
+ aGc.DrawLine(posTl,TPoint(posBr.iX+1,posTl.iY));
+ aGc.DrawLine(posBr,TPoint(posBr.iX,posTl.iY));
+ aGc.DrawLine(posTl,TPoint(posTl.iX,posBr.iY));
+ aGc.DrawLine(posBr,TPoint(posTl.iX-1,posBr.iY));
+ aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+ }
+
+/**
+ * @internal
+ */
+EXPORT_C TInt LafCommandButtonBase::Constant(TConstantType aConstant)
+ {// static
+ TInt retValue = 0;
+ switch (aConstant)
+ {
+ case EImageMargin:
+ retValue = KImageMargin;
+ break;
+ case ELabelMargin:
+ retValue = KLabelMargin;
+ break;
+ case EIntraComponentMargin:
+ retValue = KIntraComponentMargin;
+ break;
+ default:
+ __ASSERT_DEBUG(EFalse, Panic(ELafPanicConstantNotKnown));
+ break;
+ }
+ return retValue;
+ }
+
+//
+// Class LafCommandButton
+//
+EXPORT_C TMargins8 LafCommandButton::Margins()
+ {
+ TMargins8 margins;
+ margins.iTop =KCommandButtonBaseVerticalMargins;
+ margins.iBottom =KCommandButtonBaseVerticalMargins;
+ margins.iLeft =KCommandButtonBaseHorizontalMargins;
+ margins.iRight =KCommandButtonBaseHorizontalMargins;
+ return margins;
+ }
+
+
+//
+// Class LafTwoPictureCommandButton
+//
+EXPORT_C TMargins8 LafTwoPictureCommandButton::Margins()
+ {
+ TMargins8 margins;
+ margins.iTop =KCommandButtonBaseVerticalMargins;
+ margins.iBottom =KCommandButtonBaseVerticalMargins;
+ margins.iLeft =KCommandButtonBaseHorizontalMargins;
+ margins.iRight =KCommandButtonBaseHorizontalMargins;
+ return margins;
+ }
+
+
+//
+// Class LafInverterCommandButton
+//
+EXPORT_C TMargins8 LafInverterCommandButton::Margins()
+ {
+ TMargins8 margins;
+ margins.iTop =KCommandButtonBaseVerticalMargins;
+ margins.iBottom =KCommandButtonBaseVerticalMargins;
+ margins.iLeft =KCommandButtonBaseHorizontalMargins;
+ margins.iRight =KCommandButtonBaseHorizontalMargins;
+ return margins;
+ }
+
+
+//
+// Class LafBitmapButton
+//
+EXPORT_C TMargins8 LafBitmapButton::Margins()
+ {
+ TMargins8 margins;
+ margins.iTop =KBitmapButtonVerticalMargins;
+ margins.iBottom =KBitmapButtonVerticalMargins;
+ margins.iLeft =KBitmapButtonHorizontalMargins;
+ margins.iRight =KBitmapButtonHorizontalMargins;
+ return margins;
+ }
+
+//
+// Class LafTextButton
+//
+EXPORT_C TMargins8 LafTextButton::Margins()
+ {
+ TMargins8 margins;
+ margins.iTop =KTextButtonVerticalMargins;
+ margins.iBottom =KTextButtonVerticalMargins;
+ margins.iLeft =KTextButtonHorizontalMargins;
+ margins.iRight =KTextButtonHorizontalMargins;
+ return margins;
+ }
+
+//
+// Class LafTwoPictureCommandButton
+//
+
+/**
+ * Gets the default border for the matched control in aBorder. Called from the constructor of the matched control.
+ */
+EXPORT_C void LafTwoPictureCommandButton::GetDefaultBorder(TGulBorder& aBorder)
+ {
+ aBorder=TGulBorder(TGulBorder::ENone);
+ }
+
+/**
+ * Gets the set of border colors for the matched control in aBorderColors. The RGB values of the colors obtained
+ * may depend on the the display mode, the environment color list and the instance of the
+ * matched control aMatchedControl. Called by the matched control from its Draw() method and passed on to the
+ * Draw() method of TGulBorder.
+ */
+EXPORT_C void LafTwoPictureCommandButton::GetBorderColors(TGulBorder::TColors& aBorderColors, const MLafEnv& aLafEnv, const CCoeControl& aMatchedControl)
+ {
+ LafCommonUtils::GetRgbDerivedBorderColors( aBorderColors,
+ EColorButtonFaceClear, aLafEnv,aMatchedControl );
+ }
+
+