diff -r ae942d28ec0e -r 2455ef1f5bbc javauis/lcdui_akn/lcdgr/inc/CMIDGraphics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/lcdui_akn/lcdgr/inc/CMIDGraphics.h Wed Sep 01 12:33:18 2010 +0100 @@ -0,0 +1,264 @@ +/* +* 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 CMIDGRAPHICS_H +#define CMIDGRAPHICS_H + +#include + +class CFbsBitmap; +class CMIDSprite; +class CMIDTiledLayer; +class CMIDProxyMap; +class CLcdGraphics; + +/** + * Proxy to native peer to javax.microedition.lcdui.Graphics. + * + * Presents MMIDGraphics interface for compatability. + */ +NONSHARABLE_CLASS(CMIDGraphics) : public CBase + , public MMIDGraphics + , public MMIDBufferProcessor +{ +public: +#ifdef RD_JAVA_NGA_ENABLED + /** + * Constructor + * @param aProxyMap + * - a proxy + * @param aGraphics + * - a graphics implementation + * @param aIsImageTarget + * - true if an image is the target + */ + CMIDGraphics( + CMIDProxyMap& aProxyMap, CLcdGraphics* aGraphics, + TBool aIsImageTarget, MMIDCanvas* aTarget = NULL); + +#else RD_JAVA_NGA_ENABLED + + /** + * Constructor + * @param aProxyMap a proxy + * @param aGraphics a graphics implementation + * @param aIsImageTarget true if an image is the target + */ + CMIDGraphics( + CMIDProxyMap& aProxyMap, CLcdGraphics* aGraphics, + TBool aIsImageTarget); +#endif // RD_JAVA_NGA_ENABLED + + /** + * Dtor + */ + ~CMIDGraphics(); + + /** + * From MMIDComponent + */ + virtual TType Type() const; + virtual void Dispose(); + virtual MMIDBufferProcessor* Processor(); + + /** + * From MMIDBufferProcessor + */ +#ifdef RD_JAVA_NGA_ENABLED + virtual TBool ProcessL( + const TMIDBufferOp*& aRead, const TMIDBufferOp* aEnd, + TInt& aCycles, java::util::Monitor* aMonitor); +#else + virtual TBool ProcessL( + const TMIDBufferOp*& aRead, const TMIDBufferOp* aEnd, + TInt& aCycles, TRequestStatus* aStatus = NULL); +#endif + virtual void AbortAsync(); + + + /** + *@return aColor quantized to device palette. + */ + virtual TUint32 DisplayColor(TUint32 aColor); + + /** + * From MMIDGraphics + */ + virtual TInt DrawPixels( + TInt aType, // pixel data type + TUint8* aAddress, // pixel data array + TInt aLength, // pixel array length (bytes) + TInt aScanLength, // (bytes) always positive - vertical reflection handled by point/size + TBool aAlpha, // true if pixel data contains alpha + const TRect& aRect, // destination rect + TInt aTransform // transform to apply + ); + + /** + *@return bitmap handle if rendering to bitmap + */ + virtual CFbsBitmap* Bitmap() const; + + /** + *@return alpha bitmap handle or NULL if there is none + */ + inline CFbsBitmap* BitmapAlpha() const; + + /** + *@return window handle if rendering to window. + */ + virtual RWindow* Window() const; + + /** + *@return drawing surface viewport + */ + virtual TRect ViewPort() const; + + /** + *@return ETrue for mutable off-screen images (not for canvas/GameCanvas framebuffer) + * or EFalse for canvas/GameCanvas framebuffer + */ + TBool IsImageTarget() const; + +#ifdef RD_JAVA_NGA_ENABLED + +public: // from MMIDComponentNgaExtension + /** + * @see MMIDComponentNgaExtension#UpdateEglContent() + * @since S60 9.2 + */ + virtual void UpdateEglContent(); + + /** + * @see MMIDComponentNgaExtension#IsEglAvailable() + * @since S60 9.2 + */ + virtual TBool IsEglAvailable() const; + + /** + * @see MMIDComponentNgaExtension#BindEglSurface() + * @since S60 9.2 + */ + virtual EGLSurface BindEglSurface(); + + /** + * @see MMIDComponentNgaExtension#ReleaseEglSurface() + * @since S60 9.2 + */ + virtual void ReleaseEglSurface(); + + /** + * @see MMIDComponentNgaExtension#UpdateOffScreenBitmapL() + * @since S60 9.2 + */ + virtual void UpdateOffScreenBitmapL(TBool aForced); + + /** + * @see MMIDComponentNgaExtension#FillEglSurface() + * @since S60 9.2 + */ + virtual TBool FillEglSurface(const TRect& aRect, const TRgb& aColor); + + /** + * @see MMIDGraphics#TargetSize() + * @since S60 9.2 + */ + virtual TSize CanvasTargetSize() const; + + /** + * @see MMIDGraphics#GetTargetCanvas() + * @since S60 9.2 + */ + virtual MMIDCanvas* GetTargetCanvas() const; + +private: + /** + * Merges aRect to member variable TRects that are used for + * tracking the area that is updated with 2D content. + * @param aRect TRect that contains new area that has been updated + * with 2D content. + */ + void UpdateRect(const TRect& aRect); + + /** + * Calculate bounding box for text. + * @param aTextPtr a text to be drawn + * @param aP a start point + * @param aAnchor an anchor that effects to text's start point. + */ + void UpdateTextRect(TPtrC& aTextPtr, const TPoint& aP, TInt aAnchor); + + /** + * Finds the minimum of three integers + * @param aX - + * @param aY - + * @param aZ - + * @return the min of the three attributes + */ + inline TInt Min3(TInt aX, TInt aY, TInt aZ); + + /** + * Finds the maximum of three integers + * @param aX - + * @param aY - + * @param aZ - + * @return the max of the three attributes + */ + inline TInt Max3(TInt aX, TInt aY, TInt aZ); + +private: + /** + * Target Canvas of this graphics object. + * NULL, when this is not canvas graphics. + */ + MMIDCanvas* iCanvasTarget; +#endif // RD_JAVA_NGA_ENABLED + +private: + CMIDProxyMap& iProxyMap; + CLcdGraphics* iGraphics; + // this flag is for mutable off-screen images (not for canvas/GameCanvas framebuffer) + TBool iIsImageTarget; +}; + +inline CFbsBitmap* CMIDGraphics::BitmapAlpha() const +{ + return NULL; +} + +#ifdef RD_JAVA_NGA_ENABLED +// --------------------------------------------------------------------------- +// CMIDGraphics::Min3 +// --------------------------------------------------------------------------- +// +inline TInt CMIDGraphics::Min3(TInt aX, TInt aY, TInt aZ) +{ + return Min(Min(aX, aY), aZ); +} + +// --------------------------------------------------------------------------- +// CMIDGraphics::Max3 +// --------------------------------------------------------------------------- +// +inline TInt CMIDGraphics::Max3(TInt aX, TInt aY, TInt aZ) +{ + return Max(Max(aX, aY), aZ); +} +#endif // RD_JAVA_NGA_ENABLED + +#endif // CMIDGRAPHICS_H +