webengine/wmlengine/src/gdi/include/GDIDevicecontext.h
changeset 0 dd21522fd290
--- /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 <AknUtils.h>
+#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