author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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)); }