aboutsummaryrefslogtreecommitdiff
path: root/libjava/jawt.c
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2005-02-14 21:08:08 +0000
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>2005-02-14 21:08:08 +0000
commitc36eda5462a917b6b23c07fa0ac1752cf830a29d (patch)
tree24123b91fac1a16e6031e39bd090dd4a32dcc631 /libjava/jawt.c
parent5728cb66879693b5487590579e0022b1e1e5175c (diff)
downloadgcc-c36eda5462a917b6b23c07fa0ac1752cf830a29d.zip
gcc-c36eda5462a917b6b23c07fa0ac1752cf830a29d.tar.gz
gcc-c36eda5462a917b6b23c07fa0ac1752cf830a29d.tar.bz2
jawt.c: New file.
2005-02-14 Thomas Fitzsimmons <fitzsim@redhat.com> * jawt.c: New file. * include/jawt.h: Likewise. * include/jawt_md.h: Likewise. * include/Makefile.am (tool_include__HEADERS): Add jawt.h and jawt_md.h files. * include/Makefile.in: Regenerate. * jni/classpath/classpath_jawt.h: Likewise. * jni/gtk-peer/gtk_jawt.c: Likewise. * Makefile.am: Build libjawt.so. * Makefile.in: Regenerate. From-SVN: r95047
Diffstat (limited to 'libjava/jawt.c')
-rw-r--r--libjava/jawt.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/libjava/jawt.c b/libjava/jawt.c
new file mode 100644
index 0000000..08cd78c
--- /dev/null
+++ b/libjava/jawt.c
@@ -0,0 +1,156 @@
+/* jawt.c -- X11 implementation of the AWT Native Interface
+ Copyright (C) 2005 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+#include <jni.h>
+#include <jawt.h>
+#include <jawt_md.h>
+#include "classpath_jawt.h"
+
+static jint (JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface);
+static void (JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface);
+static JAWT_DrawingSurfaceInfo* (JNICALL _Jv_GetDrawingSurfaceInfo)
+ (JAWT_DrawingSurface* surface);
+static void (JNICALL _Jv_FreeDrawingSurfaceInfo)
+ (JAWT_DrawingSurfaceInfo* surface_info);
+static JAWT_DrawingSurface* (JNICALL _Jv_GetDrawingSurface) (JNIEnv* env,
+ jobject canvas);
+static void (JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface);
+
+JNIEXPORT jboolean JNICALL
+JAWT_GetAWT (JNIEnv* env, JAWT* awt)
+{
+ jint retrieved_version;
+
+ retrieved_version = classpath_jawt_get_awt_version ();
+
+ if (awt->version > retrieved_version)
+ return JNI_FALSE;
+
+ awt->GetDrawingSurface = _Jv_GetDrawingSurface;
+ awt->FreeDrawingSurface = _Jv_FreeDrawingSurface;
+
+ return JNI_TRUE;
+}
+
+/* JAWT_DrawingSurface functions */
+
+static jint
+(JNICALL _Jv_Lock) (JAWT_DrawingSurface* surface)
+{
+ /* lock the drawing surface */
+ return classpath_jawt_lock ();
+}
+
+static void
+(JNICALL _Jv_Unlock) (JAWT_DrawingSurface* surface)
+{
+ classpath_jawt_unlock ();
+}
+
+static JAWT_DrawingSurfaceInfo*
+(JNICALL _Jv_GetDrawingSurfaceInfo) (JAWT_DrawingSurface* surface)
+{
+ if (surface == NULL)
+ return NULL;
+
+ return surface->surface_info;
+}
+
+static void
+(JNICALL _Jv_FreeDrawingSurfaceInfo) (JAWT_DrawingSurfaceInfo* surface_info)
+{
+ JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+
+ if (surface_info == NULL)
+ return;
+
+ surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface_info->platformInfo;
+
+ surface_info_x11->display = NULL;
+ surface_info_x11->drawable = 0;
+
+ free (surface_info);
+ surface_info = NULL;
+}
+
+/* JAWT functions */
+
+static JAWT_DrawingSurface*
+(JNICALL _Jv_GetDrawingSurface) (JNIEnv* env, jobject canvas)
+{
+ JAWT_DrawingSurface* surface;
+ JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+
+ surface = (JAWT_DrawingSurface*) malloc (sizeof (JAWT_DrawingSurface));
+
+ if (surface == NULL)
+ return NULL;
+
+ /* initialize function pointers */
+ surface->GetDrawingSurfaceInfo = _Jv_GetDrawingSurfaceInfo;
+ surface->FreeDrawingSurfaceInfo = _Jv_FreeDrawingSurfaceInfo;
+
+ surface->Lock = _Jv_Lock;
+ surface->Unlock = _Jv_Unlock;
+
+ surface->surface_info = (JAWT_DrawingSurfaceInfo*) malloc (sizeof (JAWT_DrawingSurfaceInfo));
+
+ if (surface->surface_info == NULL)
+ return NULL;
+
+ surface->surface_info->platformInfo = malloc (sizeof (JAWT_X11DrawingSurfaceInfo));
+
+ if (surface->surface_info->platformInfo == NULL)
+ return NULL;
+
+ surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface->surface_info->platformInfo;
+
+ surface_info_x11->display = classpath_jawt_get_default_display (env, canvas);
+ surface_info_x11->drawable = classpath_jawt_get_drawable (env, canvas);
+
+ /* FIXME: also include bounding rectangle of drawing surface */
+ /* FIXME: also include current clipping region */
+
+ return surface;
+}
+
+static void
+(JNICALL _Jv_FreeDrawingSurface) (JAWT_DrawingSurface* surface)
+{
+ free (surface);
+}