javauis/m2g_akn/src/jni/M2GDocument.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 21:06:50 +0300
branchRCL_3
changeset 27 d5e927d5853b
parent 14 04becd199f91
permissions -rw-r--r--
Revision: v2.2.11 Kit: 201035

/*
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  JNI methods
*
*/

// INCLUDE FILES
#include "CM2GEventSource.h"
#include "com_nokia_microedition_m2g_M2GDocument.h"
#include "MM2GSVGProxy.h"
#include <methodwrappers.h>

M2G_NS_START

// EXTERNAL DATA STRUCTURES

// EXTERNAL FUNCTION PROTOTYPES

// CONSTANTS

// MACROS

// LOCAL CONSTANTS AND MACROS

// MODULE DATA STRUCTURES

// LOCAL FUNCTION PROTOTYPES

// FORWARD DECLARATIONS

// CLASS DECLARATION

// ================================ FUNCTIONS ==================================

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_createDocument
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::CreateDocumentL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aData Document data
 * @param aHandle Document handle to be returned
 * @throws Exception if not ok
 */
LOCAL_C void DoCreateDocumentL(
    MM2GSVGProxy* aProxy,
    TPtrC16* aData,
    TInt* aHandle)
{
    aProxy->CreateDocumentL(*aData, *aHandle);
}

/**
 *
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1createDocument(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jstring aData,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _createDocument - begin");
    TInt handle = M2G_INVALID_HANDLE;
    TInt err    = KM2GNotOk;
    RJString data(*aJni, aData);

    if (aUiToolkit)  // If eSWT is the current toolkit
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pCreateDocumentL)(const TPtrC16& ,TInt&);
            pCreateDocumentL CreateDocumentL = &MM2GSVGProxy::CreateDocumentL;
            TPtrC16* aData = STATIC_CAST(TPtrC16*, &data);
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy, const TPtrC16&, TInt& > DoCreateDocument(
                *aProxy,
                CreateDocumentL,
                *aData,
                handle);
            err = client->Execute(DoCreateDocument);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);

        // RJString is a subclass of TPtrC16
        RJString data(*aJni, aData);

        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoCreateDocumentL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      STATIC_CAST(TPtrC16*, &data),
                      &handle);
        }

    }
    handle = M2GGeneral::CheckErrorCodeAndHandle(aJni, err, handle, M2G_INVALID_HANDLE);
    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _createDocument: %d - end", handle);
    return handle;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_createElementNS
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::CreateElementNsL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aType Element type id.
 * @param aDocumentHandle Document handle.
 * @param aHandle Element handle to be returned
 * @throws Exception if not ok
 */
LOCAL_C void DoCreateElementNsL(
    MM2GSVGProxy* aProxy,
    TInt16 aType,
    TInt aDocumentHandle,
    TInt* aHandle)
{
    aProxy->CreateElementNsL(
        aType,
        aDocumentHandle,
        *aHandle);
}

/**
 *
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1createElementNS(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jshort aType,
    jint aDocumentHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _createElementNS - begin");

    // Execute native engine method
    TInt handle = M2G_INVALID_HANDLE;
    TInt err = KM2GNotOk;
    if (aUiToolkit)  // If eSWT is the current toolkit
    {
        // get access to function server
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            // Original function prototype
            typedef void (MM2GSVGProxy::*pCreateElementNsL)(const TInt16& ,const TInt&, TInt&);
            pCreateElementNsL CreateElementNsL = &MM2GSVGProxy::CreateElementNsL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper3<MM2GSVGProxy, const TInt16&, const TInt&, TInt& > DoCreateElementNs(
                *aProxy,
                CreateElementNsL,
                aType,
                aDocumentHandle,
                handle);
            // call 'DoCreateElementNsL' on aSvgProxyHandle
            err = client->Execute(DoCreateElementNs);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoCreateElementNsL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aType,
                      aDocumentHandle,
                      &handle);

        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);
    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _createElementNS: %d - end", handle);
    return handle;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_deleteDocument
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::DeleteDocumentL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document handle
 * @throws Exception if not ok
 */
