graphicsdeviceinterface/directgdiinterface/inc/directgdiengine.h
author William Roberts <williamr@symbian.org>
Thu, 03 Jun 2010 17:39:46 +0100
branchNewGraphicsArchitecture
changeset 87 0709f76d91e5
parent 0 5d03bc08d59c
permissions -rw-r--r--
Add MMP files to build libOpenVG_sw.lib which uses LINKAS to redirect to libOpenVG.dll (and the same for libEGL_sw.lib and libOpenVGU_sw.lib). Only the libEGL_sw.lib redirection isn't activated - this can't happen until there is a merged libEGL.dll which supports the OpenWF synchronisation and also implements the graphical support functions. The overall aim is to eliminate the *_sw.dll implementations, at least as a compile-time way of choosing a software-only implementation.The correct way to choose is to put the right set of libraries into a ROM with suitable renaming, and in the emulator to use the "switching DLL" technique to pick the right set. As the Symbian Foundation doesn't have any alternative implementations, we don't need the switching DLLs and we can build directly to the correct name.

// Copyright (c) 2007-2009 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 DIRECTGDIENGINE_H
#define DIRECTGDIENGINE_H

/**
@file
@publishedPartner
@prototype
*/

#include <graphics/directgditypes.h>
#include <e32std.h>

// Forward declarations.
//
class CFbsBitmap;
class RDirectGdiImageSource;
class RDirectGdiImageTarget;
class RDirectGdiDrawableSource;

