svgtopt/VGRenderer/SWVG/src/swopenvgtargetsurfaceimpl.cpp
author hgs
Thu, 14 Oct 2010 17:37:21 +0300
changeset 43 78ea4ce942e1
parent 26 796196dd6e68
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
796196dd6e68 201023_01
hgs
parents:
diff changeset
     1
/*
796196dd6e68 201023_01
hgs
parents:
diff changeset
     2
 * Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
796196dd6e68 201023_01
hgs
parents:
diff changeset
     3
 * All rights reserved.
796196dd6e68 201023_01
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
796196dd6e68 201023_01
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
796196dd6e68 201023_01
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
796196dd6e68 201023_01
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
796196dd6e68 201023_01
hgs
parents:
diff changeset
     8
 *
796196dd6e68 201023_01
hgs
parents:
diff changeset
     9
 * Initial Contributors:
796196dd6e68 201023_01
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
796196dd6e68 201023_01
hgs
parents:
diff changeset
    11
 *
796196dd6e68 201023_01
hgs
parents:
diff changeset
    12
 * Contributors:
796196dd6e68 201023_01
hgs
parents:
diff changeset
    13
 *
796196dd6e68 201023_01
hgs
parents:
diff changeset
    14
 * Description:  CSWVGTargetSurfaceImpl source file
796196dd6e68 201023_01
hgs
parents:
diff changeset
    15
 *
796196dd6e68 201023_01
hgs
parents:
diff changeset
    16
*/
796196dd6e68 201023_01
hgs
parents:
diff changeset
    17
43
hgs
parents: 26
diff changeset
    18
#include "swopenvgtargetsurfaceimpl.h"
26
796196dd6e68 201023_01
hgs
parents:
diff changeset
    19
    
796196dd6e68 201023_01
hgs
parents:
diff changeset
    20
#include <platform/vg/vgcontext.h>
796196dd6e68 201023_01
hgs
parents:
diff changeset
    21
796196dd6e68 201023_01
hgs
parents:
diff changeset
    22
#include <svgtbitmap.h>
796196dd6e68 201023_01
hgs
parents:
diff changeset
    23
796196dd6e68 201023_01
hgs
parents:
diff changeset
    24
CSWVGTargetSurfaceImpl::CSWVGTargetSurfaceImpl()
796196dd6e68 201023_01
hgs
parents:
diff changeset
    25
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    26
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    27
796196dd6e68 201023_01
hgs
parents:
diff changeset
    28
CSWVGTargetSurfaceImpl::~CSWVGTargetSurfaceImpl()
796196dd6e68 201023_01
hgs
parents:
diff changeset
    29
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    30
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    31
796196dd6e68 201023_01
hgs
parents:
diff changeset
    32
CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewL()
796196dd6e68 201023_01
hgs
parents:
diff changeset
    33
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    34
    CSWVGTargetSurfaceImpl* self = CSWVGTargetSurfaceImpl::NewLC();
796196dd6e68 201023_01
hgs
parents:
diff changeset
    35
    CleanupStack::Pop();
796196dd6e68 201023_01
hgs
parents:
diff changeset
    36
    return self;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    37
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    38
796196dd6e68 201023_01
hgs
parents:
diff changeset
    39
CSWVGTargetSurfaceImpl* CSWVGTargetSurfaceImpl::NewLC()
796196dd6e68 201023_01
hgs
parents:
diff changeset
    40
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    41
    CSWVGTargetSurfaceImpl* self = new (ELeave) CSWVGTargetSurfaceImpl();
796196dd6e68 201023_01
hgs
parents:
diff changeset
    42
    CleanupStack::PushL(self);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    43
    self->ConstructL();
796196dd6e68 201023_01
hgs
parents:
diff changeset
    44
    return self;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    45
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    46
796196dd6e68 201023_01
hgs
parents:
diff changeset
    47
inline void CSWVGTargetSurfaceImpl::ConstructL()
796196dd6e68 201023_01
hgs
parents:
diff changeset
    48
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    49
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    50
796196dd6e68 201023_01
hgs
parents:
diff changeset
    51
TInt CSWVGTargetSurfaceImpl::InitializeSurface(TSize aSize, TInt aColorSpace)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    52
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    53
    iSize = aSize;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    54
    TInt vgError = ::VGIInitialize(aSize.iWidth,aSize.iHeight, (VGIColorSpace)aColorSpace);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    55
    return MapOpenVGErrorToSymbianError(vgError);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    56
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    57
796196dd6e68 201023_01
hgs
parents:
diff changeset
    58
