diff -r f5050f1da672 -r 04becd199f91 javauis/lcdui_akn/javalcdui/src.nokialcdui/CanvasGraphicsItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/lcdui_akn/javalcdui/src.nokialcdui/CanvasGraphicsItem.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,411 @@ +/* +* Copyright (c) 2009 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 implementation of CanvasGraphicsItem class +* +*/ + + +// INTERNAL INCLUDES +#include "com_nokia_mid_ui_CanvasGraphicsItem.h" +#include "CMIDCanvas.h" // userinclude in nokialcdui.component + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include + +/** + * Local helper function for creating the native side peer object for + * CanvasGraphicsItem. + * + * @param aNativePeerHandle On return, contains the native peer's handle + */ +LOCAL_C void CreateNativePeerL( + CMIDToolkit* aToolkit, + jobject aPeer, + TInt* aNativePeerHandle, + MMIDCanvasGraphicsItemPainter* aItemPainter) +{ + // Get LCDUI component factory. + MMIDComponentFactory* factory = aToolkit->ComponentFactory(); + + // Create new graphics item component. + MMIDCanvasGraphicsItem* graphicsItem = factory->CreateCanvasGraphicsItemL( + aItemPainter); + + // Put the component to cleanup stack during the register operation. + CleanupDisposePushL(graphicsItem); + + // Register component to the LCDUI. + *aNativePeerHandle = aToolkit->RegisterComponentL(graphicsItem, aPeer); + + // Component can be popped from the cleanup stack. + CleanupPopComponent(graphicsItem); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _createNativePeer + * Signature: (I)I + */ +JNIEXPORT jint JNICALL +Java_com_nokia_mid_ui_CanvasGraphicsItem__1createNativePeer( + JNIEnv* aJniEnv, + jobject aPeer, + jint aToolkitHandle, + jint aPainterHandle, + jint /* aWidth */, + jint /* aHeight */) +{ + DEBUG("CanvasGraphicsItem.cpp - createNativePeer +"); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItemPainter* itemPainter = + MIDUnhandObject(aPainterHandle); + + jobject peer = aJniEnv->NewWeakGlobalRef(aPeer); + TInt handle = -1; + TSize size; + + TInt error = toolkit->ExecuteTrap( + &CreateNativePeerL, + toolkit, + peer, + &handle, + itemPainter); + + if (error == KErrNone) + { + DEBUG( + "CanvasGraphicsItem.cpp - createNativePeer"); + } + else + { + // Global reference must be removed at this point if construction + // failed for some reason. + aJniEnv->DeleteWeakGlobalRef(static_cast< jweak >(peer)); + } + + DEBUG_INT("CanvasGraphicsItem.cpp - createNativePeer, error = %d", error); + + return (error != KErrNone ? error : handle); +} + + +/** + * Local helper function for setting the size of a graphics item + * + * @param aGraphicsItem The graphics item object to be modified. + * @param aWidth The width of the graphics item. + * @param aHeight The height of the graphics item. + * @param aHeightInRows Indicates if the height is presented in rows. + */ +LOCAL_C void SetSizeL( + MMIDCanvasGraphicsItem* aGraphicsItem, + TInt aWidth, + TInt aHeight) +{ + aGraphicsItem->SetSizeL(aWidth, aHeight); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _setSize + * Signature: (IIII)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1setSize( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle, + jint aWidth, + jint aHeight) +{ + DEBUG("CanvasGraphicsItem.cpp - setSize +"); + + CMIDToolkit* toolkit = + JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject< MMIDCanvasGraphicsItem >(aNativePeerHandle); + + TInt error = toolkit->ExecuteTrap( + &SetSizeL, + item, + aWidth, + aHeight); + + DEBUG("CanvasGraphicsItem.cpp - setSize -"); + + return error; +} + +/** + * Local helper function for setting the parent of a graphics item + * + * @param aGraphicsItem The graphics item object to be modified. + * @param aParent The parent to be set. + */ +LOCAL_C void SetParentL( + MMIDCanvasGraphicsItem* aGraphicsItem, MMIDComponent* aParent) +{ + MMIDCustomComponentContainer* container = NULL; + MDirectContainer* directContainer = NULL; + + if (aParent) + { + MMIDComponent::TType type(aParent->Type()); + + __ASSERT_DEBUG(type == MMIDComponent::ECanvas || + type == MMIDComponent::ECustomItem, + User::Invariant()); + + // Use static cast instead of reinterpret_cast because + // reinterpret_cast does not preform the conversion correctly. + // static_cast is OK eventhough CMIDCanvas is non-sharable class. + // We don't use its methods. + container = static_cast< CMIDCanvas* >(aParent); + directContainer = static_cast< CMIDCanvas* >(aParent); + } + + aGraphicsItem->SetParentL(container); + aGraphicsItem->SetDirectContainerL(directContainer); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _setParent + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1setParent( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle, + jint aParentHandle) +{ + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + MMIDComponent* parent = NULL; + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + if (aParentHandle) + { + parent = MIDUnhandObject< MMIDComponent >(aParentHandle); + } + + TInt error = toolkit->ExecuteTrap( + &SetParentL, + item, + parent); + + DEBUG_INT("CanvasGraphicsItem.cpp - setParent, error = %d", error); + + return error; +} + +/** + * Local helper function for setting a graphics item visible. + * + * @param aItem The graphics item to set visible. + */ +LOCAL_C void SetVisibleL(MMIDCanvasGraphicsItem* aItem, TBool aVisible) +{ + aItem->SetVisibleL(aVisible); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _show + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1setVisible( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle, + jboolean aVisible) +{ + DEBUG_INT("CanvasGraphicsItem.cpp - setVisible +, aVisible=%d", aVisible); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + TInt error = toolkit->ExecuteTrap( + &SetVisibleL, + item, + (TBool)aVisible); + + DEBUG_INT("CanvasGraphicsItem.cpp - setVisible -, error=%d", error); + + return error; +} + +/** + * Local helper function for setting a graphics item's position. + * + * @param aItem The graphics item. + * @param aX The x coordinate of the anchor point. + * @param aY The y coordinate of the anchor point. + */ +LOCAL_C void SetPosition(MMIDCanvasGraphicsItem* aItem, TInt aX, TInt aY) +{ + aItem->SetPosition(aX, aY); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _setPosition + * Signature: (IIII)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1setPosition( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle, + jint aX, + jint aY) +{ + DEBUG("CanvasGraphicsItem.cpp - setPosition +"); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + toolkit->ExecuteV(&SetPosition, item, aX, aY); + + DEBUG("CanvasGraphicsItem.cpp - setPosition -"); + + return KErrNone; +} + + +/** + * Local helper function for setting the elevation of a graphics item. + * + * @param aGraphicsItem The graphics item object to be modified. + * @param aZ The z-position defining the elevation. + */ +LOCAL_C void SetElevationL(MMIDCanvasGraphicsItem* aGraphicsItem, TInt aZ) +{ + aGraphicsItem->SetElevationL(aZ); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _setZPosition + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1setZPosition( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle, + jint aZ) +{ + DEBUG("CanvasGraphicsItem.cpp - setZPosition +"); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + TInt error = toolkit->ExecuteTrap( + &SetElevationL, + item, + aZ); + + DEBUG_INT("CanvasGraphicsItem.cpp - setZPosition -, error=%d", error); + + return error; +} + +/** + * Local helper function for getting the elevation of a graphics item. + * + * @param aItem The graphics item. + * @return The elevation of the graphics item's content. + */ +LOCAL_C TInt Elevation(MMIDCanvasGraphicsItem* aItem) +{ + return aItem->Elevation(); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _getZPosition + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1getZPosition( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle) +{ + DEBUG("CanvasGraphicsItem.cpp - getZPosition +"); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + TInt position = toolkit->Execute(&Elevation, item); + + DEBUG_INT("CanvasGraphicsItem.cpp - getZPosition -, position=%d", + position); + + return position; +} + + +/** + * Local helper function for dispoisng graphics item native side component. + * + * @param aItem The graphics item to be destroyed. + */ +LOCAL_C void Dispose(CMIDToolkit* aToolkit, MMIDCanvasGraphicsItem* aItem) +{ + aToolkit->DisposeObject(aItem); +} + +/* + * Class: com_nokia_mid_ui_CanvasGraphicsItem + * Method: _dispose + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_com_nokia_mid_ui_CanvasGraphicsItem__1dispose( + JNIEnv* /* aJniEnv */, + jobject /* aPeer */, + jint aToolkitHandle, + jint aNativePeerHandle) +{ + DEBUG("CanvasGraphicsItem.cpp - dispose +"); + + CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle); + + MMIDCanvasGraphicsItem* item = + MIDUnhandObject(aNativePeerHandle); + + toolkit->ExecuteV(&Dispose, toolkit, item); + + DEBUG("CanvasGraphicsItem.cpp - dispose -"); +} +