--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/Platform.java Fri Oct 15 12:29:39 2010 +0300
@@ -0,0 +1,253 @@
+/*
+* 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:
+*
+*/
+/**
+ * \file
+ * \brief Target platform dependent Java module for Symbian.
+ *
+ */
+
+package com.nokia.microedition.m2g;
+import javax.microedition.lcdui.Graphics;
+import javax.microedition.lcdui.Image;
+import org.eclipse.swt.widgets.Display;
+
+import com.nokia.mj.impl.nokialcdui.LCDUIInvoker;
+import org.eclipse.swt.internal.extension.DisplayExtension;
+import org.eclipse.swt.internal.extension.Toolkit;
+
+/**
+ * Implements platform-dependent functionality. At the moment, this
+ * includes native finalization and some helper methods for
+ * synchronizing 2D and 3D rendering.
+ */
+class Platform
+{
+ /**
+ * eSWT display for ui thread access
+ */
+ private static Display display = null;
+ private static boolean libraryLoaded = false;
+
+ //------------------------------------------------------------------
+ // Package private methods
+ //------------------------------------------------------------------
+
+ /**
+ * Executes given runnable in UI thread if caller thread is not UI thread
+ */
+ static void executeInUIThread(M2GRunnableQt obj)
+ {
+ if (display == null)
+ {
+ if (!uiThreadAvailable())
+ {
+ throw new Error("Ui thread not available");
+ }
+ }
+ if (display.isDisposed())
+ {
+ throw new Error("Display already disposed");
+ }
+
+ if (obj != null)
+ {
+ // If we are not in UI thread use display
+ if (Thread.currentThread() != display.getThread())
+ {
+ display.syncExec(obj);
+ }
+ else
+ {
+ // In this case we are in UI thread so just execute directly
+ obj.run();
+ }
+ // Check if any exceptions occured in execution
+ // and throw forward in caller thread
+ obj.checkAndThrow();
+ }
+ }
+
+ /**
+ * Check the UI thread / toolkit init status and store display if it is available
+ * @return true if either lcdui or eswt toolkit is initialized and ui thread is accessible
+ * otherwise false
+ */
+ static boolean uiThreadAvailable()
+ {
+ if (display != null)
+ {
+ return true;
+ }
+ else
+ {
+ //display = DisplayExtension.getDisplayInstance();
+ //As now the thread is always available we are taking it from Toolkit.
+ display = Toolkit. getInternalDisplay();
+
+
+ if (display == null)
+ {
+
+ return false;
+ }
+ else
+ {
+
+ // UI thread is available, so load native library if not already loaded
+ if (!libraryLoaded)
+ {
+
+ com.nokia.mj.impl.rt.support.Jvm.loadSystemLibrary("javam2g");
+ libraryLoaded = true;
+ }
+ return true;
+ }
+ }
+ }
+
+ /**
+ * Load Library if not already loaded
+ *
+
+ static void loadLibarary()
+ {
+ if (!libraryLoaded)
+ {
+
+ com.nokia.mj.impl.rt.support.Jvm.loadSystemLibrary("javam2g");
+ libraryLoaded = true;
+ }
+ }*/
+
+ /**
+ * Registers an Object3D in the global handle-to-object map. The
+ * handle of the object must already be set at this point!
+ */
+// static final void registerFinalizer(Object3D obj)
+// {
+// //heuristicGC();
+// }
+//
+// /**
+// * Registers a Graphics3D object (not derived from Object3D) for
+// * finalization.
+// */
+// static final void registerFinalizer(Graphics3D g3d)
+// {
+// //heuristicGC();
+// }
+//
+// /**
+// * Registers an Interface object for finalization
+// */
+// static final void registerFinalizer(Interface m2G)
+// {
+// }
+//
+// /**
+// * Registers a Loader object for finalization
+// */
+// static final void registerFinalizer(Loader loader)
+// {
+// }
+//
+// /**
+// * Flushes all pending rendering to a Graphics context and blocks
+// * until finished
+// */
+// static final void sync(Graphics g)
+// {
+// //ToolkitInvoker invoker = ToolkitInvoker.getToolkitInvoker();
+// //invoker.toolkitSync(invoker.getToolkit());
+// }
+//
+// /**
+// * Flushes all pending rendering to an Image object
+// */
+// static final void sync(Image img)
+// {
+// //ToolkitInvoker invoker = ToolkitInvoker.getToolkitInvoker();
+// //invoker.toolkitSync(invoker.getToolkit());
+// }
+//
+// /**
+// * Finalizes the native peer of an interface
+// */
+// static final native void finalizeInterface(int handle);
+//
+// /**
+// * Finalizes the native peer of an object
+// * JCF: added this wrapper method so we could pass the toolkit handle to the native method.
+// */
+ static final void finalizeObject(int handle)
+ {
+ try
+ {
+ final int finalHandle = handle;
+ executeInUIThread(
+ new M2GRunnableQt()
+ {
+ void doRun()
+ {
+ _finalizeObject(finalHandle);
+ }
+ });
+ }
+ catch (Exception e)
+ {
+ // do nothing
+ }
+ }
+
+ /**
+ * Finalizes the native peer of an object associated with
+ * given Interface instance
+ */
+// static final void finalizeObject(int handle, Interface aInterface)
+// {
+// try
+// {
+// final int finalHandle = handle;
+// executeInUIThread(
+// new M2GRunnableQt()
+// {
+// public void doRun()
+// {
+// _finalizeObject(finalHandle);
+// }
+// });
+// }
+// catch (Exception e)
+// {
+// // do nothing
+// }
+// }
+
+
+ //------------------------------------------------------------------
+ // Private methods
+ //------------------------------------------------------------------
+
+ /**
+ * Trigger GC if minimum free memory limit has been exceeded in the native side
+ */
+ static final void heuristicGC()
+ {
+ }
+ private static final native void _finalizeObject(int handle);
+}
+