javauis/lcdui_akn/lcdgr/inc/LcdGraphics.h
branchRCL_3
changeset 26 2455ef1f5bbc
parent 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdgr/inc/LcdGraphics.h	Wed Sep 01 12:33:18 2010 +0100
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+#ifndef LCDGRAPHICS_H
+#define LCDGRAPHICS_H
+
+#include <lcdui.h>
+#include <reflcdui.h>   // for direct container/content
+#include <lcdgr.h>
+#include <lcdgdrv.h>
+#include "LcdSurface.h"
+
+#ifdef __SERIES60_
+#include <AknPictographInterface.h>
+#include <AknPictographDrawerInterface.h>
+
+class CMIDPictograph;
+#endif
+
+class CCoeControl;
+class CFbsBitmap;
+class CLcdImage;
+class CLcdGraphicsDriver;
+
+TBool IsStronglyRightToLeft(const TDesC& aText);
+void  ArcVectors(TPoint& aStart, TPoint& aEnd, const TRect& aRect, TInt aStartAngle, TInt aArcAngle);
+
+/**
+ * Native peer to javax.microedition.lcdui.Graphics.
+ */
+NONSHARABLE_CLASS(CLcdGraphics) : public CBase
+{
+public:
+    static CLcdGraphics* NewL(CLcdGraphicsDriver& aDriver, CCoeControl& aWindow, MDirectContainer& aContainer, TBool aUpdate);
+    static CLcdGraphics* NewL(CLcdGraphicsDriver& aDriver, const CFbsBitmap* aBitmap);
+
+    /**
+     * function takes ownership of aSurface - do not push aSurface onto cleanup stack
+     */
+    static CLcdGraphics* NewL(CLcdGraphicsDriver& aDriver, CLcdSurface* aSurface);
+
+    ~CLcdGraphics();
+
+    /**
+     * Prepare to draw
+     */
+    void Begin();
+
+    /**
+     * drawing complete.
+     */
+    void End();
+
+    /**
+     * flush drawing in rect at <CODE>aPosition</CODE> of size <CODE>aSize</CODE>
+     * (in device coords) to surface.
+     */
+    void Flush(const TPoint& aPosition, const TSize& aSize);
+
+    TUint32 QuantizeColor(TUint32 aColor);
+
+    void Reset(const TSize& aSize);
+
+    void SetColor(TUint32 aColor);
+    TUint32 Color() const;
+
+    void SetStrokeStyle(TStrokeStyle aStyle);
+    TStrokeStyle StrokeStyle() const;
+
+    void SetFont(TUint32 aFontID);
+
+    void SetClipRect(const TPoint& aPosition, const TSize& aSize);
+    const TRect& ClipRect() const;
+
+    void Translate(const TPoint& aPoint);
+    const TPoint& Origin() const;
+
+    void CopyArea(const TPoint& aPosition, const TSize& aSize, const TPoint& aPoint, TInt aAnchor);
+    void DrawLine(const TPoint& aStart, const TPoint& aEnd);
+    void DrawRect(const TPoint& aPosition, const TSize& aSize);
+    void FillRect(const TPoint& aPosition, const TSize& aSize);
+    void DrawRoundRect(const TPoint& aPosition, const TSize& aSize, const TSize& aCornerDiameter);
+    void FillRoundRect(const TPoint& aPosition, const TSize& aSize, const TSize& aCornerDiameter);
+    void DrawArc(const TPoint& aPosition, const TSize& aSize, TInt aStartAngle, TInt aAngle);
+    void FillArc(const TPoint& aPosition, const TSize& aSize, TInt aStartAngle, TInt aAngle);
+    void DrawText(const TDesC& aText, const TPoint& aPoint, TInt aAnchor);
+    void FillTriangle(const TPoint* aPoints);
+    TInt DrawPixels
+    (
+        TInt aType,
+        const TUint8* aAddress,
+        TInt    aLength,
+        TInt    aScanLength,
+        TBool   aAlpha,
+        const TPoint& aPosition,
+        const TSize& aSize,
+        TInt aTransform,
+        TBool aPremultiplied
+    );
+
+    /**
+     * Renders image
+     * @param aImage Source image
+     * @param aPoint Render point
+     * @param aAnchor Maps the render point, source image and render surface
+     * @param aPremultiplied If true then a target color channel is premultiplied with alpha value.
+     */
+    void DrawImage(const CLcdImage& aImage, const TPoint& aPoint, TInt aAnchor,
+                   TBool aPremultiplied = EFalse);
+    /**
+     * Renders image region
+     * @param aImage Source image
+     * @param aPoint Source point
+     * @param aRegion Source width and height
+     * @param aTransform Defines transform mode
+     * @param aPoint Render point
+     * @param aAnchor Maps the render point, region and render surface
+     * @param aPremultiplied If true then a target color channel is premultiplied with alpha value.
+     */
+    TInt DrawRegion(
+        const CLcdImage& aImage, const TPoint& aRegionPos, const TSize& aRegionSize,
+        TInt aTransform, const TPoint& aPoint, TInt aAnchor, TBool aPremultiplied = EFalse);
+
+    /**
+     * @see MMIDCanvas::DrawBackground()
+     * @since S60 5.0
+     */
+    void DrawBackground(MMIDCanvas* aCanvas, const TPoint& aPosition, const TSize& aSize);
+
+    /**
+     * Support for MMIDGraphics::Bitmap()/MMIDGraphics:Window().
+     *
+     *@return the drawing surface for this graphics instance.
+     */
+    CLcdSurface* Surface();
+
+#ifdef RD_JAVA_NGA_ENABLED
+    /**
+     * Copies graphics content
+     * @param aSrcGraphics The source graphics
+     * @return KErrNone if succeeded.
+     * @since S60 9.2
+     */
+    TInt CopyGraphics(CLcdGraphics* aSrcGraphics);
+
+    /**
+     * Gets current clip rectangle.
+     * @return The clip rectangle in user coordinates
+     * @since S60 9.2
+     */
+    inline TRect  CurrentClipRectInTargetCoords() const;
+
+    /**
+     * Gets current origin.
+     * @return The origin in user coordinates
+     * @since S60 9.2
+     */
+    inline TPoint CurrentOriginInTargetCoords() const;
+
+    /**
+     * Gets current font.
+     * @return The current font
+     * @since S60 9.2
+     */
+    inline CFont* CurrentFont() const;
+
+#endif // RD_JAVA_NGA_ENABLED
+
+    /**
+     * Sets the flag, which indicates that rendering target is framebuffer
+     * of CanavsGraphicsItem.
+     */
+    void SetCanvasGraphicsItemtarget(TBool aIsCanvasGraphicsItemTarget);
+
+private:
+    CLcdGraphics(CLcdGraphicsDriver& aDriver, CLcdSurface* aSurface);
+    void ConstructL();
+
+private:
+    enum TState
+    {
+        EPenOn      = 1,
+        EBrushOn    = 2,
+        EPenColor   = 4,
+        EBrushColor = 8
+    };
+
+private:
+    inline void SetPenOn();
+    inline void SetPenOff();
+    inline void SetBrushOn();
+    inline void SetBrushOff();
+    inline void LineMode();
+    inline void FillMode();
+    inline void OutlineMode();
+
+private:
+    CLcdGraphicsDriver& iLcdDriver;
+    CLcdGraphicsDevice* iLcdDevice;
+    TUint32             iLcdDrawCaps;
+
+#ifdef __SERIES60_
+    CMIDPictograph* iMIDPictograph;
+#endif
+
+    CLcdSurface*            iSurface;
+    TAcceleratedBitmapInfo  iBitmap;    // data owned by surface
+    TBitmapLockCount        iCount;
+    CBitmapContext*         iContext;   // owned by surface
+
+    TRect                   iDeviceBounds;      // surface drawable area in device coords
+    TRect                   iDeviceClipRect;    // clip rect in device coords
+    TPoint                  iDeviceOrigin;      // origin in device coords.
+
+    TInt                iState;
+    TStrokeStyle        iStrokeStyle;
+    TUint32             iColor;
+    CFont*              iFont;
+    TFontUnderline      iUnderline;
+    TRect               iClipRect;
+    TPoint              iOrigin;
+    TInt                iHeight;
+
+    // this flag indicates that rendering target is framebuffer of CanavsGraphicsItem
+    TBool  iIsCanvasGraphicsItemTarget;
+};
+
+/////////////////////////////////////////////////////////////
+// CMIDPictograph is for Pictograpgh in S60
+//
+////////////////////////////////////////////////////////////
+#ifdef __SERIES60_
+
+class CMIDPictograph : public CBase, public MAknPictographAnimatorCallBack
+{
+public:
+    static CMIDPictograph* NewL();
+
+    CAknPictographInterface* PictographInterface();
+
+    // From MAknPictographAnimatorCallBack
+    void DrawPictographArea();
+
+    virtual ~CMIDPictograph();
+protected:
+    CMIDPictograph();
+    void ConstructL();
+
+private:
+    CAknPictographInterface* iPictographInterface;
+};
+
+#endif // end of __SERIES60_
+
+#ifdef RD_JAVA_NGA_ENABLED
+// ---------------------------------------------------------------------------
+// CLcdGraphics::CurrentClipRectInTargetCoords
+// ---------------------------------------------------------------------------
+//
+inline TRect CLcdGraphics::CurrentClipRectInTargetCoords() const
+{
+    return iDeviceClipRect;
+}
+
+// ---------------------------------------------------------------------------
+// CLcdGraphics::CurrentOriginInTargetCoords
+// ---------------------------------------------------------------------------
+//
+inline TPoint CLcdGraphics::CurrentOriginInTargetCoords() const
+{
+    return iDeviceOrigin;
+}
+
+// ---------------------------------------------------------------------------
+// CLcdGraphics::CurrentFont
+// ---------------------------------------------------------------------------
+//
+inline CFont* CLcdGraphics::CurrentFont() const
+{
+    return iFont;
+}
+
+#endif // RD_JAVA_NGA_ENABLED
+
+#endif // LCDGRAPHICS_H
+