javauis/m2g_qt/src/M2GUtils.cpp
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 56 abc41079b313
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
87
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
     2
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     3
* All rights reserved.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     8
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    11
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    12
* Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    13
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    14
* Description:  Util methods
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    15
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    16
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    17
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
// INCLUDE FILES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
#include <bitdev.h> // CFbsBitmapDevice
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
#include <bitstd.h> // CFbsBitGc
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
#include <e32math.h> // FRand
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
#include "M2GUtils.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
M2G_NS_START
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
// EXTERNAL DATA STRUCTURES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
// EXTERNAL FUNCTION PROTOTYPES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
// CONSTANTS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
// MACROS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
// LOCAL CONSTANTS AND MACROS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
// MODULE DATA STRUCTURES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
// LOCAL FUNCTION PROTOTYPES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
// FORWARD DECLARATIONS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
class TSWTBitBlt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
class TM2GBitmapLock;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
// M2GBitmapUtils::BitBlt
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
TInt M2GBitmapUtils::BitBlt(CFbsBitmap& aTarget,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
                            const CFbsBitmap& aSource,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
                            const TPoint& aPoint,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
                            const TRect* aRect,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
                            const CFbsBitmap* aSourceMask)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
    M2G_DEBUG_2("M2G_DEBUG: M2GBitmapUtils::BitBlt() - Point(x=%d, y=%d)", aPoint.iX, aPoint.iY);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
    CFbsBitGc* context = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
    CFbsBitmapDevice* device = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
    TInt err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
    TRAP(err, (device = CFbsBitmapDevice::NewL(&aTarget)));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
    if ((err == KM2GOk) && (device != NULL))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
        err = device->CreateContext(context);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
        if ((err == KM2GOk) && (context != NULL))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
            M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - CFbsBitGc::BitBlt()");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
            if (aRect)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
                // Check if mask
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
                if (aSourceMask)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
                    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);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
                    // A pixel that is masked by a BLACK is NOT transferred to a destination rectangle.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
                    context->BitBltMasked(aPoint, &aSource, *aRect, aSourceMask, ETrue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
                    err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
                else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
                    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);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
                    context->BitBlt(aPoint, &aSource, *aRect);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
                    err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
            else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
                M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - no rect");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
                context->BitBlt(aPoint, &aSource);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
                err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
    delete context;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
    delete device;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
    context = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    device = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
    M2G_DEBUG_1("M2G_DEBUG: M2GBitmapUtils::BitBlt() - end: %d", err);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
    return err;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
TInt M2GBitmapUtils::BitQBlt(QImage& aTargetQimage,
87
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
    99
                             const QImage& aSourceQimage,
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
   100
                             const TPoint& aPoint,
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
   101
                             const TRect* aRect,
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
   102
                             const CFbsBitmap* aSourceMask)
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
    M2G_DEBUG_2("M2G_DEBUG: M2GBitmapUtils::BitQBlt() - Point(x=%d, y=%d)", aPoint.iX, aPoint.iY);
