diff -r 000000000000 -r dd21522fd290 webengine/wmlengine/src/gdi/include/GDIDevicecontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/gdi/include/GDIDevicecontext.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,685 @@ +/* +* Copyright (c) 2003-2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: gdi interface +* +*/ + + +#ifndef _GDIDEVICECONTEXT_H +#define _GDIDEVICECONTEXT_H + +// INCLUDES +#include +#include "nw_object_dynamic.h" +#include "GDIFont.h" +#include "BrsrTypes.h" +#include "BrsrStatusCodes.h" + +// CONSTANTS +enum TGDIDeviceContextFontSizeLevel + { + EGDIDeviceContextFontSizeLevelAllSmall, + EGDIDeviceContextFontSizeLevelSmaller, + EGDIDeviceContextFontSizeLevelNormal, + EGDIDeviceContextFontSizeLevelLarger, + EGDIDeviceContextFontSizeLevelAllLarge + }; + +// fonts to be created : italic12, bold-italic12, plain13, italic13, +// bold-italic13, plain17, italic17, bold-italic17 +const TInt8 KNumberOfFonts = 8; + +// Browser specific font types +// +enum TGDIDeviceContextFontNames + { + ELatinItalic12, + ELatinBoldItalic12, + ELatinPlain13, + ELatinItalic13, + ELatinBoldItalic13, + ELatinPlain17, + ELatinItalic17, + ELatinBoldItalic17 + }; + +enum TGDISupportedLanguage + { + EElafLanguage, + EThaiLanguage, + EJapaneseLanguage, + EChinesePRCLanguage, + EChinaHKTWLanguage + }; + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* CGDIDeviceContext +* +* @lib BrowserEngine.dll +* @since 2.1 +*/ +class CGDIDeviceContext : public CBase +{ + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @return CGDIDeviceContext* + */ + static CGDIDeviceContext* NewL( void* aGraphicsContext, CView* aOocEpoc32View ); + + /** + * Destructor. + */ + virtual ~CGDIDeviceContext(); + + public: // New functions + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void DrawImage( const NW_GDI_Point2D_t* aLocation, + const NW_GDI_Rectangle_t* aRectangle, + NW_GDI_ImageBlock_t* aImageBlock ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode ScaleImage( const NW_GDI_Dimension3D_t* aSize, + const NW_GDI_ImageBlock_t* aImageBlock, + NW_GDI_ImageBlock_t* aScaledImageBlock ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void DrawPixel( const NW_GDI_Point2D_t* aLocation ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode DrawPolyline( NW_GDI_Metric_t aNumPoints, + const NW_GDI_Point2D_t* aPoints, + TBool aClosed ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void DrawRectangle( const NW_GDI_Rectangle_t* aRectangle ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + + TBrowserStatusCode DrawText( const NW_GDI_Point2D_t* aLocation, + const NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aSpacing, + NW_GDI_TextDecoration_t aDecoration, + NW_GDI_FlowDirection_t aDir, + NW_GDI_Metric_t aWidth ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void FillRectangle( const NW_GDI_Rectangle_t* aRectangle ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode GetColorPalette( NW_GDI_ColorPalette_t* aColPalette ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Color_t BackgroundColor () const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Rectangle_t ClipRect () const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + const NW_GDI_Rectangle_t* DisplayBounds () const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TUint8 DisplayDepth() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Pattern_t FillPattern() const; + + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode GetFlowDirection( NW_Text_t* aText, + NW_GDI_FlowDirection_t* aFlowDirection) const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Color_t ForegroundColor() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Pattern_t LinePattern() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Metric_t LineWidth() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + const NW_GDI_Point2D_t* Origin() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_PaintMode_t PaintMode() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void* GetScaledCFont( CGDIFont* aFont ) const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_TextDirection_t TextDirection() const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode GetTextExtent( const NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_GDI_Dimension2D_t* aExtent) const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void PreDraw(); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void PostDraw( TBool aDrawNow ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetBackgroundColor( NW_GDI_Color_t aColor ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetClipRect( const NW_GDI_Rectangle_t* aClipRect ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetFillPattern( NW_GDI_Pattern_t aFillPattern ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetForegroundColor( NW_GDI_Color_t aColor ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetLinePattern( NW_GDI_Pattern_t aLinePattern ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetLineWidth( NW_GDI_Metric_t aLineWidth ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetOrigin( const NW_GDI_Point2D_t* aOrigin ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetPaintMode( NW_GDI_PaintMode_t aPaintMode ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetTextDirection( NW_GDI_TextDirection_t aTextDirection ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetDisplayBounds( const NW_GDI_Rectangle_t* aDisplaybounds ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + CGDIFont* CreateFont( const NW_Text_t* aFamily, + TGDIFontStyle aStyle, + TUint8 aSizeInPixels, + TUint16 aWeight, + TGDIFontVariant aVariant) const; + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void DrawLine( NW_GDI_Point2D_t aStartPoint, NW_GDI_Point2D_t aEndPoint ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBool SetFontSizeLevel(); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void ChangeFontSize( CGDIFont* aFont ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void GetHighlightColor( NW_GDI_Color_t* aColor ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SwitchAgainstBG( NW_GDI_Color_t* aColor ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode SplitText( NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aConstraint, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_Text_Length_t* aLength, + TUint8 aMode ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode GetSubstringExtent( const NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_Text_Length_t aStart, + NW_Text_Length_t aLength, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_GDI_Dimension2D_t* aExtent ); + + /** + * This method + * @since 2.1 + * @param TFontSpec which specifies the font family and the height of the font + * the caller of this method wishes to find. + * @return pointer to a CFont object which will have been found in the iFontCache + * or have been created if the font was not already in the cache + */ + CFont* FindFont( TFontSpec aFontSpec ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetRemoveNbsp( TBool aFlag ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBool RemoveNbsp(); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetGraphicsContext( void* aGraphicsContext ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void SetFontSizeLevel( TGDIDeviceContextFontSizeLevel aFontSizeLevel ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + EVariantFlag VariantFlag(); + + /** + * This method + * @since 2.x + * @param + * @return + */ + inline CWsScreenDevice* WsScreenDevice() { return iWsScreenDev; }; + + /** + * This method + * @since 2.x + * @param + * @return + */ + TGDISupportedLanguage SupportedLanguage(); + + private: // New functions + + /** + * C++ default constructor. + */ + CGDIDeviceContext(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + TBrowserStatusCode ConstructL( void* aGraphicsContext, CView* aOocEpoc32View ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + NW_GDI_Color_t SwapColorBytes( NW_GDI_Color_t aColor ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + CBitmapContext* Epoc32GraphicsContext(); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode WordWrap ( NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aConstraint, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_Text_Length_t* aLength ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode SplitAtNewline ( NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aCconstraint, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_Text_Length_t* aLength ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode Truncate ( NW_Text_t* aText, + CGDIFont* aGDIFont, + NW_GDI_Metric_t aConstraint, + NW_GDI_Metric_t aSpacing, + NW_GDI_FlowDirection_t aFlowDirection, + NW_Text_Length_t* aLength ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + TBrowserStatusCode ScaleBitmap( CFbsBitmap* aBitmap, + CFbsBitmap** aScaledBitmap, + TRect* aRect ); + + /** + * This method + * @since 2.1 + * @param + * @return + */ + void InitializeGraphicsContext(); + + /** + * Checks whether or not a line split (word wrap) can occur between the two + * characters specified. + * @since 2.6 + * @param aChar1 First character. + * @param aChar2 Second character. + * @return ETrue if split can occur between the two characters; else, EFalse. + */ + TBool CanSplit(TText16 aChar1, TText16 aChar2); + + /** + * Checks whether or not the two consecutive characters are within a single + * Thai script "cell". + * @since 2.6 + * @param aChar1 First character. + * @param aChar2 Second character. + * @return ETrue if is in a single Thai script "cell"; else, EFalse. + */ + TBool + IsThaiCell( TText16 aChar1, TText16 aChar2 ); + + + private: // Data + + // + EVariantFlag iVariantFlag; + // + CFontCache* iFontCache; + // + CWsScreenDevice* iWsScreenDev; + // used for removing nbsp in vertical-layout mode + TBool iRemoveNbsp; + // is a CBitmapContext* + void* iGraphicsContext; + // + NW_GDI_Point2D_t iOrigin; + // + TGDIDeviceContextFontSizeLevel iFontSizeLevel; + // + NW_GDI_Pattern_t iFillPattern; + // + NW_GDI_Pattern_t iLinePattern; + // + NW_GDI_Metric_t iLineWidth; + // + NW_GDI_PaintMode_t iPaintMode; + // + NW_GDI_TextDirection_t iTextDirection; + // + NW_GDI_Color_t iForegroundColor; + // + NW_GDI_Color_t iBackgroundColor; + // + NW_GDI_Rectangle_t iDisplayBounds; + // + NW_GDI_Rectangle_t iClipRect; + // + CView* iOocEpoc32View; + // + NW_Int32 iResourceFileOffset; + // + TGDISupportedLanguage iSupportedLanguage; +}; + +#endif // _GDIDEVICECONTEXT_H