/**
Pure virtual interface for licensee adaptation of GDI platform implementation.

@publishedPartner
@prototype
@deprecated
*/
class MDirectGdiEngine
	{
public:

	/**
	@see	CDirectGdiContext::Activate()
	@see	Deactivate()
	 */
	virtual TInt Activate(RDirectGdiImageTarget& aTarget) = 0;
	
	/**
	Unbinds the current rendering target (if any) from drawing engine. Drawing engine states or settings which
	are not dependent or non-target-specific remain unchanged.
	
	The DirectGDI generic layer will call this method prior to activating the drawing engine for another 
	rendering target.
	
	@see	Activate()
	
	@pre	None.
	@post	Drawing engine is no longer associated with any rendering target.
	 */
	virtual void Deactivate() = 0;
	
	/**
	@see	CDirectGdiContext::SetOrigin()
	 */
	virtual void SetOrigin(const TPoint& aOrigin) = 0;
	
	/**
	@see	CDirectGdiContext::ResetClippingRegion()
	@see	SetClippingRegion()
	 */
	virtual void SetClippingRegion(const TRegion& aRegion) = 0;
	
	/**
	@see	CDirectGdiContext::ReetClippingRegion()
	@see	SetClippingRegion()
	 */
	virtual void ResetClippingRegion() = 0;
	
	/**
	@see	CDirectGdiContext::SetDrawMode()
	 */
	virtual void SetDrawMode(DirectGdi::TDrawMode aMode) = 0;
	
	/**
	@see	CDirectGdiContext::SetPenColor()
	@see	DrawLine()
	@see	DrawLineTo()
	@see	DrawLineBy()
	@see	DrawPolyLine()
	@see	DrawPolygon()
	@see	DrawRect()
	@see	DrawRoundRect()
	 */
	virtual void SetPenColor(const TRgb& aColor) = 0;
	
	/**
	@see	CDirectGdiContext::SetPenStyle()
	@see	DrawLine()
	@see	DrawLineTo()
	@see	DrawLineBy()
	@see	DrawPolyLine()
	@see	DrawPolygon()
	@see	DrawRect()
	@see	DrawRoundRect()
	 */
	virtual void SetPenStyle(DirectGdi::TPenStyle aStyle) = 0;
	
	/**
	@see	CDirectGdiContext::SetPenSize()
	@see	DrawLine()
	@see	DrawLineTo()
	@see	DrawLineBy()
	@see	DrawPolyLine()
	@see	DrawPolygon()
	@see	DrawRect()
	@see	DrawRoundRect()
	@see	Plot()
	 */
	virtual void SetPenSize(const TSize& aSize) = 0;
	
	/**
	@see	CDirectGdiContext::SetTextShadowColor()
	 */
	virtual void SetTextShadowColor(const TRgb& aColor) = 0;
	
	/**
	@see	CDirectGdiContext::SetBrushColor()
	 */
	virtual void SetBrushColor(const TRgb& aColor) = 0;
	
	/**
	@see 	CDirectGdiContext::SetBrushStyle()
	@see	SetBrushPattern()
	 */
	virtual void SetBrushStyle(DirectGdi::TBrushStyle aStyle) = 0;
	
	/**
	@see	CDirectGdiContext::SetBrushOrigin()
	@see	SetBrushPattern()
	 */
	virtual void SetBrushOrigin(const TPoint& aOrigin) = 0;
	
	/**
	@see	CDirectGdiContext::SetBrushPattern()
	@see	ResetBrushPattern()
	
	@return KErrNone if successful, otherwise one of the system-wide error codes.
	 */
	virtual TInt SetBrushPattern(const CFbsBitmap& aPattern) = 0;
	
	/**
	@see 	CDirectGdiContext::ResetBrushPattern()
	@see	SetBrushPattern()
	 */
	virtual void ResetBrushPattern() = 0;
	
	/**
	@see 	CDirectGdiContext::SetFont()
	
	@param  aFontId The Font identifier.
	*/
	virtual void SetFont(TUint32 aFontId) = 0;
	
	/**
	@see 	CDirectGdiContext::ResetFont()
	 */
	virtual void ResetFont() = 0;
	
	/**
	Resets the engine state to default values. 
	 
	@see 	CDirectGdiContext::Reset()
	 */
	virtual void Reset() = 0;
	
	/**
	@see	CDirectGdiContext::Clear(const TRect&)
	@see	Clear()
	@see    SetBrushColor()
	 */
	virtual void Clear(const TRect& aRect) = 0;
	
	/**
	@see	CDirectGdiContext::Clear()
	@see	Clear(const TRect&)
	@see    SetBrushColor()
	 */
	virtual void Clear() = 0;
	
	/**
	@see    CDirectGdiContext::MoveTo()
	@see	MoveBy()
	 */
	virtual void MoveTo(const TPoint& aPoint) = 0;
	
	/**
	@see    CDirectGdiContext::MoveBy()
	@see	MoveTo()
	 */
	virtual void MoveBy(const TPoint& aVector) = 0;
	
	/**
	@see    CDirectGdiContext::Plot()	
	@see    SetPenSize()
	@see    SetPenColor()
	@see    SetDrawMode()
	 */
	virtual void Plot(const TPoint& aPoint) = 0;
	
	/**
	@see    CDirectGdiContext::DrawLine()	
	@see    DrawLineTo()
	@see    DrawLineBy()
	@see    SetPenSize()
	@see    SetPenStyle()
	@see    SetPenColor()
	@see    SetDrawMode()
	 */
	virtual void DrawLine(const TPoint& aStart, const TPoint& aEnd) = 0;
	
	/**
	@see    CDirectGdiContext::DrawLineTo()	
	@see    DrawLine()
	@see    DrawLineBy()
	@see    SetPenSize()
	@see    SetPenStyle()
	@see    SetPenColor()
	@see    SetDrawMode()
	@see    MoveTo()
	@see    MoveBy()
	 */
	virtual void DrawLineTo(const TPoint& aPoint) = 0;
	
	/**
	@see    CDirectGdiContext::DrawLineBy()	
	@see    DrawLine()
	@see    DrawLineTo()
	@see    SetPenSize()
	@see    SetPenStyle()
	@see    SetPenColor()
	@see    DrawMode()
	@see    MoveTo()
	@see    MoveBy()
	 */
	virtual void DrawLineBy(const TPoint& aVector) = 0;
	
	/**
	@see	CDirectGdiContext::DrawRect()
	 */
	virtual void DrawRect(const TRect& aRect) = 0;
	
	/**
	@see	CDirectGdiContext::DrawRoundRect()
	 */
	virtual void DrawRoundRect(const TRect& aRect, const TSize& aCornerSize) = 0;
	
	/**
	@see	CDirectGdiContext::DrawPolyLine()	
	@see	SetPenColor()
	@see	SetPenSize()
	@see	SetPenStyle()
	@see	SetDrawMode()
	 */
	virtual void DrawPolyLine(const TArray<TPoint>& aPointList) = 0;
	
	/**
	@see	CDirectGdiContext::DrawPolyLineNoEndPoint()	
	@see	SetPenColor()
	@see	SetPenSize()
	@see	SetPenStyle()
	@see	SetDrawMode()
	 */
	virtual void DrawPolyLineNoEndPoint(const TArray<TPoint>& aPointList) = 0;
	
	/**
	@see	CDirectGdiContext::DrawPolygon()
	 */
	virtual void DrawPolygon(const TArray<TPoint>& aPoints,	DirectGdi::TFillRule aRule) = 0;
	
	/**
	@see	CDirectGdiContext::DrawArc()
	@see	DrawPie()
	 */
	virtual void DrawArc(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd) = 0;
	
	/**
	@see	CDirectGdiContext::DrawPie()
	 */
	virtual void DrawPie(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd) = 0;
	
	/**
	@see	CDirectGdiContext::DrawEllipse()
	 */
	virtual void DrawEllipse(const TRect& aRect) = 0;
	
	/** 
	@see	CDirectGdiContext::BitBlt(const TPoint&, const CFbsBitmap&, const TRect&)
	 */
	virtual void BitBlt(const TPoint& aDestPos, const CFbsBitmap& aBitmap, const TRect& aSourceRect) = 0;
	
	/**
	@see	CDirectGdiContext::BitBltMasked(const TPoint&, const CFbsBitmap&, const TRect&, const CFbsBitmap&, TBool)
	 */
	virtual void BitBltMasked(const TPoint& aDestPos,				
							const CFbsBitmap& aBitmap,
							const TRect& aSourceRect,				
							const CFbsBitmap& aMask,
							TBool aInvertMask) = 0;
	
	/**
	@see	CDirectGdiContext::BitBltMasked(const TPoint&, const CFbsBitmap&, const TRect&, const CFbsBitmap&, const TPoint&)
	 */
	virtual void BitBltMasked(const TPoint& aDestPos,			
							const CFbsBitmap& aBitmap,
							const TRect& aSourceRect,				
							const CFbsBitmap& aMask,
							const TPoint& aMaskPos) = 0;
	
	/**
	@see	CDirectGdiContext::DrawBitmap(const TRect&, const CFbsBitmap&, const TRect&)
	 */
	virtual void DrawBitmap(const TRect& aDestRect, 
							const CFbsBitmap& aBitmap, 
							const TRect& aSourceRect) = 0;
	
	/**
	@see	CDirectGdiContext::DrawBitmapMasked(const TRect&, const CFbsBitmap&, const TRect&, const CFbsBitmap&, TBool)
	 */
	virtual void DrawBitmapMasked(const TRect& aDestRect,				
								const CFbsBitmap& aBitmap,
								const TRect& aSourceRect,				
								const CFbsBitmap& aMask,
								TBool aInvertMask) = 0;
	
	/**
	@see	CDirectGdiContext::DrawResource(const TPoint&, const RDirectGdiImageSource&, DirectGdi::TGraphicsRotation)
	 */
	virtual void DrawResource(const TPoint& aPos, 
							const RDirectGdiDrawableSource& aSource, 
							DirectGdi::TGraphicsRotation aRotation) = 0;
	
	/**
	@see	CDirectGdiContext::DrawResource(const TRect&, const RDirectGdiImageSource&, DirectGdi::TGraphicsRotation)
	 */
	virtual void DrawResource(const TRect& aDestRect,
							const RDirectGdiDrawableSource& aSource,
							DirectGdi::TGraphicsRotation aRotation) = 0;
	
	/**
	@see	CDirectGdiContext::DrawResource(const TRect&, const RDirectGdiImageSource&, const TRect&, DirectGdi::TGraphicsRotation)
	 */
	virtual void DrawResource(const TRect& aDestRect,				
							const RDirectGdiDrawableSource& aSource,
							const TRect& aSourceRect,
							DirectGdi::TGraphicsRotation aRotation) = 0;
	
	/**
	@see	CDirectGdiContext::DrawResource(const TRect&, const RDirectGdiDrawableSource&, const TDesC8&)
	 */
	virtual void DrawResource(const TRect& aDestRect, const RDirectGdiDrawableSource& aSource, const TDesC8& aParam) = 0;
	
	/**
	Draws a glyph.
	
	@param	aPos			Position to start drawing the glyph after rotation has been applied (if necessary).
	@param	aChar			Character being drawn.
	@param	aGlyphImage		Pointer to the glyph image data.
	@param	aBitmapType		Type of bitmap format.
	@param	aGlyphImageSize	Glyph image size.
	@param	aClipRect		Clipping rect.
	@param	aRotation		Rotation specifying how the glyph will be drawn.
	
	@pre	The rendering target has been activated.
	@post	Request to draw the glyph has been accepted.
	 */
	virtual void DrawGlyph(const TPoint& aPos, 
						const TChar aChar, 
						const TUint8* aGlyphImage,
						const TGlyphBitmapType aBitmapType, 
						const TSize& aGlyphImageSize, 
						const TRect& aClipRect,
						const DirectGdi::TGraphicsRotation aRotation = DirectGdi::EGraphicsRotationNone) = 0;
	
	/**
	Copies the contents of a rectangular area on the target to another location.
	The source rectangle will be intersected with the full extent of the target.
	
	@param	aOffset Offset from the top left corner of the rectangle to be copied to the top left corner of the copy.
	@param	aRect Area to be copied.
	
	@pre 	The rendering target has been activated.
	@post 	Request to copy an area has been accepted. There is no guarantee that the
			request has been processed when this method returns.
	 */
	virtual void CopyRect(const TPoint& aOffset, const TRect& aRect) = 0;
	
	/**
	Writes the drawing engine object state to the passed write stream.
	
	@see    CDirectGdiContext::ExternalizeL()
	@see	InternalizeL()
	
	@param	aWriteStream Write stream.

	@pre	None.
	@post	The drawing engine object state has been written to the write stream.
	 */
	virtual void ExternalizeL(RWriteStream& aWriteStream) = 0;
	
	/**
	Sets the drawing engine object state from the read stream.
	
	@see    CDirectGdiContext::InternalizeL()
	@see	ExternalizeL()
	 
	@param	aReadStream Read stream.
	 
	@pre	None.
	@post	The drawing engine object state has been updated with the values from the read stream.
	 */
	virtual void InternalizeL(RReadStream& aReadStream) = 0;
	
	/**
	@see CDirectGdiContext::GetInterface()
	 */
	virtual TInt GetInterface(TUid aInterfaceId, TAny*& aInterface) = 0;
	
	/**
	Prepares the drawing engine for drawing text as multiple DrawGlyph() commands.
	This function must always have a corresponding call to EndDrawGlyph() after the multiple 
	DrawGlyph() commands have been made.
	Other than DrawGlyph(), no other rendering should be issued to the engine until EndDrawGlyph() has been called.
	
	@see EndDrawGlyph()
	@see DrawGlyph()
	
	@pre None.
	@post None.
	 */
	virtual void BeginDrawGlyph() = 0;
	
	/**
	Notifies the drawing engine that the last call to DrawGlyph() has been made for the 
	text string. This function must always be matched to a corresponding BeginDrawGlyph() call. 
	Other than DrawGlyph(), no other rendering should be issued to the engine until EndDrawGlyph() has 
	been called.
	
	@see BeginDrawGlyph()
	@see DrawGlyph()
	
	@pre BeginDrawGlyph() has been called.
	@post None.  
	 */
	virtual void EndDrawGlyph() = 0;
	
	};

const TUid KDirectGdiEngineUid = {0x10285A72};


#endif