diff -r ae942d28ec0e -r 2455ef1f5bbc javauis/lcdui_akn/lcdgr/inc/LcdGraphics.h --- /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 +#include // for direct container/content +#include +#include +#include "LcdSurface.h" + +#ifdef __SERIES60_ +#include +#include + +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 aPosition of size aSize + * (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 +