87
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
   105
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
    QPixmap pixmapTarget = QPixmap::fromImage(aTargetQimage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
    CFbsBitmap* aTarget  = pixmapTarget.toSymbianCFbsBitmap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
    QPixmap pixmapSource = QPixmap::fromImage(aSourceQimage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
    CFbsBitmap* aSource = pixmapSource.toSymbianCFbsBitmap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
    CFbsBitGc* context = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
    CFbsBitmapDevice* device = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
    TInt err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
    TRAP(err, (device = CFbsBitmapDevice::NewL(aTarget)));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
    if ((err == KM2GOk) && (device != NULL))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
        err = device->CreateContext(context);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
        if ((err == KM2GOk) && (context != NULL))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
            M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - CFbsBitGc::BitBlt()");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
            if (aRect)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
                // Check if mask
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
                if (aSourceMask)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
                    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);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
                    // A pixel that is masked by a BLACK is NOT transferred to a destination rectangle.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
                    context->BitBltMasked(aPoint, aSource, *aRect, aSourceMask, ETrue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
                    err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
                else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
                    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);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
                    context->BitBlt(aPoint, aSource, *aRect);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
                    err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
            else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
                M2G_DEBUG_0("M2G_DEBUG: M2GBitmapUtils::BitBlt() - no rect");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
                context->BitBlt(aPoint, aSource);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
                err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
    delete context;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
    delete device;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
    context = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
    device = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
    M2G_DEBUG_1("M2G_DEBUG: M2GBitmapUtils::BitBlt() - end: %d", err);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
    return err;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   155
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   156
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   157
TInt M2GBitmapUtils::BitBlt(CBitmapContext& aTargetContext,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   158
                            const CFbsBitmap& aSource,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   159
                            const TPoint& aPoint,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   160
                            const TRect* aRect,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   161
                            const CFbsBitmap* aSourceMask,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   162
                            /*MSwtClient* aClientHandle,*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   163
                            TBool aUseNativeClear /*= EFalse*/)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   164
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   165
    M2G_DEBUG_2("M2G_DEBUG: M2GBitmapUtils::BitBlt() - Point(x=%d, y=%d)", aPoint.iX, aPoint.iY);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   166
    TInt err = KM2GOk;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   167
    TSWTBitBlt bitBlitter(aTargetContext, aPoint,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   168
                          &aSource, aRect, aSourceMask, aUseNativeClear);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   169
    bitBlitter();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   170
    M2G_DEBUG_1("M2G_DEBUG: M2GBitmapUtils::BitBlt() - end: %d", err);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   171
    return err;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   172
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   173
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   174
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   175
// TM2GRenderRect::TM2GRenderRect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   176
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   177
TM2GRenderRect::TM2GRenderRect(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   178
    TInt aAnchorX, TInt aAnchorY,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   179
    TInt aClipX, TInt aClipY,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   180
    TInt aClipW, TInt aClipH)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   181
        : TRect(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   182
            TPoint(aClipX, aClipY),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   183
            TSize(aClipW, aClipH)),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   184
        iAnchorX(aAnchorX),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   185
        iAnchorY(aAnchorY)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   186
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   187
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   188
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   189
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   190
// TM2GRenderRect::TM2GRenderRect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   191
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   192
TM2GRenderRect::TM2GRenderRect(TInt* aDimensions, TInt /*aLength*/)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   193
        : TRect(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   194
            TPoint(aDimensions[EClipX], aDimensions[EClipY]),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   195
            TSize(aDimensions[EClipW], aDimensions[EClipH])),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   196
        iAnchorX(aDimensions[EAnchorX]),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   197
        iAnchorY(aDimensions[EAnchorY])
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   198
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   199
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   200
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   201
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   202
// TM2GRenderRect::~TM2GRenderRect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   203
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   204
TM2GRenderRect::~TM2GRenderRect()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   205
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   206
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   207
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   208
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   209
// TM2GRenderRect::TM2GRenderRect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   210
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   211
TM2GRenderRect::TM2GRenderRect(const TM2GRenderRect& aRd)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   212
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   213
    (*this = aRd);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   214
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   215
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   216
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   217
// TM2GRenderRect::operator=
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   218
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   219
TM2GRenderRect& TM2GRenderRect::operator=(const TM2GRenderRect& aRd)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   220
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   221
    if (this != &aRd)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   222
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   223
        iAnchorX = aRd.iAnchorX;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   224
        iAnchorY = aRd.iAnchorY;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   225
        SetRect(aRd.iTl.iX, aRd.iTl.iY, aRd.iBr.iX, aRd.iBr.iY);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   226
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   227
    return *this;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   228
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   229
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   230
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   231
// TM2GRenderRect::GetRegionSizeInPixels
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   232
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   233
TSize TM2GRenderRect::GetRegionSizeInPixels(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   234
    TM2GRenderRect& aRect,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   235
    const TSize& aSz)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   236
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   237
    return TSize(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   238
               // determine the width of the region to be paint
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   239
               M2GGeneral::Min< TInt >(aRect.GetAnchorX() + aSz.iWidth, aRect.GetClipX() + aRect.GetClipW()) -
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   240
               M2GGeneral::Max< TInt >(aRect.GetAnchorX(), aRect.GetClipX()),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   241
               // determine the height of the region to be paint
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   242
               M2GGeneral::Min< TInt >(aRect.GetAnchorY() + aSz.iHeight, aRect.GetClipY() + aRect.GetClipH()) -
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   243
               M2GGeneral::Max< TInt >(aRect.GetAnchorY(), aRect.GetClipY()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   244
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   245
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   246
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   247
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   248
// TM2GBitmapLock::TM2GBitmapLock
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   249
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   250
TM2GBitmapLock::TM2GBitmapLock(const CFbsBitmap* aBitmap, TBool aLock)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   251
        : iBitmap(aBitmap), iIsLocked(EFalse)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   252
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   253
    if (aLock)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   254
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   255
        Lock();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   256
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   257
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   258
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   259
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   260
// TM2GBitmapLock::~TM2GBitmapLock
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   261
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   262
TM2GBitmapLock::~TM2GBitmapLock()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   263
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   264
    Unlock();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   265
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   266
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   267
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   268
// TM2GBitmapLock::Lock()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   269
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   270
void TM2GBitmapLock::Lock()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   271
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   272
    if (iBitmap && !iIsLocked)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   273
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   274
        iBitmap->LockHeap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   275
        iIsLocked = ETrue;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   276
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   277
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   278
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   279
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   280
// TM2GBitmapLock::Unlock()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   281
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   282
void TM2GBitmapLock::Unlock()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   283
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   284
    if (iBitmap && iIsLocked)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   285
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   286
        iBitmap->UnlockHeap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   287
        iIsLocked = EFalse;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   288
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   289
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   290
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   291
TSWTBitBlt::TSWTBitBlt(CBitmapContext& aTargetContext,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   292
                       const TPoint& aPoint,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   293
                       const CFbsBitmap* aBitmap,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   294
                       const TRect* aSourceRect,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   295
                       const CFbsBitmap* aMaskBitmap,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   296
                       TBool aUseNativeClear)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   297
        : iTargetContext(aTargetContext),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   298
        iPoint(aPoint),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   299
        iUseNativeClear(aUseNativeClear)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   300
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   301
    iBitmap = aBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   302
    iRect = aSourceRect;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   303
    iMaskBitmap = aMaskBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   304
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   305
void TSWTBitBlt::operator()() const
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   306
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   307
    M2G_DEBUG_0("TSWTBitBlt()+");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   308
    CFbsBitmap* tempBitmap = new(ELeave) CFbsBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   309
    CleanupStack::PushL(tempBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   310
    User::LeaveIfError(tempBitmap->Duplicate(iBitmap->Handle()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   311
    if (iRect)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   312
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   313
        if (iUseNativeClear)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   314
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   315
            iTargetContext.SetBrushColor(KRgbWhite);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   316
            iTargetContext.Clear(*iRect);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   317
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   318
        if (iMaskBitmap)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   319
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   320
            CFbsBitmap* tempMask = new(ELeave) CFbsBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   321
            CleanupStack::PushL(tempMask);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   322
            User::LeaveIfError(tempMask->Duplicate(iMaskBitmap->Handle()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   323
            iTargetContext.BitBltMasked(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   324
                iPoint, tempBitmap, *iRect, tempMask, ETrue);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   325
            CleanupStack::PopAndDestroy(tempMask);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   326
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   327
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   328
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   329
            iTargetContext.BitBlt(iPoint, tempBitmap, *iRect);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   330
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   331
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   332
    else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   333
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   334
        if (iUseNativeClear)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   335
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   336
            iTargetContext.SetBrushColor(KRgbWhite);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   337
            iTargetContext.Clear();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   338
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   339
        iTargetContext.BitBlt(iPoint, tempBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   340
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   341
    CleanupStack::PopAndDestroy(tempBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   342
    M2G_DEBUG_0("TSWTBitBlt()-");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   343
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   344
M2G_NS_END