void CSWVGTargetSurfaceImpl::SetConfiguration(TInt /*aOption*/, const TAny* /*aValue*/)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    59
    {    
796196dd6e68 201023_01
hgs
parents:
diff changeset
    60
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    61
796196dd6e68 201023_01
hgs
parents:
diff changeset
    62
TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CFbsBitmap */*aBitmap*/)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    63
    { 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    64
    return KErrNotSupported;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    65
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    66
796196dd6e68 201023_01
hgs
parents:
diff changeset
    67
TInt CSWVGTargetSurfaceImpl::CreateSurface(TInt /*aDisplayMode*/, RWindow */*aSurface*/, CSvgtBitmap */*aBitmap*/)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    68
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    69
    return KErrNone;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    70
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    71
796196dd6e68 201023_01
hgs
parents:
diff changeset
    72
TInt CSWVGTargetSurfaceImpl::ResizeSurface(TSize aSize)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    73
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    74
    iSize = aSize;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    75
    TInt vgError = ::VGIResize(aSize.iWidth,aSize.iHeight);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    76
    return MapOpenVGErrorToSymbianError(vgError);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    77
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    78
796196dd6e68 201023_01
hgs
parents:
diff changeset
    79
TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/, TInt /*aMaskMode*/, CFbsBitmap */*aBitmap*/, CFbsBitmap */*aMask*/, TSize /*aSize*/)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    80
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    81
    return KErrNotSupported;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    82
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    83
TInt CSWVGTargetSurfaceImpl::CopyBitmap(TInt /*aDisplayMode*/,TInt /*aMaskMode*/,CSvgtBitmap *aBitmap, CSvgtBitmap *aMask, TSize /*aSize*/)
796196dd6e68 201023_01
hgs
parents:
diff changeset
    84
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    85
    VGIColorBufferFormat format = 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    86
            (VGIColorBufferFormat)MapSymbianDisplayModeToOpenVG( (TDisplayMode)aBitmap->DisplayMode() );
796196dd6e68 201023_01
hgs
parents:
diff changeset
    87
    
796196dd6e68 201023_01
hgs
parents:
diff changeset
    88
    TInt vgError = KErrNone;
796196dd6e68 201023_01
hgs
parents:
diff changeset
    89
    if(aMask) 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    90
        {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    91
        vgError = ::VGICopyToTarget(format, 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    92
                    aBitmap->Stride(), aBitmap->BitmapBuffer(), 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    93
                    aMask->Stride(), aMask->BitmapBuffer(), 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    94
                    VGI_SKIP_TRANSPARENT_PIXELS);
796196dd6e68 201023_01
hgs
parents:
diff changeset
    95
        }
796196dd6e68 201023_01
hgs
parents:
diff changeset
    96
    else
796196dd6e68 201023_01
hgs
parents:
diff changeset
    97
        {
796196dd6e68 201023_01
hgs
parents:
diff changeset
    98
        vgError = ::VGICopyToTarget(format, 
796196dd6e68 201023_01
hgs
parents:
diff changeset
    99
                    aBitmap->Stride(), aBitmap->BitmapBuffer(), 
796196dd6e68 201023_01
hgs
parents:
diff changeset
   100
                    0, NULL, 
796196dd6e68 201023_01
hgs
parents:
diff changeset
   101
                    VGI_COPY_TRANSPARENT_PIXELS);
796196dd6e68 201023_01
hgs
parents:
diff changeset
   102
        }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   103
        
796196dd6e68 201023_01
hgs
parents:
diff changeset
   104
    return MapOpenVGErrorToSymbianError(vgError);
796196dd6e68 201023_01
hgs
parents:
diff changeset
   105
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   106
796196dd6e68 201023_01
hgs
parents:
diff changeset
   107
TInt CSWVGTargetSurfaceImpl::PrepareToBindClientBuffer()
796196dd6e68 201023_01
hgs
parents:
diff changeset
   108
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   109
    return KErrNone;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   110
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   111
796196dd6e68 201023_01
hgs
parents:
diff changeset
   112
TInt CSWVGTargetSurfaceImpl::BindClientBuffer(TInt buffer)
796196dd6e68 201023_01
hgs
parents:
diff changeset
   113
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   114
    return MapOpenVGErrorToSymbianError(::VGIBindToImage(buffer));
796196dd6e68 201023_01
hgs
parents:
diff changeset
   115
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   116
  
796196dd6e68 201023_01
hgs
parents:
diff changeset
   117
TInt CSWVGTargetSurfaceImpl::UnBindClientBuffer()
796196dd6e68 201023_01
hgs
parents:
diff changeset
   118
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   119
    return MapOpenVGErrorToSymbianError(::VGIUnBindImage());
796196dd6e68 201023_01
hgs
parents:
diff changeset
   120
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   121
796196dd6e68 201023_01
hgs
parents:
diff changeset
   122