LOCAL_C void DoDeleteDocumentL(MM2GSVGProxy* aProxy, TInt aDocumentHandle)
{
    aProxy->DeleteDocumentL(aDocumentHandle);
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1deleteDocument(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _deleteDocument - begin");
    TInt err = KM2GNotOk;
    if (aUiToolkit)  // If eSWT is the current toolkit
    {
        // get access to function server
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);

        if (client && aSvgProxyHandle)
        {
            // Original function prototype
            typedef void (MM2GSVGProxy::*pDeleteDocumentL)(const TInt&);

            // Get member function address
            pDeleteDocumentL DeleteDocumentL = &MM2GSVGProxy::DeleteDocumentL;

            // Extract the SVGProxy handle
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);

            // Use the Method wrapper for 1 Arg
            TMethodWrapper1<MM2GSVGProxy, const TInt& > DeleteDocument(
                *aProxy,
                DeleteDocumentL,
                aDocumentHandle);
            // call 'DeleteDocumentL' on aSvgProxyHandle
            err = client->Execute(DeleteDocument);
        }

    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle && aDocumentHandle)
        {
            // Execute native engine method
            err = eventSource->ExecuteTrap(
                      &DoDeleteDocumentL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle);

        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _deleteDocument - end");
}


// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_getElementById
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::GetElementByIdL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aId Element ID.
 * @param aHandle Element handle to be returned.
 */
LOCAL_C void DoGetElementByIdL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TPtrC16* aId,
    TInt* aHandle)
{
    aProxy->GetElementByIdL(aDocumentHandle, *aId, *aHandle);
}

/**
 * JNI method
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1getElementById(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jstring aId,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _getElementById - begin");
    TInt handle = M2G_INVALID_HANDLE;
    TInt err    = KM2GNotOk;
    RJString id(*aJni, aId);
    if (aUiToolkit)
    {
        // get access to function server
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pGetElementByIdL)(const TInt&, const TPtrC16& ,TInt&);
            pGetElementByIdL GetElementByIdL = &MM2GSVGProxy::GetElementByIdL;
            TPtrC16* lId = STATIC_CAST(TPtrC16*, &id);
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper3<MM2GSVGProxy, const TInt&, const TPtrC16&, TInt& > GetElementById(
                *aProxy,
                GetElementByIdL,
                aDocumentHandle,
                *lId,
                handle);
            err = client->Execute(GetElementById);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoGetElementByIdL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      STATIC_CAST(TPtrC16*, &id),
                      &handle);
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _getElementById: %d - end", handle);
    return handle;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_getViewportHeight
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::GetViewportHeightL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aHeight Height to be returned.
 */
LOCAL_C void DoGetViewportHeightL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt* aHeight)
{
    aProxy->GetViewportHeightL(aDocumentHandle, *aHeight);
}

/**
 * JNI method
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1getViewportHeight(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _getViewportHeight - begin");
    TInt err    = KM2GNotOk;
    TInt height = 0;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            // Original function prototype
            typedef void (MM2GSVGProxy::*pGetViewportHeightL)(const TInt& ,TInt&);
            pGetViewportHeightL GetViewportHeightL = &MM2GSVGProxy::GetViewportHeightL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy, const TInt& ,TInt& > GetViewportHeight(
                *aProxy,
                GetViewportHeightL,
                aDocumentHandle,
                height);
            err = client->Execute(GetViewportHeight);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);

        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoGetViewportHeightL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      &height);
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _getViewportHeight: %d - end", height);
    return height;
}


// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_getViewportWidth
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::GetViewportWidthL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aWidth Width to be returned.
 */
LOCAL_C void DoGetViewportWidthL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt* aWidth)
{
    aProxy->GetViewportWidthL(aDocumentHandle, *aWidth);
}

/**
 * Class: com_nokia_microedition_m2g_M2GDocument
 * Method: _getViewportWidth
 * Signature:
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1getViewportWidth(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _getViewportWidth - begin");
    TInt   err = KM2GNotOk;
    TInt width = 0;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pGetViewportWidthL)(const TInt& ,TInt&);
            pGetViewportWidthL GetViewportWidthL = &MM2GSVGProxy::GetViewportWidthL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy, const TInt& ,TInt& > GetViewportWidth(
                *aProxy,
                GetViewportWidthL,
                aDocumentHandle,
                width);
            err = client->Execute(GetViewportWidth);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);

        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoGetViewportWidthL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      &width);
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _getViewportWidth: %d - end", width);
    return width;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_isElementInDom
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::IsElementInDomL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aElementHandle Element pointer.
 * @param aIsElementInDom Result
 */
LOCAL_C void DoIsElementInDomL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt aElementHandle,
    TInt* aIsElementInDom)
{
    aProxy->IsElementInDomL(
        aDocumentHandle, aElementHandle, *aIsElementInDom);
}

