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