void CSWVGTargetSurfaceImpl::TerminateSurface()
796196dd6e68 201023_01
hgs
parents:
diff changeset
   123
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   124
    ::VGITerminate();
796196dd6e68 201023_01
hgs
parents:
diff changeset
   125
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   126
796196dd6e68 201023_01
hgs
parents:
diff changeset
   127
TInt CSWVGTargetSurfaceImpl::MapSymbianDisplayModeToOpenVG( TDisplayMode aMode) const
796196dd6e68 201023_01
hgs
parents:
diff changeset
   128
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   129
    VGIColorBufferFormat format;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   130
    switch( aMode )
796196dd6e68 201023_01
hgs
parents:
diff changeset
   131
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   132
    case EColor16MA:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   133
        format = VGI_COLOR_BUFFER_FORMAT_ARGB8888;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   134
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   135
796196dd6e68 201023_01
hgs
parents:
diff changeset
   136
    case EColor16MU:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   137
        format = VGI_COLOR_BUFFER_FORMAT_XRGB8888;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   138
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   139
796196dd6e68 201023_01
hgs
parents:
diff changeset
   140
    case EColor16MAP:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   141
        format = VGI_COLOR_BUFFER_FORMAT_ARGB8888_PRE;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   142
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   143
        
796196dd6e68 201023_01
hgs
parents:
diff changeset
   144
    case EColor16M:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   145
        format = VGI_COLOR_BUFFER_FORMAT_RGB888;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   146
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   147
796196dd6e68 201023_01
hgs
parents:
diff changeset
   148
    case EColor64K:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   149
        format = VGI_COLOR_BUFFER_FORMAT_RGB565;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   150
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   151
796196dd6e68 201023_01
hgs
parents:
diff changeset
   152
    case EColor4K:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   153
        format = VGI_COLOR_BUFFER_FORMAT_XRGB4444;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   154
        break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   155
796196dd6e68 201023_01
hgs
parents:
diff changeset
   156
    default:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   157
        return KErrNotSupported;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   158
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   159
    return format;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   160
    }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   161
796196dd6e68 201023_01
hgs
parents:
diff changeset
   162
TInt CSWVGTargetSurfaceImpl::MapOpenVGErrorToSymbianError( TInt aError ) const
796196dd6e68 201023_01
hgs
parents:
diff changeset
   163
    {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   164
    TInt error = KErrNone;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   165
    switch (aError)
796196dd6e68 201023_01
hgs
parents:
diff changeset
   166
        {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   167
        case VGI_OK:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   168
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   169
            error = KErrNone;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   170
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   171
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   172
        case VG_OUT_OF_MEMORY_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   173
        case VGI_ERROR_OUT_OF_MEMORY:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   174
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   175
            error = KErrNoMemory;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   176
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   177
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   178
        case VG_ILLEGAL_ARGUMENT_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   179
        case VGI_ERROR_INVALID_ARGUMENTS:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   180
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   181
            error = KErrArgument;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   182
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   183
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   184
        case VGI_ERROR_ALREADY_EXISTS:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   185
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   186
            error = KErrAlreadyExists;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   187
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   188
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   189
        case VG_UNSUPPORTED_PATH_FORMAT_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   190
        case VGI_ERROR_COLORSPACE_NOT_SUPPORTED:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   191
        case VG_UNSUPPORTED_IMAGE_FORMAT_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   192
        case VGI_ERROR_NOT_SUPPORTED:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   193
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   194
            error = KErrNotSupported;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   195
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   196
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   197
        case VGI_ERROR_ILLEGAL_IMAGE_HANDLE:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   198
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   199
            error = KErrBadHandle;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   200
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   201
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   202
        case VG_IMAGE_IN_USE_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   203
        case VGI_ERROR_IMAGE_IN_USE:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   204
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   205
            error = KErrInUse;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   206
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   207
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   208
        case VGI_ERROR_ILLEGAL_OPERATION:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   209
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   210
            error = KErrPermissionDenied;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   211
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   212
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   213
        case VG_BAD_HANDLE_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   214
        case VG_PATH_CAPABILITY_ERROR:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   215
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   216
            error = KErrUnknown;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   217
            break;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   218
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   219
        default:
796196dd6e68 201023_01
hgs
parents:
diff changeset
   220
            {
796196dd6e68 201023_01
hgs
parents:
diff changeset
   221
            error = KErrUnknown;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   222
            }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   223
        }
796196dd6e68 201023_01
hgs
parents:
diff changeset
   224
796196dd6e68 201023_01
hgs
parents:
diff changeset
   225
    return error;
796196dd6e68 201023_01
hgs
parents:
diff changeset
   226
    }