javauis/m2g_qt/src/CM2GRenderContext.cpp
author hgs
Fri, 23 Jul 2010 12:27:20 +0300
changeset 56 abc41079b313
permissions -rw-r--r--
v2.2.7_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
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:  Render context implementation
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 <eikenv.h> // CCoeEnv
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
#include <graphics.h>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
#include "CM2GRenderContext.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
#include "MM2GSVGProxy.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
#include "svgtbitmap.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
#include <ImageConversion.h>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
#include <f32file.h>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
M2G_NS_START
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
// EXTERNAL DATA STRUCTURES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
// EXTERNAL FUNCTION PROTOTYPES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
// CONSTANTS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
/* static */ const TReal32       MM2GRenderContext::KFullOpaque             = 1.0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
/* static */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
const TReal32       MM2GRenderContext::KFullTransparency       = 0.0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
/* static */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
const TUint8        MM2GRenderContext::KMaxAlphaValue          = 255;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
/* static */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
const TDisplayMode  MM2GRenderContext::KDefaultDisplayMode     = EColor16MA;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
/* static */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
const TDisplayMode  MM2GRenderContext::KMaskDisplayMode        = EGray256;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
// MACROS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
// LOCAL CONSTANTS AND MACROS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
// MODULE DATA STRUCTURES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
// LOCAL FUNCTION PROTOTYPES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
// FORWARD DECLARATIONS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
// CM2GRenderContext::CM2GRenderContext
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
CM2GRenderContext::CM2GRenderContext()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
        : CBase(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
        iProxy(NULL),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
        iEngineHandle(M2G_INVALID_HANDLE),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
        iAlpha(MM2GRenderContext::KFullOpaque),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
        iScaledAlpha(MM2GRenderContext::KMaxAlphaValue),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
        iImgBmp(NULL),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
        iWindowSurface(NULL)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::CM2GRenderContext");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
// CM2GRenderContext::NewL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
CM2GRenderContext* CM2GRenderContext::NewL(MM2GSVGProxy* aProxy)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::NewL()");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
    CM2GRenderContext* self = new(ELeave) CM2GRenderContext;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
    CleanupStack::PushL(self);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
    self->ConstructL(aProxy);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
    CleanupStack::Pop();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
    return self;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
// CM2GRenderContext::~CM2GRenderContext
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
CM2GRenderContext::~CM2GRenderContext()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
    M2G_DEBUG_2("M2G_DEBUG: CM2GRenderContext::~CM2GRenderContext() - proxy=%d, engine=%d", iProxy, iEngineHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    if ((iEngineHandle != M2G_INVALID_HANDLE) && (iProxy != NULL))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
        TRAP_IGNORE(iProxy->DeleteSvgEngineL(iEngineHandle));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
    if(iWindowSurface)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
            delete iWindowSurface;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
    if(targetBitmap)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
        delete targetBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
    if(iTargetQImage)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
        delete iTargetQImage;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
    if(tempBitmapForMask)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
        delete tempBitmapForMask;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
    delete iImgBmp;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
    iFbsSession.Disconnect();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
// CM2GRenderContext::BindL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
void CM2GRenderContext::BindL(TInt& aTargetHandle)
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: CM2GRenderContext::BindL()");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
    // get the screen size
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
    TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();             
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
        
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
    iWindowSurface = (reinterpret_cast<Java::GFX::WindowSurface*>(aTargetHandle));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
    //wSurfaceType   = (Java::GFX::WindowSurfaceType)iWindowSurface->getType();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
    wSurfaceType = Java::GFX::WsTypeQtImage;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
    iWindowSurface->bind(wSurfaceType);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
        
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
    switch(wSurfaceType)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
        case Java::GFX::WsTypeQtImage:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
            User::LeaveIfNull(iOffScreenQImage = iWindowSurface->getQtImage());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
            targetBitmap = new CSvgtBitmap ((TInt8*)iOffScreenQImage->bits(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
                    TSize(iOffScreenQImage->size().width(),iOffScreenQImage->size().height()),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
                            EColor16MU,iOffScreenQImage->bytesPerLine());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
            break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
        /*TODO for time being..case Java::GFX::WsTypeQtImage:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
            User::LeaveIfNull(iTargetQImage   = iWindowSurface->getQtImage());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
            InitializeQImageOffscreenBufferL(screenSize,iTargetQImage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
            break;*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
            
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
        case Java::GFX::WsTypeSymbianBitmap:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
            CFbsBitmap* tempBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
            User::LeaveIfNull(tempBitmap = (reinterpret_cast<Java::GFX::WindowSurface*>(aTargetHandle)->getSymbianBitmap()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
            InitializeCFbsBitmapOffscreenBufferL(screenSize,tempBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
            //iOffScreenBitmap = new(ELeave) CFbsBitmap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
            break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
            
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
        default:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
            User::Leave(KErrNotSupported);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
            break;
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
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   158
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   159
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   160
// CM2GRenderContext::InitializeQImageOffscreenBufferL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   161
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   162
void CM2GRenderContext::InitializeQImageOffscreenBufferL(TSize aScreenSize,QImage* aQimage)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   163
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   164
    QSize aSize;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   165
    aSize.setHeight(aScreenSize.iHeight);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   166
    aSize.setWidth(aScreenSize.iWidth);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   167
    iOffScreenQImage = new QImage(aSize,aQimage->format());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   168
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   169
    //TODO For time being the format is EColor16MU 
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   170
    targetBitmap = new CSvgtBitmap ((TInt8*)iOffScreenQImage->bits(),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   171
    TSize(iOffScreenQImage->size().width(),iOffScreenQImage->size().height()),
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   172
            EColor16MU,iOffScreenQImage->bytesPerLine());
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
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   176
// CM2GRenderContext::InitializeCFbsBitmapOffscreenBufferL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   177
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   178
void CM2GRenderContext::InitializeCFbsBitmapOffscreenBufferL(TSize aScreenSize,CFbsBitmap* aBitmap)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   179
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   180
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   181
    iOffScreenBitmap = new(ELeave) CFbsBitmap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   182
    User::LeaveIfError(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   183
            iOffScreenBitmap->Create(aScreenSize, aBitmap->DisplayMode()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   184
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   185
//    TODO check for stride in case of bitmap.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   186
//    iTargetBitmap = new CSvgtBitmap( (TInt8*)iOffScreenBitmap->DataAddress() ,aScreenSize,iOffScreenBitmap->DisplayMode()/*KDefaultDisplayMode TODO chk this*/,iOffScreenBitmap->ScanLineLength(iOffScreenBitmap->SizeInPixels().iWidth,KDefaultDisplayMode) );
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
// CM2GRenderContext::GetImgHandleL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   191
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   192
/*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   193
 * TODO we don't need method anymore as now we need Surface handle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   194
 * TM2GBitmapHandle CM2GRenderContext::GetImgHandleL() const
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   195
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   196
    User::LeaveIfNull(iImgBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   197
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   198
    return REINTERPRET_CAST(TM2GBitmapHandle, iImgBmp);
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
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   203
// CM2GRenderContext::InitImageBitmapL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   204
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   205
void CM2GRenderContext::InitImageBitmapL()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   206
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   207
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - begin");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   208
    // get the screen size
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   209
    TSize screenSize = CEikonEnv::Static()->ScreenDevice()->SizeInPixels();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   210
    switch (wSurfaceType)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   211
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   212
        case Java::GFX::WsTypeQtImage:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   213
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   214
            break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   215
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   216
        case Java::GFX::WsTypeSymbianBitmap:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   217
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   218
             break;   
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   219
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   220
        
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   221
        default:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   222
            break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   223
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   224
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::InitImageBitmapL() - end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   225
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   226
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   227
// CM2GRenderContext::ReleaseL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   228
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   229
void CM2GRenderContext::ReleaseL()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   230
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   231
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - begin");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   232
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   233
    iTargetQImage = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   234
    iOffScreenQImage = NULL;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   235
    iWindowSurface->release();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   236
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   237
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ReleaseL() - end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   238
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   239
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   240
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   241
// CM2GRenderContext::RenderL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   242
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   243
void CM2GRenderContext::RenderLCDUIL(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   244
    TM2GSvgDocumentHandle& aSvgDocHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   245
    const TReal32 aCurrentTime,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   246
    TInt aSvgW, TInt aSvgH,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   247
    TM2GRenderRect& aRect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   248
)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   249
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   250
    // prepare viewbox
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   251
    TRect viewbox;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   252
    TPoint anchor;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   253
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   254
    PrepareViewbox(aRect, aSvgW, aSvgH, viewbox, anchor);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   255
    RenderLCDUIL(aSvgDocHandle, aCurrentTime, viewbox, anchor);
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
void CM2GRenderContext::RenderESWTL(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   260
    TM2GSvgDocumentHandle& aSvgDocHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   261
    const TReal32 aCurrentTime,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   262
    TInt aSvgW, TInt aSvgH,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   263
    TM2GRenderRect& aRect,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   264
    TBool aUseNativeClear,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   265
    TInt* aReturnData)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   266
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   267
    // prepare viewbox
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   268
    TRect viewbox;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   269
    TPoint anchor;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   270
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   271
    PrepareViewbox(aRect, aSvgW, aSvgH, viewbox, anchor);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   272
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   273
    aReturnData[0] = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   274
    aReturnData[1] = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   275
    aReturnData[2] = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   276
    aReturnData[3] = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   277
    aReturnData[4] = anchor.iX;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   278
    aReturnData[5] = anchor.iY;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   279
    aReturnData[6] = viewbox.iTl.iX;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   280
    aReturnData[7] = viewbox.iTl.iY;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   281
    aReturnData[8] = viewbox.Width();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   282
    aReturnData[9] = viewbox.Height();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   283
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   284
    RenderESWTL(aSvgDocHandle, aCurrentTime, viewbox, anchor, aUseNativeClear, aReturnData);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   285
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   286
    return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   287
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   288
// CM2GRenderContext::SetRenderingQualityL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   289
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   290
void CM2GRenderContext::SetRenderingQualityL(TInt aMode)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   291
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   292
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::SetRenderingQualityL()");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   293
    User::LeaveIfNull(iProxy);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   294
    iProxy->RenderQualityL(iEngineHandle, aMode);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   295
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   296
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   297
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   298
// CM2GRenderContext::SetTransparencyL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   299
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   300
void CM2GRenderContext::SetTransparency(TReal32 aAlpha)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   301
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   302
    iAlpha = aAlpha;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   303
    iScaledAlpha = STATIC_CAST(TUint8, (aAlpha * MM2GRenderContext::KMaxAlphaValue));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   304
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   305
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   306
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   307
// CM2GRenderContext::ConstructL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   308
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   309
void CM2GRenderContext::ConstructL(MM2GSVGProxy* aProxy)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   310
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   311
    // Init member variables
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   312
    SetTransparency(MM2GRenderContext::KFullOpaque);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   313
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   314
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - begin");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   315
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   316
    if (aProxy)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   317
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   318
        iProxy = aProxy;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   319
        iProxy->CreateSvgEngineL(iEngineHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   320
        M2G_DEBUG_2("M2G_DEBUG: CM2GRenderContext::ConstructL() - proxy: %d, new engine: %d", iProxy, iEngineHandle);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   321
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   322
    else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   323
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   324
        M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - proxy is invalid");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   325
        M2G_THROW(KM2GArgNotOk);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   326
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   327
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   328
    User::LeaveIfError(iFbsSession.Connect());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   329
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ConstructL() - end");
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
// CM2GRenderContext::PrepareViewbox
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   333
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   334
void CM2GRenderContext::PrepareViewbox(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   335
    TM2GRenderRect& aRr,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   336
    TInt aSvgW, TInt aSvgH,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   337
    TRect& aViewbox, TPoint& aAnchor)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   338
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   339
    M2G_DEBUG_6("M2G_DEBUG: CM2GRenderContext::PrepareViewbox() cX=%d, cY=%d, cW=%d, cH=%d, anchorX=%d, anchorY=%d - begin", aRr.GetClipX(), aRr.GetClipY(), aRr.GetClipW(), aRr.GetClipH(), aRr.GetAnchorX(), aRr.GetAnchorY());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   340
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   341
    // Create an anchor point and an svg render area rect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   342
    aAnchor.SetXY(aRr.GetAnchorX(), aRr.GetAnchorY());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   343
    aViewbox.SetRect(aAnchor, TSize(aSvgW, aSvgH));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   344
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   345
    // NOTE: It's already verified in Java side that the SVG render area and
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   346
    // the clip area intersects each other
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   347
    aViewbox.Intersection(aRr);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   348
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   349
    // Check if the clip rect has changes the svg rect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   350
    if (aViewbox.iTl != aAnchor)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   351
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   352
        // Update anchor position
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   353
        TPoint oldAnchor(aAnchor);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   354
        aAnchor = aViewbox.iTl;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   355
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   356
        // Update svg rect
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   357
        aViewbox.Move((-oldAnchor.iX), (-oldAnchor.iY));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   358
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   359
    else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   360
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   361
        // The clip rect has not changed the svg rect. Only the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   362
        // anchor position need to be updated
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   363
        aViewbox.Move(-aAnchor.iX, -aAnchor.iY);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   364
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   365
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::PrepareViewbox() - end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   366
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   367
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   368
void CM2GRenderContext::RenderLCDUIL(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   369
                TM2GSvgDocumentHandle& aSvgDocHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   370
                TReal32 aCurrentTime,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   371
                const TRect& aViewbox,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   372
                const TPoint& aAnchor)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   373
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   374
    M2G_DEBUG_4("M2G_DEBUG: CM2GRenderContext::RenderL() viewbox: x=%d, y=%d, w=%d, h=%d begin", aViewbox.iTl.iX, aViewbox.iTl.iY, aViewbox.Size().iWidth, aViewbox.Size().iHeight);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   375
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   376
    // No need to render if content is fully transparency (i.e. alpha=0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   377
    if (iScaledAlpha == 0)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   378
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   379
        return;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   380
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   381
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   382
    QStringList list;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   383
    list <<"QImage-Format_RGB32";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   384
    TBuf8<32> fname;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   385
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   386
    // 1: render the svg document on the iImgBmp
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   387
    iProxy->RenderDocumentL(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   388
        iEngineHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   389
        aSvgDocHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   390
        (TM2GSvgBitmapHandle)targetBitmap 
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   391
        , (TUint)NULL, aCurrentTime);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   392
      
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   393
      fname.Zero();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   394
      fname.Format(_L8("c:\\%s.bmp"), list.at(0).toLocal8Bit().constData());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   395
      TBool ret = iOffScreenQImage->save((const char*)fname.PtrZ());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   396
      
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   397
      QPixmap pixmap = QPixmap::fromImage(*iOffScreenQImage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   398
      tempBitmapForMask  = pixmap.toSymbianCFbsBitmap();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   399
      
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   400
      TFileName       bitmapFilename;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   401
      bitmapFilename.Copy(_L("c:\\bugbitmap"));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   402
      bitmapFilename.AppendNum(tempBitmapForMask->Handle());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   403
      bitmapFilename.Append(_L(".bmp"));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   404
      SaveBitmapL(*tempBitmapForMask, bitmapFilename);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   405
      
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   406
      iWindowSurface->release();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   407
      M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::RenderL() end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   408
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   409
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   410
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   411
/*TODO
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   412
 * Write the separate RenderDocumentL method for QImage and CFbsBitmap 
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   413
 * also handle subsequent BitBlt and
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   414
 * CreateAlphaBlendMaskL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   415
 * */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   416
void CM2GRenderContext::RenderESWTL(
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   417
    TM2GSvgDocumentHandle& aSvgDocHandle,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   418
    TReal32 aCurrentTime,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   419
    const TRect& aViewbox,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   420
    const TPoint& aAnchor,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   421
    TBool /*aUseNativeClear*/,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   422
    TInt* aReturnData)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   423
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   424
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   425
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   426
// CM2GRenderContext::CreateAlphaBlendMask
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   427
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   428
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   429
// CM2GRenderContext::ClearBitmapL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   430
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   431
void CM2GRenderContext::ClearBitmapL(CFbsBitmap* aBmp)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   432
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   433
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - begin");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   434
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   435
    User::LeaveIfNull(aBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   436
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   437
    TM2GBitmapLock lock(aBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   438
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   439
    TSize   size            = aBmp->SizeInPixels();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   440
    TInt    scanlineLength  = aBmp->ScanLineLength(size.iWidth, aBmp->DisplayMode());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   441
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   442
    TUint32* buf = aBmp->DataAddress();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   443
    char* bufBytes = REINTERPRET_CAST(char*, buf);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   444
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   445
    Mem::FillZ(bufBytes,  size.iHeight * scanlineLength);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   446
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   447
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   448
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   449
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   450
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   451
void CM2GRenderContext::ClearSurfaceL(TM2GSvgBitmapHandle aSvgtBmpHandle )
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   452
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   453
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap - begin");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   454
//TODO As Currently we are not using this functionality.     
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   455
/*     switch(wSurfaceType)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   456
         {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   457
         case Java::GFX::WsTypeQtImage:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   458
             QImage* tempQImage;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   459
             User::LeaveIfNull(tempQImage = (reinterpret_cast<Java::GFX::WindowSurface*>(aSvgtBmpHandle)->getQtImage()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   460
             //TODO Do we need to lock the qimage as implemented below        TM2GBitmapLock lock(tempBitmap);?
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   461
             QSize   sizeQimage            = tempQImage->size();//TODO Check for SizeInPixels
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   462
             TInt    scanlineLengthQimage  = tempQImage->bytesPerLine();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   463
             //uchar* bufBytesQimage = REINTERPRET_CAST(uchar*, tempQImage->bits());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   464
             
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   465
             Mem::FillZ(tempQImage->bits(),  sizeQimage.height() * scanlineLengthQimage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   466
             
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   467
             M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearSurface Qimage Clear function- end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   468
             break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   469
             
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   470
         case Java::GFX::WsTypeSymbianBitmap:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   471
             CFbsBitmap* tempBitmap;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   472
             User::LeaveIfNull(tempBitmap = (reinterpret_cast<Java::GFX::WindowSurface*>(aSvgtBmpHandle)->getSymbianBitmap()));
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   473
             TM2GBitmapLock lock(tempBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   474
             TSize   sizeBmp            = tempBitmap->SizeInPixels();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   475
             TInt    scanlineLengthBmp  = tempBitmap->ScanLineLength(sizeBmp.iWidth, tempBitmap->DisplayMode());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   476
             TUint32* bufBmp = tempBitmap->DataAddress();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   477
             char* bufBytesBmp = REINTERPRET_CAST(char*, bufBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   478
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   479
             Mem::FillZ(bufBytesBmp,  sizeBmp.iHeight * scanlineLengthBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   480
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   481
             M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearSurface Bitmap Clear function- end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   482
             break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   483
             
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   484
         default:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   485
             M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::ClearBitmap Type Not Supported.- end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   486
             User::Leave(KErrNotSupported);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   487
             break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   488
         }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   489
 */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   490
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   491
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   492
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   493
// CM2GRenderContext::FillBitmapL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   494
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   495
void CM2GRenderContext::FillBitmapL(CFbsBitmap* aBmp, const TUint8& aChar)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   496
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   497
    M2G_DEBUG_1("M2G_DEBUG: CM2GRenderContext::FillBitmap() filled with=%d - begin", aChar);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   498
    User::LeaveIfNull(aBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   499
    TM2GBitmapLock lock(aBmp);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   500
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   501
    TSize   size            = aBmp->SizeInPixels();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   502
    TInt    scanlineLength  = aBmp->ScanLineLength(size.iWidth, aBmp->DisplayMode());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   503
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   504
    TUint32* buf = aBmp->DataAddress();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   505
    char* bufBytes = REINTERPRET_CAST(char*, buf);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   506
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   507
    Mem::Fill(bufBytes, size.iHeight * scanlineLength, aChar);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   508
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   509
    M2G_DEBUG_0("M2G_DEBUG: CM2GRenderContext::FillBitmap - end");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   510
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   511
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   512
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   513
// CM2GRenderContext::GetBufferHandleL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   514
// -----------------------------------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   515
TM2GSvgBitmapHandle CM2GRenderContext::GetBufferHandleL() const
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   516
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   517
    switch(wSurfaceType)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   518
           {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   519
           case Java::GFX::WsTypeQtImage:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   520
               User::LeaveIfNull(iOffScreenQImage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   521
               return REINTERPRET_CAST(TM2GSvgBitmapHandle , iOffScreenQImage);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   522
	           break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   523
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   524
           case Java::GFX::WsTypeSymbianBitmap:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   525
               User::LeaveIfNull(iOffScreenBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   526
               return REINTERPRET_CAST(TM2GSvgBitmapHandle , iOffScreenBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   527
               break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   528
               
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   529
           default:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   530
               User::Leave(KErrNotSupported);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   531
               break;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   532
           }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   533
    
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   534
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   535
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   536
//CODE to check the Bitmap Contain.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   537
TInt CM2GRenderContext::SaveBitmapL(const CFbsBitmap& aNVGBitmap, const TFileName& aFileName)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   538
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   539
        TFileName       bitmapFilename;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   540
        bitmapFilename.Copy(aFileName);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   541
        RFs aFs;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   542
        User::LeaveIfError(aFs.Connect());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   543
        CImageEncoder * imgEncoder = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   544
        TRequestStatus  requesStatus = 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   545
        imgEncoder = CImageEncoder::FileNewL(aFs, bitmapFilename, _L8("image/bmp"), CImageEncoder::EOptionAlwaysThread);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   546
        imgEncoder->Convert(&requesStatus, aNVGBitmap);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   547
        User::WaitForRequest(requesStatus);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   548
        delete imgEncoder;       
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   549
        aFs.Close();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   550
        return 0;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   551
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   552
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   553
M2G_NS_END