javauis/m2g_akn/src/jni/M2GSVGAnimationElement.cpp
author Dario Sestito <darios@symbian.org>
Fri, 17 Sep 2010 17:50:17 +0100
branchRCL_3
changeset 73 461e71b327da
parent 19 04becd199f91
permissions -rw-r--r--
Reapply changes for bug 2896 and tweak for generatej9zips.py

/*
* 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_M2GSVGAnimationElement.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_M2GSVGAnimationElement::_beginElementAt
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::BeginElementAtL method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document handle
 * @param aElementHandle Element handle
 * @param aOffset Offset time
 * @throws Exception if not ok.
 */
LOCAL_C void DoBeginElementAtL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt aElementHandle,
    TReal32* aOffset, TReal32* aCurrentTime)
{
    TInt16 restartAttribute;
    aProxy->GetEnumTraitL(
        STATIC_CAST(TM2GSvgElementHandle, aElementHandle),
        STATIC_CAST(TM2GSvgAttrType, KM2GRestartAttribute),
        restartAttribute);
    TInt isActive;
    aProxy->IsActiveL(STATIC_CAST(TM2GSvgElementHandle, aElementHandle), isActive);

    if (isActive && (restartAttribute == KM2GRestartWhenNotActive))
    {
        M2G_DEBUG_1("M2G_DEBUG: M2GSVGAnimationElement::DoBeginElementAtL() - active & restart att:%d", restartAttribute);
    }
    else if ((*aCurrentTime != 0) && (restartAttribute == KM2GRestartNever))
    {
        // Cannot restart even if animation hasn't ended?
        M2G_DEBUG_1("M2G_DEBUG: M2GSVGAnimationElement::DoBeginElementAtL() - not active & restart att:%d", restartAttribute);
    }
    else
    {
        M2G_DEBUG_2("M2G_DEBUG: M2GSVGAnimationElement::DoBeginElementAtL() - offset:%f & current:%f", *aOffset, *aCurrentTime);
        aProxy->BeginElementAtL(
            STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle),
            STATIC_CAST(TM2GSvgElementHandle, aElementHandle),
            *aOffset + *aCurrentTime);
    }
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GSVGAnimationElement__1beginElementAt(
    JNIEnv* aJni,
    jobject,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jint aElementHandle,
    jfloat aOffset,
    jfloat aCurrentTime,
    jboolean aUIToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _beginElementAt - begin");
    TInt err = KM2GNotOk;
    if (aUIToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        TInt16 restartAttribute;
        TInt   isActive;
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pBeginElementAtL)(const TInt&, const TInt&,const TReal32&);
            typedef void (MM2GSVGProxy::*pGetEnumTraitL)(const TInt&, const TInt16&, TInt16&);
            typedef void (MM2GSVGProxy::*pIsActiveL)(const TInt&, TInt&);
            pBeginElementAtL BeginElementAtL = &MM2GSVGProxy::BeginElementAtL;
            pGetEnumTraitL     GetEnumTraitL = &MM2GSVGProxy::GetEnumTraitL;
            pIsActiveL           IsActiveL = &MM2GSVGProxy::IsActiveL;
            MM2GSVGProxy* aProxy = JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle);
            TMethodWrapper3<MM2GSVGProxy,const TInt&,const TInt&, const TReal32& >
            BeginElementAt(
                *aProxy,
                BeginElementAtL,
                aDocumentHandle,
                aElementHandle,
                aOffset + aCurrentTime
            );
            TMethodWrapper3<MM2GSVGProxy,const TInt&,const TInt16&, TInt16& >
            GetEnumTrait(
                *aProxy,
                GetEnumTraitL,
                aElementHandle,
                KM2GRestartAttribute,
                restartAttribute
            );
            TMethodWrapper2<MM2GSVGProxy,const TInt&, TInt& >
            lIsActive(
                *aProxy,
                IsActiveL,
                aElementHandle,
                isActive
            );
            client->Execute(GetEnumTrait);
            client->Execute(lIsActive);
            if (isActive && (restartAttribute == KM2GRestartWhenNotActive))
            {
                M2G_DEBUG_1("M2G_DEBUG: M2GSVGAnimationElement::DoBeginElementAtL() - active & restart att:%d", restartAttribute);
            }
            else if ((aCurrentTime != 0) && (restartAttribute == KM2GRestartNever))
            {
                M2G_DEBUG_1("M2G_DEBUG: M2GSVGAnimationElement::DoBeginElementAtL() - not active & restart att:%d", restartAttribute);
            }
            else
            {
                err = client->Execute(BeginElementAt);
            }
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle && aDocumentHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoBeginElementAtL,
                      JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle),
                      aDocumentHandle, aElementHandle,
                      REINTERPRET_CAST(TReal32*, &aOffset),
                      REINTERPRET_CAST(TReal32*, &aCurrentTime));
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _beginElementAt - end");
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GSVGAnimationElement::_endElementAt
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::EndElementAt method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aDocumentHandle Document handle
 * @param aElementHandle Element handle
 * @param aOffset Offset time
 */
