--- a/windowing/windowserver/tauto/directgdigcwrapper.cpp Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,521 +0,0 @@
-// Copyright (c) 2008-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:
-//
-
-#include "directgdigcwrapper.h"
-#include "mwsgraphicscontexttodirectgdimappings.h"
-#include <s32mem.h>
-#include "stdpanic.h"
-#include <graphics/lookuptable.h>
-#include <graphics/directgdidriver.h>
-#include <graphics/directgdidrawablesource.h>
-
-void Panic(TStdPluginPanic aPanic)
- {
- _LIT(KStdPanicCategory, "WSERV-TEST-PLUGIN");
- User::Panic(KStdPanicCategory, aPanic);
- }
-
-CDirectGdiGcWrapper* CDirectGdiGcWrapper::NewL(RDirectGdiImageTarget& aTarget)
- {
- CDirectGdiGcWrapper* self = new(ELeave) CDirectGdiGcWrapper;
- CleanupStack::PushL(self);
- CDirectGdiDriver* driver = CDirectGdiDriver::Static();
- User::LeaveIfNull(driver);
- self->iContext = CDirectGdiContext::NewL(*driver);
- TInt err = self->iContext->Activate(aTarget);
- User::LeaveIfError(err);
- self->iErrorCode = KErrNone;
- self->iGcBuf = CBufSeg::NewL(512);
- //MWsFader
- //Default in BitGdi was 128 for the blackMap and 255 for the whiteMap
- //SetFadingParameters shows how the fade color is computed
- self->iFadeColor.SetInternal(0x80FFFFFF);
-
- self->iLut = PtrTo16BitNormalisationTable();
- CleanupStack::Pop(self);
- return self;
- }
-
-CDirectGdiGcWrapper::~CDirectGdiGcWrapper()
- {
- delete iContext;
- delete iGcBuf;
- iClippingRegion.Close();
- }
-
-void CDirectGdiGcWrapper::BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap)
- {
- iContext->BitBlt(aDestPos, aSourceBitmap);
- }
-
-void CDirectGdiGcWrapper::BitBlt(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect)
- {
- iContext->BitBlt(aDestPos, aSourceBitmap, aSourceRect);
- }
-
-void CDirectGdiGcWrapper::BitBltMasked(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, TBool aInvertMask)
- {
- iContext->BitBltMasked(aDestPos, aSourceBitmap, aSourceRect, aMaskBitmap, aInvertMask);
- }
-
-void CDirectGdiGcWrapper::BitBltMasked(const TPoint& aDestPos, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, const TPoint& aMaskPos)
- {
- iContext->BitBltMasked(aDestPos, aSourceBitmap, aSourceRect, aMaskBitmap, aMaskPos);
- }
-
-void CDirectGdiGcWrapper::ResetClippingRegion()
- {
- iContext->ResetClippingRegion();
- }
-
-void CDirectGdiGcWrapper::Clear()
- {
- iContext->Clear();
- }
-
-void CDirectGdiGcWrapper::Clear(const TRect& aRect)
- {
- iContext->Clear(aRect);
- }
-
-void CDirectGdiGcWrapper::ResetBrushPattern()
- {
- iContext->ResetBrushPattern();
- }
-
-void CDirectGdiGcWrapper::ResetFont()
- {
- iContext->ResetFont();
- }
-
-void CDirectGdiGcWrapper::DrawArc(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd)
- {
- iContext->DrawArc(aRect, aStart, aEnd);
- }
-
-void CDirectGdiGcWrapper::DrawPie(const TRect& aRect, const TPoint& aStart, const TPoint& aEnd)
- {
- iContext->DrawPie(aRect, aStart, aEnd);
- }
-
-void CDirectGdiGcWrapper::DrawBitmap(const TRect& aDestRect, const CFbsBitmap& aSourceBitmap)
- {
- iContext->DrawBitmap(aDestRect, aSourceBitmap);
- }
-
-void CDirectGdiGcWrapper::DrawBitmap(const TRect& aDestRect, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect)
- {
- iContext->DrawBitmap(aDestRect, aSourceBitmap, aSourceRect);
- }
-
-void CDirectGdiGcWrapper::DrawBitmapMasked(const TRect& aDestRect, const CFbsBitmap& aSourceBitmap, const TRect& aSourceRect, const CFbsBitmap& aMaskBitmap, TBool aInvertMask)
- {
- iContext->DrawBitmapMasked(aDestRect, aSourceBitmap, aSourceRect, aMaskBitmap, aInvertMask);
- }
-
-void CDirectGdiGcWrapper::DrawRoundRect(const TRect& aRect, const TSize& aEllipse)
- {
- iContext->DrawRoundRect(aRect, aEllipse);
- }
-
-void CDirectGdiGcWrapper::DrawPolyLine(const TArray<TPoint>& aPointList)
- {
- iContext->DrawPolyLine(aPointList);
- }
-
-void CDirectGdiGcWrapper::DrawPolyLineNoEndPoint(const TArray<TPoint>& aPointList)
- {
- iContext->DrawPolyLineNoEndPoint(aPointList);
- }
-
-void CDirectGdiGcWrapper::DrawPolygon(const TArray<TPoint>& aPointList, TFillRule aFillRule)
- {
- iContext->DrawPolygon(aPointList, MWsGraphicsContextToDirectGdiMappings::Convert(aFillRule));
- }
-
-void CDirectGdiGcWrapper::DrawEllipse(const TRect& aRect)
- {
- iContext->DrawEllipse(aRect);
- }
-
-void CDirectGdiGcWrapper::DrawLine(const TPoint& aStart, const TPoint& aEnd)
- {
- iContext->DrawLine(aStart, aEnd);
- }
-
-void CDirectGdiGcWrapper::DrawLineTo(const TPoint& aPoint)
- {
- iContext->DrawLineTo(aPoint);
- }
-
-void CDirectGdiGcWrapper::DrawLineBy(const TPoint& aVector)
- {
- iContext->DrawLineBy(aVector);
- }
-
-void CDirectGdiGcWrapper::DrawRect(const TRect& aRect)
- {
- iContext->DrawRect(aRect);
- }
-
-void CDirectGdiGcWrapper::DrawText(const TDesC& aText,const TTextParameters* aParam)
- {
- iContext->DrawText(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam));
- }
-
-void CDirectGdiGcWrapper::DrawText(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition)
- {
- iContext->DrawText(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aPosition);
- }
-
-void CDirectGdiGcWrapper::DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect)
- {
- iContext->DrawText(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aClipRect);
- }
-
-void CDirectGdiGcWrapper::DrawText(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipFillRect,TInt aBaselineOffset, TTextAlign aHrz,TInt aMargin)
- {
- iContext->DrawText(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aClipFillRect, aBaselineOffset, MWsGraphicsContextToDirectGdiMappings::Convert(aHrz), aMargin);
- }
-
-void CDirectGdiGcWrapper::DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp)
- {
- iContext->DrawTextVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aUp);
- }
-
-void CDirectGdiGcWrapper::DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TPoint& aPosition,TBool aUp)
- {
- iContext->DrawTextVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aPosition, aUp);
- }
-
-void CDirectGdiGcWrapper::DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TBool aUp)
- {
- iContext->DrawTextVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aClipRect, aUp);
- }
-
-void CDirectGdiGcWrapper::DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TInt aBaselineOffset,TBool aUp,TTextAlign aVert,TInt aMargin)
- {
- iContext->DrawTextVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aClipRect, aBaselineOffset, aUp, MWsGraphicsContextToDirectGdiMappings::Convert(aVert), aMargin);
- }
-
-void CDirectGdiGcWrapper::DrawTextVertical(const TDesC& aText,const TTextParameters* aParam,const TRect& aClipRect,TInt aBaselineOffset,TInt aTextWidth,TBool aUp,TTextAlign aVert,TInt aMargin)
- {
- iContext->DrawTextVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aClipRect, aBaselineOffset, aTextWidth, aUp, MWsGraphicsContextToDirectGdiMappings::Convert(aVert), aMargin);
- }
-
-void CDirectGdiGcWrapper::MoveTo(const TPoint& aPoint)
- {
- iContext->MoveTo(aPoint);
- }
-
-void CDirectGdiGcWrapper::MoveBy(const TPoint& aVector)
- {
- iContext->MoveBy(aVector);
- }
-
-void CDirectGdiGcWrapper::Plot(const TPoint& aPoint)
- {
- iContext->Plot(aPoint);
- }
-
-void CDirectGdiGcWrapper::Reset()
- {
- iContext->Reset();
- }
-
-void CDirectGdiGcWrapper::SetBrushColor(const TRgb& aColor)
- {
- iContext->SetBrushColor(aColor);
- }
-
-void CDirectGdiGcWrapper::SetBrushOrigin(const TPoint& aOrigin)
- {
- iContext->SetBrushOrigin(aOrigin);
- }
-
-void CDirectGdiGcWrapper::SetBrushStyle(TBrushStyle aBrushStyle)
- {
- iContext->SetBrushStyle(MWsGraphicsContextToDirectGdiMappings::Convert(aBrushStyle));
- }
-
-void CDirectGdiGcWrapper::SetClippingRegion(const TRegion& aRegion)
- {
- CDirectGdiDriver* driver = CDirectGdiDriver::Static();
- driver->GetError(); //make sure that an error has been received
- iContext->SetClippingRegion(aRegion);
- TInt err = driver->GetError();
- SetError(err);
- if(err == KErrNone)
- {
- iClippingRegion.Copy(aRegion);
- }
- }
-
-void CDirectGdiGcWrapper::SetDrawMode(TDrawMode aDrawMode)
- {
- iContext->SetDrawMode(MWsGraphicsContextToDirectGdiMappings::LossyConvert(aDrawMode));
- }
-
-void CDirectGdiGcWrapper::SetOrigin(const TPoint& aPoint)
- {
- iContext->SetOrigin(aPoint);
- iOrigin = aPoint;
- }
-
-void CDirectGdiGcWrapper::SetPenColor(const TRgb& aColor)
- {
- iContext->SetPenColor(aColor);
- }
-
-void CDirectGdiGcWrapper::SetPenStyle(TPenStyle aPenStyle)
- {
- iContext->SetPenStyle(MWsGraphicsContextToDirectGdiMappings::Convert(aPenStyle));
- }
-
-void CDirectGdiGcWrapper::SetPenSize(const TSize& aSize)
- {
- iContext->SetPenSize(aSize);
- }
-
-void CDirectGdiGcWrapper::SetTextShadowColor(const TRgb& aColor)
- {
- iContext->SetTextShadowColor(aColor);
- }
-
-void CDirectGdiGcWrapper::SetCharJustification(TInt aExcessWidth, TInt aNumChars)
- {
- iContext->SetCharJustification(aExcessWidth, aNumChars);
- }
-
-void CDirectGdiGcWrapper::SetWordJustification(TInt aExcessWidth, TInt aNumGaps)
- {
- iContext->SetWordJustification(aExcessWidth, aNumGaps);
- }
-
-void CDirectGdiGcWrapper::SetUnderlineStyle(TFontUnderline aUnderlineStyle)
- {
- iContext->SetUnderlineStyle(MWsGraphicsContextToDirectGdiMappings::Convert(aUnderlineStyle));
- }
-
-void CDirectGdiGcWrapper::SetStrikethroughStyle(TFontStrikethrough aStrikethroughStyle)
- {
- iContext->SetStrikethroughStyle(MWsGraphicsContextToDirectGdiMappings::Convert(aStrikethroughStyle));
- }
-
-void CDirectGdiGcWrapper::SetBrushPattern(const CFbsBitmap& aBitmap)
- {
- iContext->SetBrushPattern(aBitmap);
- }
-
-void CDirectGdiGcWrapper::SetBrushPattern(TInt aFbsBitmapHandle)
- {
- iContext->SetBrushPattern(aFbsBitmapHandle);
- }
-
-void CDirectGdiGcWrapper::SetFont(const CFont* aFont)
- {
- iContext->SetFont(aFont);
- }
-
-void CDirectGdiGcWrapper::CopyRect(const TPoint& aOffset, const TRect& aRect)
- {
- iContext->CopyRect(aOffset, aRect);
- }
-
-void CDirectGdiGcWrapper::UpdateJustification(const TDesC& aText,const TTextParameters* aParam)
- {
- iContext->UpdateJustification(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam));
- }
-
-void CDirectGdiGcWrapper::UpdateJustificationVertical(const TDesC& aText,const TTextParameters* aParam,TBool aUp)
- {
- iContext->UpdateJustificationVertical(aText, MWsGraphicsContextToDirectGdiMappings::Convert(aParam), aUp);
- }
-
-void CDirectGdiGcWrapper::SetFontNoDuplicate(const CFont* aFont)
- {
- iContext->SetFontNoDuplicate(static_cast<const CDirectGdiFont*>(aFont));
- }
-
-TBool CDirectGdiGcWrapper::HasBrushPattern() const
- {
- return iContext->HasBrushPattern();
- }
-
-TBool CDirectGdiGcWrapper::HasFont() const
- {
- return iContext->HasFont();
- }
-
-TRgb CDirectGdiGcWrapper::BrushColor() const
- {
- return iContext->BrushColor();
- }
-
-TRgb CDirectGdiGcWrapper::PenColor() const
- {
- return iContext->PenColor();
- }
-
-TRgb CDirectGdiGcWrapper::TextShadowColor() const
- {
- return iContext->TextShadowColor();
- }
-
-TAny* CDirectGdiGcWrapper::ResolveObjectInterface(TUint /*aTypeId*/)
- {
- return NULL;
- }
-
-/**
-Sets the error code. If the error code is already set to a value other
-than KErrNone, the error code will not be modified.
-
-@param aErr The error code to set.
-
-@post The error code has been set.
-*/
-void CDirectGdiGcWrapper::SetError(TInt aError)
- {
- if (aError != KErrNone && iErrorCode == KErrNone)
- {
- iErrorCode = aError;
- }
- }
-
-/**
-Returns the first error code (set as the result of calling some CDirectGdiGcWrapper API), if any,
-since the last call to this function or, if it has not previously been called, since
-the CDirectGdiGcWrapper was constructed. Calling this function clears the error code.
-
-@post The error code has been reset after being read.
-
-@return The first error code, if any, since the last call to this function or,
- if it has not previously been called, since the CDirectGdiGcWrapper was constructed.
- KErrNone will indicate that no such error has occurred.
-*/
-TInt CDirectGdiGcWrapper::GetError()
- {
- TInt err = iErrorCode;
- iErrorCode = KErrNone;
- return err;
- }
-
-TPoint CDirectGdiGcWrapper::Origin() const
- {
- return iOrigin;
- }
-
-const TRegion& CDirectGdiGcWrapper::ClippingRegion()
- {
- return iClippingRegion;
- }
-
-TInt CDirectGdiGcWrapper::Push()
- {
- // the buf format is len+data where data is written by the GC's ExternalizeL()
- iGcBuf->Reset();
- CBufBase& buf = *iGcBuf;
- const TInt start = buf.Size();
- RBufWriteStream out(buf,start);
- TRAPD(err,out.WriteInt32L(0));
- if(!err)
- {
- TRAP(err,iContext->ExternalizeL(out));
- }
- if(err) //rollback addition
- {
- buf.Delete(start,buf.Size()-start);
- }
- else //fixup len
- {
- TRAP_IGNORE(out.CommitL();) // can't see this failing
- TPckgBuf<TInt32> pckg(buf.Size()-sizeof(TInt32)-start);
- buf.Write(start,pckg);
- }
- return err;
- }
-
-void CDirectGdiGcWrapper::Pop()
- {
- CBufBase& buf = *iGcBuf;
- TInt ofs = 0;
- FOREVER
- {
- TInt chunk = 0;
- RBufReadStream in(buf,ofs);
- TRAPD(err,chunk = in.ReadInt32L());
- if(err)
- {
- STD_ASSERT_DEBUG(err != 0, EStdPanicPopGcSettings);
- return;
- }
- if(ofs+sizeof(TInt32)+chunk >= buf.Size()) // the last chunk?
- {
- TRAP_IGNORE(iContext->InternalizeL(in));
- buf.Delete(ofs,buf.Size()-ofs);
- return;
- }
- ofs += chunk + sizeof(TInt32);
- }
- }
-
-//Default method of fading simply uses bitgdi to perform fading
-void CDirectGdiGcWrapper::FadeArea(const TRegion& aRegion)
- {
- if (!&aRegion || aRegion.CheckError())
- return;
-
- iContext->Reset();
- iContext->SetClippingRegion(aRegion);
- iContext->SetPenStyle(DirectGdi::ENullPen);
- iContext->SetBrushStyle(DirectGdi::ESolidBrush);
- iContext->SetBrushColor(iFadeColor);
- iContext->DrawRect(aRegion.BoundingRect());
- }
-
-//Default method of fading expects two TUint8's describing the black/white map
-//as possible fading parameters
-void CDirectGdiGcWrapper::SetFadingParameters(const TDesC8& aData)
- {
- TPckgBuf<TFadingParams> buf;
- buf.Copy(aData);
- TFadingParams parameters = buf();
-
- //Situations where blackMap > whiteMap are NOT supported
- if (parameters.blackMap > parameters.whiteMap)
- {
- TUint8 oldMap = parameters.blackMap;
- parameters.blackMap = parameters.whiteMap;
- parameters.whiteMap = oldMap;
- }
-
- //CFbsBitGc::FadeArea() does the following per color component:
- // dst = dst * (whiteMap - blackMap) + blackMap;
-
- //To achieve the same effect using MWsGraphicsContext we draw a rectangle
- //with specific intensity and alpha values:
- // dst = dst * (1 - alpha) + intensity * alpha;
- //Thus:
- // alpha = 1 - whiteMap + blackMap;
- // intensity = blackMap / alpha;
-
- // alpha = 1 - whiteMap + blackMap;
- TInt alpha = 255 - parameters.whiteMap + parameters.blackMap;
- // intensity = blackMap / alpha;
- TInt i = (parameters.blackMap * iLut[alpha]) >> 8;
-
- iFadeColor.SetInternal(i << 16 | i << 8 | i | alpha << 24);
- }