--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/directgdi/test/tcontext_bitgdi.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,537 @@
+// 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:
+//
+
+#include "tcontextbase.h"
+#include <gdi.h>
+#include <bitdev.h>
+
+CTBitGdiContext::CTBitGdiContext() :
+ iError(KErrNone)
+ {
+
+ }
+
+CTBitGdiContext* CTBitGdiContext::NewL(CFbsBitmapDevice* aDevice, TBool aActivate)
+ {
+ CTBitGdiContext* self = new (ELeave) CTBitGdiContext;
+ CleanupStack::PushL (self);
+ self->ConstructL (aDevice, aActivate);
+ CleanupStack::Pop ();
+ return self;
+ }
+
+void CTBitGdiContext::ConstructL(CFbsBitmapDevice* aDevice, TBool aActivate)
+ {
+ if(aActivate)
+ {
+ User::LeaveIfError(aDevice->CreateContext (iGc));
+ }
+ else
+ {
+ iGc = CFbsBitGc::NewL();
+ }
+ }
+
+CTBitGdiContext::~CTBitGdiContext()
+ {
+ delete iGc;
+ }
+
+TInt CTBitGdiContext::Activate(CBitmapDevice *aDevice)
+ {
+ CFbsDevice* device = (CFbsDevice *)aDevice;
+ iGc->Activate(device);
+ return KErrNone;
+ }
+
+void CTBitGdiContext::SetOrigin(const TPoint& aOrigin)
+ {
+ iGc->SetOrigin (aOrigin);
+ }
+
+void CTBitGdiContext::SetClippingRegion(const TRegion& aRegion)
+ {
+ TInt result = iGc->SetClippingRegion (aRegion);
+ SetError(result);
+ }
+
+void CTBitGdiContext::ResetClippingRegion()
+ {
+ iGc->CancelClipping();
+ }
+
+void CTBitGdiContext::SetDrawMode(DirectGdi::TDrawMode aMode)
+ {
+ CGraphicsContext::TDrawMode mode = CGraphicsContext::EDrawModePEN;
+ if (aMode == DirectGdi::EDrawModeWriteAlpha)
+ {
+ mode = CGraphicsContext::EDrawModeWriteAlpha;
+ }
+ iGc->SetDrawMode(mode);
+ }
+
+void CTBitGdiContext::SetPenColor(const TRgb& aColor)
+ {
+ iGc->SetPenColor (aColor);
+ }
+
+void CTBitGdiContext::SetPenStyle(DirectGdi::TPenStyle aStyle)
+ {
+ // The CGraphicsContext::TPenStyle enumeration has the same values as the
+ // DirectGdi::TPenStyle. If these change then this function will need to be updated.
+ iGc->SetPenStyle(static_cast<CGraphicsContext::TPenStyle>(aStyle));
+ }
+
+void CTBitGdiContext::SetPenSize(const TSize& aSize)
+ {
+ iGc->SetPenSize (aSize);
+ }
+
+void CTBitGdiContext::SetTextShadowColor(const TRgb& aColor)
+ {
+ iGc->SetShadowColor(aColor);
+ }
+
+void CTBitGdiContext::SetBrushColor(const TRgb& aColor)
+ {
+ iGc->SetBrushColor (aColor);
+ }
+
+void CTBitGdiContext::SetBrushStyle(DirectGdi::TBrushStyle aStyle)
+ {
+ // The CGraphicsContext::TBrushStyle enumeration has the same values as the
+ // DirectGdi::TBrushStyle. If these change then this function will need to be updated.
+ iGc->SetBrushStyle(static_cast<CGraphicsContext::TBrushStyle>(aStyle));
+ }
+
+void CTBitGdiContext::SetBrushOrigin(const TPoint& aOrigin)
+ {
+ iGc->SetBrushOrigin (aOrigin);
+ }
+
+void CTBitGdiContext::SetBrushPattern(const CFbsBitmap& aPattern)
+ {
+ iGc->UseBrushPattern (&aPattern);
+ }
+
+void CTBitGdiContext::SetBrushPattern(TInt aHandle)
+ {
+ TInt result = iGc->UseBrushPattern(aHandle);
+ SetError(result);
+ }
+
+void CTBitGdiContext::ResetBrushPattern()
+ {
+ iGc->DiscardBrushPattern ();
+ }
+
+void CTBitGdiContext::SetFont(const CFont* aFont)
+ {
+ iGc->UseFont (aFont);
+ }
+
+void CTBitGdiContext::ResetFont()
+ {
+ iGc->DiscardFont ();
+ }
+
+void CTBitGdiContext::Reset()
+ {
+ iGc->Reset ();
+ }
+
+TRgb CTBitGdiContext::BrushColor()
+ {
+ return iGc->BrushColor ();
+ }
+
+TRgb CTBitGdiContext::PenColor()
+ {
+ return iGc->PenColor ();
+ }
+
+TRgb CTBitGdiContext::TextShadowColor()
+ {
+ TRgb shadowColor;
+ iGc->GetShadowColor(shadowColor);
+ return shadowColor;
+ }
+
+void CTBitGdiContext::Clear(const TRect& aRect)
+ {
+ iGc->Clear (aRect);
+ }
+
+void CTBitGdiContext::Clear()
+ {
+ iGc->Clear ();
+ }
+
+void CTBitGdiContext::MoveTo(const TPoint& aPoint)
+ {
+ iGc->MoveTo (aPoint);
+ }
+
+void CTBitGdiContext::MoveBy(const TPoint& aVector)
+ {
+ iGc->MoveBy (aVector);
+ }
+
+void CTBitGdiContext::Plot(const TPoint& aPoint)
+ {
+ iGc->Plot (aPoint);
+ }
+
+void CTBitGdiContext::DrawLine(const TPoint& aStart, const TPoint& aEnd)
+ {
+ iGc->DrawLine (aStart, aEnd);
+ }
+
+void CTBitGdiContext::DrawLineTo(const TPoint& aPoint)
+ {
+ iGc->DrawLineTo (aPoint);
+ }
+
+void CTBitGdiContext::DrawLineBy(const TPoint& aVector)
+ {
+ iGc->DrawLineBy (aVector);
+ }
+
+void CTBitGdiContext::DrawRect(const TRect& aRect)
+ {
+ iGc->DrawRect (aRect);
+ }
+
+void CTBitGdiContext::DrawRoundRect(const TRect& aRect,
+ const TSize& aCornerSize)
+ {
+ iGc->DrawRoundRect (aRect, aCornerSize);
+ }
+
+void CTBitGdiContext::DrawPolyLine(const CArrayFix<TPoint>& aPointList)
+ {
+ iGc->DrawPolyLine(&aPointList);
+ }
+
+void CTBitGdiContext::DrawPolyLineNoEndPoint(const CArrayFix<TPoint>& aPointList)
+ {
+ iGc->DrawPolyLineNoEndPoint(&aPointList);
+ }
+
+void CTBitGdiContext::DrawPolygon(const CArrayFix<TPoint>& aPoints, DirectGdi::TFillRule aRule)
+ {
+ TInt result = iGc->DrawPolygon(&aPoints, static_cast<CGraphicsContext::TFillRule>(aRule));
+ SetError(result);
+ }
+
+void CTBitGdiContext::DrawArc(const TRect& aRect, const TPoint& aStart,
+ const TPoint& aEnd)
+ {
+ iGc->DrawArc (aRect, aStart, aEnd);
+ }
+
+void CTBitGdiContext::DrawPie(const TRect& aRect, const TPoint& aStart,
+ const TPoint& aEnd)
+ {
+ iGc->DrawPie (aRect, aStart, aEnd);
+ }
+
+void CTBitGdiContext::DrawEllipse(const TRect& aRect)
+ {
+ iGc->DrawEllipse (aRect);
+ }
+
+void CTBitGdiContext::BitBltMasked(const TPoint& aDestPos,
+ const CFbsBitmap& aBitmap, const TRect& aSourceRect,
+ const CFbsBitmap& aAlpha, const TPoint& aAlphaPos)
+ {
+ // This overload of BitBltMasked maps to AlphaBlendBitmaps in BitGDI, which has the same signiature.
+ TInt result = iGc->AlphaBlendBitmaps(aDestPos, &aBitmap, aSourceRect, &aAlpha, aAlphaPos);
+ SetError(result);
+ }
+
+void CTBitGdiContext::BitBlt(const TPoint& aPoint, const CFbsBitmap& aBitmap)
+ {
+ iGc->BitBlt (aPoint, &aBitmap);
+ }
+
+void CTBitGdiContext::DrawBitmap(const TRect& aDestRect,
+ const CFbsBitmap& aSource)
+ {
+ iGc->DrawBitmap (aDestRect, &aSource);
+ }
+
+void CTBitGdiContext::BitBlt(const TPoint& aDestPos,
+ const CFbsBitmap& aBitmap, const TRect& aSrcRect)
+ {
+ iGc->BitBlt (aDestPos, &aBitmap, aSrcRect);
+ }
+
+void CTBitGdiContext::BitBltMasked(const TPoint& aDestPos,
+ const CFbsBitmap& aBitmap, const TRect& aSrcRect,
+ const CFbsBitmap& aMask, TBool aInvertMask)
+ {
+ iGc->BitBltMasked (aDestPos, &aBitmap, aSrcRect, &aMask, aInvertMask);
+ }
+
+void CTBitGdiContext::DrawBitmap(const TRect& aDestRect,
+ const CFbsBitmap& aBitmap, const TRect& aSrcRect)
+ {
+ iGc->DrawBitmap (aDestRect, &aBitmap, aSrcRect);
+ }
+
+void CTBitGdiContext::DrawBitmapMasked(const TRect& aDestRect,
+ const CFbsBitmap& aBitmap, const TRect& aSrcRect,
+ const CFbsBitmap& aMask, TBool aInvertMask)
+ {
+ iGc->DrawBitmapMasked (aDestRect, &aBitmap, aSrcRect, &aMask, aInvertMask);
+ }
+
+void CTBitGdiContext::CopyRect(const TPoint& aOffset, const TRect& aRect)
+ {
+ iGc->CopyRect (aOffset, aRect);
+ }
+
+TBool CTBitGdiContext::HasBrushPattern() const
+ {
+ return iGc->IsBrushPatternUsed ();
+ }
+
+TBool CTBitGdiContext::HasFont() const
+ {
+ return iGc->IsFontUsed ();
+ }
+
+void CTBitGdiContext::ExternalizeL(RWriteStream& aWriteStream)
+ {
+ iGc->ExternalizeL (aWriteStream);
+ }
+
+void CTBitGdiContext::InternalizeL(RReadStream& aReadStream)
+ {
+ iGc->InternalizeL (aReadStream);
+ }
+
+void CTBitGdiContext::SetCharJustification(TInt aExcessWidth, TInt aNumGaps)
+ {
+ iGc->SetCharJustification (aExcessWidth, aNumGaps);
+ }
+
+void CTBitGdiContext::SetWordJustification(TInt aExcessWidth, TInt aNumChars)
+ {
+ iGc->SetWordJustification (aExcessWidth, aNumChars);
+ }
+
+void CTBitGdiContext::SetUnderlineStyle(DirectGdi::TFontUnderline aUnderlineStyle)
+ {
+ iGc->SetUnderlineStyle (static_cast<TFontUnderline>(aUnderlineStyle));
+ }
+
+void CTBitGdiContext::SetStrikethroughStyle(DirectGdi::TFontStrikethrough aStrikethroughStyle)
+ {
+ iGc->SetStrikethroughStyle (static_cast<TFontStrikethrough>(aStrikethroughStyle));
+ }
+
+void CTBitGdiContext::UpdateJustification(const TDesC& aText, const DirectGdi::TTextParameters* aParam)
+ {
+ iGc->UpdateJustification(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam));
+ }
+
+void CTBitGdiContext::UpdateJustificationVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, TBool aUp)
+ {
+ iGc->UpdateJustificationVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aUp);
+ }
+
+void CTBitGdiContext::SetFontNoDuplicate(const CFont* /*aFont*/)
+ {
+ }
+
+void CTBitGdiContext::SetError(TInt aErr)
+ {
+ if (KErrNone == iError)
+ {
+ iError = aErr;
+ }
+ }
+
+
+TInt CTBitGdiContext::GetError()
+ {
+ TInt err = iError;
+ iError = KErrNone;
+ return err;
+ }
+
+// text drawing
+void CTBitGdiContext::DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam)
+ {
+ iGc->DrawText(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam));
+ }
+
+void CTBitGdiContext::DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition)
+ {
+ iGc->DrawText(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aPosition);
+ }
+
+void CTBitGdiContext::DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox)
+ {
+ iGc->DrawText(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox);
+ }
+
+void CTBitGdiContext::DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox, TInt aBaselineOffset,
+ DirectGdi::TTextAlign aAlignment, TInt aMargin)
+ {
+ iGc->DrawText(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox, aBaselineOffset, static_cast<CGraphicsContext::TTextAlign>(aAlignment), aMargin);
+ }
+
+void CTBitGdiContext::DrawText(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox, TInt aBaselineOffset,
+ TInt aTextWidth, DirectGdi::TTextAlign aAlignment, TInt aMargin)
+ {
+ iGc->DrawText(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox, aBaselineOffset, aTextWidth, static_cast<CGraphicsContext::TTextAlign>(aAlignment), aMargin);
+ }
+
+void CTBitGdiContext::DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, TBool aUp)
+ {
+ iGc->DrawTextVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aUp);
+ }
+
+void CTBitGdiContext::DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TPoint& aPosition, TBool aUp)
+ {
+ iGc->DrawTextVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aPosition, aUp);
+ }
+
+void CTBitGdiContext::DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox, TBool aUp)
+ {
+ iGc->DrawTextVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox, aUp);
+ }
+
+void CTBitGdiContext::DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox, TInt aBaselineOffset,
+ TBool aUp, DirectGdi::TTextAlign aVerticalAlignment, TInt aMargin)
+ {
+ iGc->DrawTextVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox, aBaselineOffset, aUp,
+ static_cast<CGraphicsContext::TTextAlign>(aVerticalAlignment), aMargin);
+ }
+
+void CTBitGdiContext::DrawTextVertical(const TDesC& aText, const DirectGdi::TTextParameters* aParam, const TRect& aBox, TInt aBaselineOffset,
+ TInt aTextWidth, TBool aUp, DirectGdi::TTextAlign aVerticalAlignment, TInt aMargin)
+ {
+ iGc->DrawTextVertical(aText, reinterpret_cast<const CGraphicsContext::TTextParameters*>(aParam), aBox, aBaselineOffset, aTextWidth, aUp,
+ static_cast<CGraphicsContext::TTextAlign>(aVerticalAlignment), aMargin);
+ }
+
+void CTBitGdiContext::DrawResource(const TPoint& aPos,
+ const TDrawableSourceAndEquivRotatedBmps& aSource,
+ DirectGdi::TGraphicsRotation aRotation)
+ {
+ switch (aRotation)
+ {
+ case DirectGdi::EGraphicsRotation90:
+ iGc->BitBlt(aPos, aSource.iBmpRot90);
+ break;
+
+ case DirectGdi::EGraphicsRotation180:
+ iGc->BitBlt(aPos, aSource.iBmpRot180);
+ break;
+
+ case DirectGdi::EGraphicsRotation270:
+ iGc->BitBlt(aPos, aSource.iBmpRot270);
+ break;
+
+ default: // DirectGdi::EGraphicsRotationNone
+ iGc->BitBlt(aPos, aSource.iBmpRotNone);
+ break;
+ }
+ }
+
+void CTBitGdiContext::DrawResource(const TRect& aDestRect,
+ const TDrawableSourceAndEquivRotatedBmps& aSource,
+ DirectGdi::TGraphicsRotation aRotation)
+ {
+ switch (aRotation)
+ {
+ case DirectGdi::EGraphicsRotation90:
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot90);
+ break;
+
+ case DirectGdi::EGraphicsRotation180:
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot180);
+ break;
+
+ case DirectGdi::EGraphicsRotation270:
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot270);
+ break;
+
+ default: // DirectGdi::EGraphicsRotationNone
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRotNone);
+ break;
+ }
+ }
+
+void CTBitGdiContext::DrawResource(const TRect& aDestRect,
+ const TDrawableSourceAndEquivRotatedBmps& aSource,
+ const TRect& aSrcRect,
+ DirectGdi::TGraphicsRotation aRotation)
+ {
+ switch (aRotation)
+ {
+ case DirectGdi::EGraphicsRotation90:
+ {
+ // Adjust the src rect to take account of the rotated bitmap
+ TRect rect = aSrcRect;
+ rect.iBr.iX = aSrcRect.iTl.iX + aSrcRect.Height();
+ rect.iBr.iY = aSrcRect.iTl.iY + aSrcRect.Width();
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot90, rect);
+ break;
+ }
+
+ case DirectGdi::EGraphicsRotation180:
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot180, aSrcRect);
+ break;
+
+ case DirectGdi::EGraphicsRotation270:
+ {
+ // Adjust the src rect to take account of the rotated bitmap
+ TRect rect = aSrcRect;
+ rect.iBr.iX = aSrcRect.iTl.iX + aSrcRect.Height();
+ rect.iBr.iY = aSrcRect.iTl.iY + aSrcRect.Width();
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRot270, rect);
+ break;
+ }
+
+ default: // DirectGdi::EGraphicsRotationNone
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRotNone, aSrcRect);
+ break;
+ }
+ }
+
+void CTBitGdiContext::DrawResource(const TRect& aDestRect,
+ const TDrawableSourceAndEquivRotatedBmps& aSource,
+ const TDesC8& /*aParam*/)
+ {
+ // NB we only support drawing drawable sources as images currently
+ iGc->DrawBitmap(aDestRect, aSource.iBmpRotNone);
+ }
+
+TInt CTBitGdiContext::GetInterface(TUid /*aInterfaceId*/, TAny*& aInterface)
+ {
+ aInterface = NULL;
+ return KErrNotSupported;
+ }
+
+void CTBitGdiContext::CopySettings(const CTContextBase& aGc)
+ {
+ CTBitGdiContext* gc = (CTBitGdiContext*)&aGc;
+ iGc->CopySettings(*(gc->iGc));
+ }