LOCAL_C void DoEndElementAtL(
    MM2GSVGProxy* aProxy,
    TInt aDocumentHandle,
    TInt aElementHandle,
    TReal32* aOffset)
{
    aProxy->EndElementAtL(
        STATIC_CAST(TM2GSvgDocumentHandle, aDocumentHandle),
        STATIC_CAST(TM2GSvgElementHandle, aElementHandle),
        *aOffset);
}

/**
 * JNI method
 */
JNIEXPORT void JNICALL
Java_com_nokia_microedition_m2g_M2GSVGAnimationElement__1endElementAt(
    JNIEnv* aJni,
    jobject,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aDocumentHandle,
    jint aElementHandle,
    jfloat aOffset,
    jboolean aUIToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _endElementAt - begin");
    TInt err = KM2GNotOk;
    if (aUIToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pEndElementAtL)(const TInt&, const TInt&,const TReal32&);
            pEndElementAtL EndElementAtL = &MM2GSVGProxy::EndElementAtL;
            MM2GSVGProxy* aProxy = JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle);
            TMethodWrapper3<MM2GSVGProxy,const TInt&,const TInt&, const TReal32& >
            EndElementAt(
                *aProxy,
                EndElementAtL,
                aDocumentHandle,
                aElementHandle,
                aOffset
            );
            err = client->Execute(EndElementAt);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);
        if (eventSource && aSvgProxyHandle && aDocumentHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoEndElementAtL,
                      JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle),
                      aDocumentHandle, aElementHandle,
                      REINTERPRET_CAST(TReal32*, &aOffset));
        }
    }
    M2GGeneral::CheckErrorCode(aJni, err);

    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _endElementAt - end");
}

// -----------------------------------------------------------------------------
// Java_com_nokia_microedition_m2g_M2GSVGAnimationElement::_isActive
// -----------------------------------------------------------------------------
/**
 * Calls MM2GSVGProxy::EndElementAt method.
 * @since Series S60 3.0
 * @param aProxy Proxy instance.
 * @param aElementHandle Element handle
 */
LOCAL_C void DoIsActiveL(
    MM2GSVGProxy* aProxy,
    TInt aElementHandle,
    TInt* aActive)
{
    aProxy->IsActiveL(
        STATIC_CAST(TM2GSvgElementHandle, aElementHandle),
        *aActive);
}

/**
 * JNI method
 */
JNIEXPORT jboolean JNICALL
Java_com_nokia_microedition_m2g_M2GSVGAnimationElement__1isActive(
    JNIEnv* aJni,
    jobject,
    jint aEventSourceHandle,
    jint aSvgProxyHandle,
    jint aElementHandle,
    jboolean aUiToolkit)
{
    M2G_DEBUG_0("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _isActive - begin");
    TInt err = KM2GNotOk;
    TInt active = 0;
    if (aUiToolkit)
    {
        MSwtClient* client = reinterpret_cast< MSwtClient* >(aEventSourceHandle);
        if (client && aSvgProxyHandle)
        {
            typedef void (MM2GSVGProxy::*pIsActiveL)(const TInt&,TInt&);
            pIsActiveL IsActiveL = &MM2GSVGProxy::IsActiveL;
            MM2GSVGProxy* aProxy = JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle);
            TMethodWrapper2<MM2GSVGProxy,const TInt&,TInt& >
            lIsActive(
                *aProxy,
                IsActiveL,
                aElementHandle,
                active
            );
            err = client->Execute(lIsActive);
        }
    }
    else
    {
        CM2GEventSource* eventSource = JavaUnhand< CM2GEventSource >(aEventSourceHandle);

        if (eventSource && aSvgProxyHandle)
        {
            err = eventSource->ExecuteTrap(
                      &DoIsActiveL,
                      JavaUnhand< MM2GSVGProxy >(aSvgProxyHandle),
                      aElementHandle, &active);
        }
    }

    M2GGeneral::CheckErrorCode(aJni, err);
    M2G_DEBUG_1("M2G_DEBUG: JNI ( M2GSVGAnimationElement ) _isActive: %d - end", active);
    return STATIC_CAST(jboolean, (active == 1 ? ETrue : EFalse));
}


M2G_NS_END