javauis/m2g_akn/src/jni/M2GSVGSVGElement.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 27 Apr 2010 16:30:29 +0300
branchRCL_3
changeset 14 04becd199f91
permissions -rw-r--r--
Revision: v2.1.22 Kit: 201017

/*
* 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_M2GSVGSVGElement.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_M2GSVGImage::_getMediaTime
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::GetMediaTimeL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document handle
 * @param aSeconds Media time to be returned.
 */
LOCAL_C void DoGetMediaTimeL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TReal32* aSeconds)
{
    aProxy->GetMediaTimeL(
        STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle),
        *aSeconds);
}

/**
 * JNI method
 */
JNIEXPORT jfloat JNICALL
Java_com_nokia_microedition_m2g_M2GSVGSVGElement__1getMediaTime(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jboolean aUiToolKit)
{
    M2G_DEBUG_0("JNI ( M2GSVGSVGElement ) _getMediaTime - begin");
    TReal32 seconds = 0;
    TInt err = KM2GNotOk;
    if (aUiToolKit)  // If eSWT is the current toolkit
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pGetMediaTimeL)(const TM2GSvgDocumentHandle&, TReal32&);
            pGetMediaTimeL GetMediaTimeL = &MM2GSVGProxy::GetMediaTimeL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TM2GSvgDocumentHandle lDocumentHandle = STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle);
            TMethodWrapper2<MM2GSVGProxy, const TM2GSvgDocumentHandle&, TReal32& > GetMediaTime(
                *aProxy,
                GetMediaTimeL,
                lDocumentHandle,
                seconds);
            err = client->Execute(GetMediaTime);
            M2GGeneral::CheckErrorCode(aJni, err);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoGetMediaTimeL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      &seconds);
            M2GGeneral::CheckErrorCode(aJni, err);
        }
    }
    M2G_DEBUG_1("JNI ( M2GSVGSVGElement ) _getMediaTime: %f - end", seconds);
    return STATIC_CAST(jfloat, seconds);
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GSVGImage::_setMediaTime
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::SetMediaTimeL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document handle
 * @param aSeconds Media time
 */
LOCAL_C void DoSetMediaTimeL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TReal32* aSeconds)
{
    aProxy->SetMediaTimeL(
        STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle),
        *aSeconds);
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GSVGSVGElement__1setMediaTime(
    JNIEnv* aJni,
    jclass,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jfloat aSeconds,
    jboolean aUiToolKit
)
{
    M2G_DEBUG_0("JNI ( M2GSVGSVGElement ) _setMediaTime - begin");
    TInt err = KM2GNotOk;
    if (aUiToolKit)  // If eSWT is the current toolkit
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pSetMediaTimeL)(const TM2GSvgDocumentHandle&,const  TReal32&);
            pSetMediaTimeL SetMediaTimeL = &MM2GSVGProxy::SetMediaTimeL;
            MM2GSVGProxy* aProxy = JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle);
            TM2GSvgDocumentHandle lDocumentHandle = STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle);
            TReal32* lseconds = REINTERPRET_CAST(TReal32*, &aSeconds);
            TMethodWrapper2<MM2GSVGProxy, const TM2GSvgDocumentHandle&,const TReal32& > SetMediaTime(
                *aProxy,
                SetMediaTimeL,
                lDocumentHandle,
                *lseconds);
            err = client->Execute(SetMediaTime);
            M2GGeneral::CheckErrorCode(aJni, err);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoSetMediaTimeL,
                      JavaUnhand<MM2GSVGProxy>(aSvgProxyHandle),
                      aDocumentHandle,
                      REINTERPRET_CAST(TReal32*, &aSeconds));
            M2GGeneral::CheckErrorCode(aJni, err);
        }
    }
    M2G_DEBUG_1("JNI ( M2GSVGSVGElement ) _setMediaTime: %f - end", aSeconds);
}