--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m2g_akn/src/M2GUtils.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2005-2006 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: Util methods
+*
+*/
+
+// INCLUDE FILES
+#include <bitdev.h> // CFbsBitmapDevice
+#include <bitstd.h> // CFbsBitGc
+#include <e32math.h> // FRand
+#include <swtfunctor.h>
+#include "M2GUtils.h"
+
+M2G_NS_START
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class TSWTBitBlt;
+class TM2GBitmapLock;
+// -----------------------------------------------------------------------------
+// M2GBitmapUtils::BitBlt
+// -----------------------------------------------------------------------------
+TInt M2GBitmapUtils::BitBlt(CFbsBitmap& aTarget,
+ const CFbsBitmap& aSource,
+ const TPoint& aPoint,
+ const TRect* aRect,
+ const CFbsBitmap* aSourceMask)
+{
+ M2G_DEBUG_2("M2G_DEBUG: M2GBitmapUtils::BitBlt() - Point(x=%d, y=%d)", aPoint.iX, aPoint.iY);
+ CFbsBitGc* context = NULL;
+ CFbsBitmapDevice* device = NULL;
+ TInt err = KM2GOk;
+ TRAP(err, (device = CFbsBitmapDevice::NewL(&aTarget)));
+ if ((err == KM2GOk) && (device != NULL))
+ {
+ err = device->CreateContext(context);
+ if ((err == KM2GOk) && (context != NULL))
+ {
+ M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - CFbsBitGc::BitBlt()");
+ if (aRect)
+ {
+ // Check if mask
+ if (aSourceMask)
+ {
+ M2G_DEBUG_4("M2G_DEBUG: M2GBitmapUtils::BitBlt() - mask rect(x1=%d, y1=%d, x2=%d, y2=%d)", aRect->iTl.iX, aRect->iTl.iY, aRect->iBr.iX, aRect->iBr.iY);
+ // A pixel that is masked by a BLACK is NOT transferred to a destination rectangle.
+ context->BitBltMasked(aPoint, &aSource, *aRect, aSourceMask, ETrue);
+ err = KM2GOk;
+ }
+ else
+ {
+ M2G_DEBUG_4("M2G_DEBUG: M2GBitmapUtils::BitBlt() - rect(x1=%d, y1=%d, x2=%d, y2=%d)", aRect->iTl.iX, aRect->iTl.iY, aRect->iBr.iX, aRect->iBr.iY);
+ context->BitBlt(aPoint, &aSource, *aRect);
+ err = KM2GOk;
+ }
+ }
+ else
+ {
+ M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - no rect");
+ context->BitBlt(aPoint, &aSource);
+ err = KM2GOk;
+ }
+ }
+ }
+ delete context;
+ delete device;
+ context = NULL;
+ device = NULL;
+ M2G_DEBUG_1("M2G_DEBUG: M2GBitmapUtils::BitBlt() - end: %d", err);
+ return err;
+}
+TInt M2GBitmapUtils::BitBlt(CBitmapContext& aTargetContext,
+ const CFbsBitmap& aSource,
+ const TPoint& aPoint,
+ const TRect* aRect,
+ const CFbsBitmap* aSourceMask,
+ MSwtClient* /*aClientHandle*/,
+ TBool aUseNativeClear /*= EFalse*/)
+{
+ M2G_DEBUG_2("M2G_DEBUG: M2GBitmapUtils::BitBlt() - Point(x=%d, y=%d)", aPoint.iX, aPoint.iY);
+ TInt err = KM2GOk;
+ TSWTBitBlt bitBlitter(aTargetContext, aPoint,
+ &aSource, aRect, aSourceMask, aUseNativeClear);
+ bitBlitter();
+ M2G_DEBUG_1("M2G_DEBUG: M2GBitmapUtils::BitBlt() - end: %d", err);
+ return err;
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::TM2GRenderRect
+// -----------------------------------------------------------------------------
+TM2GRenderRect::TM2GRenderRect(
+ TInt aAnchorX, TInt aAnchorY,
+ TInt aClipX, TInt aClipY,
+ TInt aClipW, TInt aClipH)
+ : TRect(
+ TPoint(aClipX, aClipY),
+ TSize(aClipW, aClipH)),
+ iAnchorX(aAnchorX),
+ iAnchorY(aAnchorY)
+{
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::TM2GRenderRect
+// -----------------------------------------------------------------------------
+TM2GRenderRect::TM2GRenderRect(TInt* aDimensions, TInt /*aLength*/)
+ : TRect(
+ TPoint(aDimensions[EClipX], aDimensions[EClipY]),
+ TSize(aDimensions[EClipW], aDimensions[EClipH])),
+ iAnchorX(aDimensions[EAnchorX]),
+ iAnchorY(aDimensions[EAnchorY])
+{
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::~TM2GRenderRect
+// -----------------------------------------------------------------------------
+TM2GRenderRect::~TM2GRenderRect()
+{
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::TM2GRenderRect
+// -----------------------------------------------------------------------------
+TM2GRenderRect::TM2GRenderRect(const TM2GRenderRect& aRd)
+{
+ (*this = aRd);
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::operator=
+// -----------------------------------------------------------------------------
+TM2GRenderRect& TM2GRenderRect::operator=(const TM2GRenderRect& aRd)
+{
+ if (this != &aRd)
+ {
+ iAnchorX = aRd.iAnchorX;
+ iAnchorY = aRd.iAnchorY;
+ SetRect(aRd.iTl.iX, aRd.iTl.iY, aRd.iBr.iX, aRd.iBr.iY);
+ }
+ return *this;
+}
+
+// -----------------------------------------------------------------------------
+// TM2GRenderRect::GetRegionSizeInPixels
+// -----------------------------------------------------------------------------
+TSize TM2GRenderRect::GetRegionSizeInPixels(
+ TM2GRenderRect& aRect,
+ const TSize& aSz)
+{
+ return TSize(
+ // determine the width of the region to be paint
+ M2GGeneral::Min< TInt >(aRect.GetAnchorX() + aSz.iWidth, aRect.GetClipX() + aRect.GetClipW()) -
+ M2GGeneral::Max< TInt >(aRect.GetAnchorX(), aRect.GetClipX()),
+ // determine the height of the region to be paint
+ M2GGeneral::Min< TInt >(aRect.GetAnchorY() + aSz.iHeight, aRect.GetClipY() + aRect.GetClipH()) -
+ M2GGeneral::Max< TInt >(aRect.GetAnchorY(), aRect.GetClipY()));
+}
+
+
+// -----------------------------------------------------------------------------
+// TM2GBitmapLock::TM2GBitmapLock
+// -----------------------------------------------------------------------------
+TM2GBitmapLock::TM2GBitmapLock(const CFbsBitmap* aBitmap, TBool aLock)
+ : iBitmap(aBitmap), iIsLocked(EFalse)
+{
+ if (aLock)
+ {
+ Lock();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// TM2GBitmapLock::~TM2GBitmapLock
+// -----------------------------------------------------------------------------
+TM2GBitmapLock::~TM2GBitmapLock()
+{
+ Unlock();
+}
+
+// -----------------------------------------------------------------------------
+// TM2GBitmapLock::Lock()
+// -----------------------------------------------------------------------------
+void TM2GBitmapLock::Lock()
+{
+ if (iBitmap && !iIsLocked)
+ {
+ iBitmap->LockHeap();
+ iIsLocked = ETrue;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// TM2GBitmapLock::Unlock()
+// -----------------------------------------------------------------------------
+void TM2GBitmapLock::Unlock()
+{
+ if (iBitmap && iIsLocked)
+ {
+ iBitmap->UnlockHeap();
+ iIsLocked = EFalse;
+ }
+}
+
+TSWTBitBlt::TSWTBitBlt(CBitmapContext& aTargetContext,
+ const TPoint& aPoint,
+ const CFbsBitmap* aBitmap,
+ const TRect* aSourceRect,
+ const CFbsBitmap* aMaskBitmap,
+ TBool aUseNativeClear)
+ : iTargetContext(aTargetContext),
+ iPoint(aPoint),
+ iUseNativeClear(aUseNativeClear)
+{
+ iBitmap = aBitmap;
+ iRect = aSourceRect;
+ iMaskBitmap = aMaskBitmap;
+}
+void TSWTBitBlt::operator()() const
+{
+ M2G_DEBUG_0("TSWTBitBlt()+");
+ CFbsBitmap* tempBitmap = new(ELeave) CFbsBitmap;
+ CleanupStack::PushL(tempBitmap);
+ User::LeaveIfError(tempBitmap->Duplicate(iBitmap->Handle()));
+ if (iRect)
+ {
+ if (iUseNativeClear)
+ {
+ iTargetContext.SetBrushColor(KRgbWhite);
+ iTargetContext.Clear(*iRect);
+ }
+ if (iMaskBitmap)
+ {
+ CFbsBitmap* tempMask = new(ELeave) CFbsBitmap;
+ CleanupStack::PushL(tempMask);
+ User::LeaveIfError(tempMask->Duplicate(iMaskBitmap->Handle()));
+ iTargetContext.BitBltMasked(
+ iPoint, tempBitmap, *iRect, tempMask, ETrue);
+ CleanupStack::PopAndDestroy(tempMask);
+ }
+ else
+ {
+ iTargetContext.BitBlt(iPoint, tempBitmap, *iRect);
+ }
+ }
+ else
+ {
+ if (iUseNativeClear)
+ {
+ iTargetContext.SetBrushColor(KRgbWhite);
+ iTargetContext.Clear();
+ }
+ iTargetContext.BitBlt(iPoint, tempBitmap);
+ }
+ CleanupStack::PopAndDestroy(tempBitmap);
+ M2G_DEBUG_0("TSWTBitBlt()-");
+}
+M2G_NS_END