epoc32/include/mw/gulbordr.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #if !defined(__GULBORDR_H__)
    17 #define __GULBORDR_H__
    18 
    19 #if !defined(__E32DEF_H__)
    20 #include <e32def.h>
    21 #endif
    22 
    23 #if !defined(__GULDEF_H__)
    24 #include <guldef.h>
    25 #endif
    26 
    27 #if !defined(__GDI_H__)
    28 #include <gdi.h>
    29 #endif
    30 
    31 class TGulBorder
    32 /** Draws a border around a control.
    33 
    34 The rectangular areas enclosed by borders are typically working areas of the 
    35 graphics context so the class supplies a number of methods which describe 
    36 how it occupies the area.
    37 
    38 A distinction between descriptive and logical borders is made. For descriptive 
    39 borders the appearance of the border is known and fixed. The type of border 
    40 drawn is determined by flags which describe how it is to be constructed. These 
    41 flags can be combined to achieve many different effects, and standard combinations 
    42 have been supplied (see the TBorderType enumeration). For logical borders 
    43 the use of the border is known and fixed but the appearance is not specified. 
    44 The appearance and sizing functions must be supplied in custom written code. 
    45 @publishedAll
    46 @released*/
    47     {
    48 public:
    49 	class TColors
    50 	/** Represents the colours used within the border and for the optional single pixel 
    51 	border outlines.
    52 
    53 	These colours are stored using TRgb values.
    54 
    55 	An object of this type can be populated using ColorUtils::GetRgbDerivedBorderColors().
    56 
    57 	The colours used inside the border are derived from iBack, the border's background 
    58 	colour, so that border colours can be lighter or darker shades of the colour 
    59 	used in the main body of the control they enclose. Different combinations 
    60 	of light and dark shades are used to draw opposite border sides, to achieve 
    61 	a raised or sunken effect. */
    62 		{
    63 	public:
    64 		IMPORT_C TColors();
    65 	public:	
    66 		/** The line colour.
    67 	
    68 		This is the colour used to draw the outlines on either side of the border. 
    69 		Not all border types have an outline. By default, KRgbBlack. */
    70 		TRgb iLine;
    71 		/** The background colour for the border. 
    72 	
    73 		The other colours used in the border are derived from this.
    74 	
    75 		By default, KRgbWhite. */
    76 		TRgb iBack;
    77 		/** The lightest colour. 
    78 	
    79 		By default, KRgbWhite. */
    80 		TRgb iLight;
    81 		/** The mid light colour. 
    82 	
    83 		This colour is midway between iBack and iLight. By default, KRgbWhite. */
    84 		TRgb iMidlight;
    85 		/** The mid dark colour. 
    86 	
    87 		This colour is midway between iBack and iDark. By default, KRgbDarkGray. */
    88 		TRgb iMid;
    89 		/** The darkest colour.
    90 	
    91 		By default, KRgbDarkGray. */
    92 		TRgb iDark;
    93 		/** Not used. */
    94 		TRgb iInternalBack;
    95 		};
    96 
    97 public:
    98 	/** Defines the border outline style. 
    99 
   100 	Note that not all border types have an outline. */
   101 	enum TOutlineStyle
   102 		{
   103 		/** The border has a single pixel outline, either solid (by default) or dotted. */
   104 		EWithOutline=0x01,
   105 		/** The border outline is drawn using a dotted pen. */
   106 		EDottedOutline=0x02
   107 		};
   108 
   109 	/** Defines whether or not the border has a single pixel interior border. 
   110 
   111 	By default it does not. */
   112 	enum TInlineStyle
   113 		{
   114 		/** The border has an interior border. */
   115 		EWithInline=0x04
   116 		};
   117 
   118 	/** Defines the 3D border style. */
   119 	enum T3DStyle
   120 		{
   121 		/** A flat border. */
   122 		EFlat=0x10,
   123 		/** A 3D effect sunken border. */
   124 		ESunken=0x20,
   125 		/** A 3D effect raised border. */
   126 		ERaised=0x40
   127 		};
   128 
   129 	/** Defines the border's construction style. */
   130 	enum TConstructionStyle
   131 		{
   132 		/** One step border construction. 
   133 	
   134 		This type of border is drawn using the mid light and mid dark colours on opposite 
   135 		sides of the border. */
   136 		EOneStep=0x100,
   137 		/** Two step border construction.
   138 	
   139 		This type of border uses light and dark colours for the main border frame 
   140 		(or mid light for the flat border), and an additional half frame using mid 
   141 		light or mid dark colours. */
   142 		ETwoStep=0x200,
   143 		/** Three step border construction. 
   144 	
   145 		This type of border is drawn with an outer frame, a repeating one pixel band 
   146 		in mid tones, and an inner frame. */
   147 		EThreeStep=0x400,
   148 		/** Inverted two step border construction. 
   149 	
   150 		This is the same as ETwoStep except that for raised and sunken borders, the 
   151 		additional half frame is drawn on the opposite side to that used in ETwoStep. */
   152 		EInvertedTwoStep=0x800
   153 		};
   154 
   155 	/** Defines the number of pixels to add to the border thickness.
   156 
   157 	The border thickness is the central part of the border, coloured in the mid-tone 
   158 	highlights and lowlights.
   159 
   160 	For two step-constructed borders, the additional pixels are only added to 
   161 	either the top left or bottom right hand sides. */
   162 	enum TThickness
   163 		{
   164 		/** The border has one extra pixel. */
   165 		EAddOnePixel=0x1000,
   166 		/** The border has two extra pixels. */
   167 		EAddTwoPixels=0x2000,
   168 		/** The border has four extra pixels. */
   169 		EAddFourPixels=0x4000
   170 		};
   171 
   172 	/** Defines the number of pixels that are removed to produce rounded corners. */
   173 	enum TRounding
   174 		{
   175 		/** Border rounded by removing one extra pixel. */
   176 		EAddOneRoundingPixel=0x10000,
   177 		/** Border rounded by removing two extra pixels. */
   178 		EAddTwoRoundingPixels=0x20000,
   179 		/** Border rounded by by removing four extra pixels. */
   180 		EAddFourRoundingPixels=0x40000
   181 		};
   182 private:
   183 	enum TNull
   184 		{
   185 		ENoBorder=0x00
   186 		};
   187 
   188 	enum TLegacyStyle
   189 		{
   190 		EShallow=EAddOnePixel,
   191 		EDeep=EAddTwoPixels,
   192 		EThick=EAddFourPixels,
   193 		EHorizontal=0x100000,
   194 		EWithOverlap=0x200000,
   195 		EGray=0x400000,
   196 		EBlack=0x80000
   197 		};
   198 
   199 	enum TLogicalStyle
   200 		{
   201 		ELogical=0x800000
   202 		};
   203 public:
   204 	/** For logical borders, defines whether the border encloses a window, a container 
   205 	control or a control. */
   206 	enum TLogicalFamily
   207 		{
   208 		/** Logical border around a window. */
   209 		EWindowFamily=ELogical|0x1,
   210 		/** Logical border around a container. */
   211 		EContainerFamily=ELogical|0x2,
   212 		/** Logical border around a control. */
   213 		EControlFamily=ELogical|0x3
   214 		};
   215 public:
   216 	/** Defines the descriptive border types. */
   217 	enum TBorderType
   218 		{
   219 		/** No border. */
   220 		ENone=ENoBorder,
   221 		/** Border is a 1 pixel wide grey outline. */
   222 		ESingleGray=EWithOutline|EGray,
   223 		/** Border is a 1 pixel wide black outline. */
   224 		ESingleBlack=EWithOutline|EBlack,
   225 		/** Border is a 1 pixel wide dotted outline. */
   226 		ESingleDotted=EWithOutline|EDottedOutline,
   227 		/** A 3D raised border, with 1 pixel thickness. */
   228 		EShallowRaised=ERaised|EOneStep|EAddOnePixel,
   229 		/** A 3D sunken border, with 1 pixel thickness. */
   230 		EShallowSunken=ESunken|EOneStep|EAddOnePixel,
   231 		/** A 3D raised border, with outline, and 2 pixel thickness. */
   232 		EDeepRaised=EWithOutline|ERaised|EOneStep|EAddTwoPixels,
   233 		/** The same as EDeepRaised. */
   234 		EDeepRaisedWithOutline=EWithOutline|ERaised|EOneStep|EAddTwoPixels,
   235 		/** A 3D sunken border, with outline, and 2 pixel thickness. */
   236 		EDeepSunken=EWithOutline|ESunken|EOneStep|EAddTwoPixels,
   237 		/** The same as EDeepSunken. */
   238 		EDeepSunkenWithOutline=EWithOutline|ESunken|EOneStep|EAddTwoPixels,
   239 		/** A 3D raised border, with outline, and 3 pixel thickness. */
   240 		EThickDeepRaisedWithOutline=EWithOutline|ERaised|EOneStep|EAddOnePixel|EAddTwoPixels, 
   241 		/** A 3D raised border, with 2 pixels thickness and no outline on the left and 
   242 		right hand sides. */
   243 		EVerticalBar=ERaised|EOneStep|EAddTwoPixels|EWithOverlap,
   244 		/** A 3D raised border, with 2 pixels thickness and no outline on the top and bottom. */
   245 		EHorizontalBar=ERaised|EOneStep|EAddTwoPixels|EHorizontal|EWithOverlap
   246 		};
   247 
   248 	/** Defines the logical border types. */
   249 	enum TLogicalType
   250 		{
   251 		// Window family
   252 		/** Raised border around a window. */
   253 		EWindow=EWindowFamily|ERaised,
   254 		// Container family
   255 		/** Flat border around a container. */
   256 		EFlatContainer=EContainerFamily|EFlat,
   257 		/** Raised border around a container. */
   258 		ERaisedContainer=EContainerFamily|ERaised,
   259 		/** Sunken border around a container. */
   260 		ESunkenContainer=EContainerFamily|ESunken,
   261 		// Control Family
   262 		/** Flat border around a control. */
   263 		EFlatControl=EControlFamily|EFlat,
   264 		/** Raised border around a control. */
   265 		ERaisedControl=EControlFamily|ERaised,
   266 		/** Sunken border around a control. */
   267 		ESunkenControl=EControlFamily|ESunken,
   268 		/** Raised border around a control with focus. */
   269 		EFocusedRaisedControl=EControlFamily|ERaised|0x100,
   270 		/** Sunken border around a control with focus. */
   271 		EFocusedSunkenControl=EControlFamily|ESunken|0x100
   272 		};
   273 
   274 public:
   275     IMPORT_C TGulBorder();
   276     IMPORT_C TGulBorder(TBorderType aType);
   277     IMPORT_C TGulBorder(TBorderType aType,TGulAdjacent aAdjacent);
   278 	IMPORT_C TGulBorder(TInt aType);
   279     IMPORT_C TGulBorder(TInt aType,TGulAdjacent aAdjacent);
   280 	IMPORT_C void Draw(CGraphicsContext& aGc,const TRect& aRect,const TColors& aBorderColors) const;
   281    	IMPORT_C void Draw(CGraphicsContext& aGc,const TRect& aRect) const;
   282 	IMPORT_C TRect InnerRect(const TRect& aOuterRect) const;
   283    	IMPORT_C TRect OuterRect(const TRect& aInnerRect) const;
   284 	IMPORT_C void SetType(TInt aType);
   285 	IMPORT_C void SetAdjacent(TInt aAdjacent);
   286 	IMPORT_C TSize SizeDelta() const;
   287    	IMPORT_C TMargins Margins() const;
   288 	IMPORT_C TBool HasBorder() const;
   289 	IMPORT_C TInt Adjacent() const;	
   290 	IMPORT_C TInt Type() const;
   291 public:	// Internal to Symbian
   292 	IMPORT_C TInt Thickness() const;
   293 	IMPORT_C TInt Rounding() const;
   294 private:
   295 	TBool IsSunken() const;
   296 	TInt Depth() const;
   297 	void DrawOutline(CGraphicsContext& aGc,const TRect& aRect,TRgb aColor) const;
   298 	void DrawRectOutline(CGraphicsContext& aGc,const TRect& aRect) const;
   299 	void DrawInline(CGraphicsContext& aGc,const TRect& aRect,TRgb aColor) const;
   300 	TMargins OutlineMargins() const;
   301 	TMargins BorderMargins() const;
   302 	TMargins InlineMargins() const;
   303 	TRect OutlineInnerRect(const TRect& aOuterRect) const;
   304 	TRect BorderInnerRect(const TRect& aOuterRect) const;
   305 	TInt BorderRounding() const;
   306 	TInt InlineRounding() const;
   307 	void DrawOneStep(CGraphicsContext& aGc,const TRect& aRect,TRgb aMidlight,TRgb aMid) const;
   308 	void DrawTwoStep(CGraphicsContext& aGc,const TRect& aRect,TRgb aLight,TRgb aMidlight,TRgb aMid,TRgb aDark) const;
   309 	void DrawInvertedTwoStep(CGraphicsContext& aGc,const TRect& aRect,TRgb aLight,TRgb aMidlight,TRgb aMid,TRgb aDark) const;
   310 	void DrawThreeStep(CGraphicsContext& aGc,const TRect& aRect,TRgb aBack,TRgb aLight,TRgb aMidlight,TRgb aMid,TRgb aDark) const;
   311 	void DrawTopLeft(CGraphicsContext& aGc,const TRect& aRect,TRgb aColor,const TInt aRounding) const;
   312 	void DrawRoundedTopLeft(CGraphicsContext& aGc,const TRect& aRect,const TInt aRounding) const;
   313 	void DrawBottomRight(CGraphicsContext& aGc,const TRect& aRect,TRgb aColor,const TInt aRounding) const;
   314 	void DrawRoundedBottomRight(CGraphicsContext& aGc,const TRect& aRect,const TInt aRounding) const;
   315 	void DrawRoundedCorner(CGraphicsContext& aGc,const TPoint& aStart,const TInt aRoundedLength, const TBool aUp, const TBool aRight) const;
   316 	TInt RoundingMargin(const TInt aRoundedLength) const;
   317 	inline TInt InternalType() const;
   318 	void TranslateLegacyTypes();
   319 private:
   320     TInt iType;
   321     };
   322 
   323 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
   324 #include <graphics/uigraphicsutils/gullogicalborder.h>
   325 #endif
   326 
   327 #endif