/**
 * JNI method.
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1isElementInDOM(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jint aElementHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI _isElementInDOM - begin");
    TInt isElementInDom = -1;
    TInt            err = KM2GNotOk;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pIsElementInDomL)(const TInt& ,const TInt&, TInt&);
            pIsElementInDomL IsElementInDomL = &MM2GSVGProxy::IsElementInDomL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper3<MM2GSVGProxy, const TInt& ,const TInt&, TInt& > IsElementInDom(
                *aProxy,
                IsElementInDomL,
                aDocumentHandle,
                aElementHandle,
                isElementInDom);
            err = client->Execute(IsElementInDom);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);

        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoIsElementInDomL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      aElementHandle,
                      &isElementInDom);
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_1("M2G_DEBUG: JNI _isElementInDOM: %d - end", isElementInDom);
    return isElementInDom;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_requestCompleted
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::RequestCompletedL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aURI Resource uri
 * @param aResourceData Resource data
 * @param aCompleted Result
 */
LOCAL_C void DoRequestCompletedL(
    MM2GSVGProxy* aProxy,
    TM2GSvgDocumentHandle aDocumentHandle,
    TPtrC16* aURI,
    TPtrC8* aResourceData,
    TInt* aCompleted)
{
    aProxy->RequestCompletedL(
        aDocumentHandle,
        *aURI,
        *aResourceData,
        *aCompleted);
    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) DoRequestCompletedL: %d - end", *aCompleted);
}

/**
 * JNI method
 */
JNIEXPORT jint JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1requestCompleted(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jstring aURI,
    jbyteArray aResourceData,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _requestCompleted - begin");

    CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
    RJString uri(*aJni, aURI);
    TInt err = KM2GNotOk;
    TPtrC8 lResData8;
    jbyte* resBytes = NULL;

    if (aResourceData)
    {
        resBytes  = aJni->GetByteArrayElements(aResourceData, NULL);
        lResData8.Set(REINTERPRET_CAST(TUint8*, resBytes), aJni->GetArrayLength(aResourceData));
    }

    TInt completed = -1;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            TPtrC16* pUri = STATIC_CAST(TPtrC16*, &uri);
            typedef void (MM2GSVGProxy::*pRequestCompletedL)(const TInt& ,const TPtrC16&, const TPtrC8&, TInt&);
            pRequestCompletedL RequestCompletedL = &MM2GSVGProxy::RequestCompletedL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper4<MM2GSVGProxy, const TInt& ,const TPtrC16&, const TPtrC8&, TInt& > RequestCompleted(
                *aProxy,
                RequestCompletedL,
                aDocumentHandle,
                *pUri,
                lResData8,
                completed);
            err = client->Execute(RequestCompleted);
        }
    }
    else
    {
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoRequestCompletedL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      STATIC_CAST(TPtrC16*, &uri),
                      &lResData8,
                      &completed);

        }

    }
    M2GGeneral::CheckErrorCode(aJni, err);
    if (aResourceData)
    {
        aJni->ReleaseByteArrayElements(aResourceData, resBytes, JNI_ABORT);   // don't copy back
    }

    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GDocument ) _requestCompleted: %d - end", completed);

    return completed;
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_setViewportHeight
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::SetViewportHeightL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aHeight Height
 */
LOCAL_C void DoSetViewportHeightL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt aHeight)
{
    aProxy->SetViewportHeightL(
        (TM2GSvgDocumentHandle)aDocumentHandle, aHeight);
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1setViewportHeight(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jint aHeight,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _setViewportHeight - begin");
    TInt err = KM2GNotOk;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pSetViewportHeightL)(const TInt& ,TInt);
            pSetViewportHeightL SetViewportHeightL = &MM2GSVGProxy::SetViewportHeightL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy, const TInt& ,TInt > SetViewportHeight(
                *aProxy,
                SetViewportHeightL,
                aDocumentHandle,
                aHeight);
            err = client->Execute(SetViewportHeight);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoSetViewportHeightL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      aHeight);
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _setViewportHeight - end");
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GDocument::_setViewportWidth
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::SetViewportWidthL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document pointer.
 * @param aWidth Width
 */
LOCAL_C void DoSetViewportWidthL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt aWidth)
{
    aProxy->SetViewportWidthL(
        (TM2GSvgDocumentHandle)aDocumentHandle, aWidth);
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GDocument__1setViewportWidth(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jint aWidth,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _setViewportWidth - begin");
    TInt err = KM2GNotOk;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pSetViewportWidthL)(const TInt& ,TInt);
            pSetViewportWidthL SetViewportWidthL = &MM2GSVGProxy::SetViewportWidthL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy, const TInt& ,TInt > SetViewportWidth(
                *aProxy,
                SetViewportWidthL,
                aDocumentHandle,
                aWidth);
            err = client->Execute(SetViewportWidth);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoSetViewportWidthL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      aWidth);

        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GDocument ) _setViewportWidth - end");
}

M2G_NS_END