OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / libjava / classpath / examples / gnu / classpath / examples / jawt / DemoJAWT.c
diff --git a/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c b/libjava/classpath/examples/gnu/classpath/examples/jawt/DemoJAWT.c
new file mode 100644 (file)
index 0000000..ee2d7bf
--- /dev/null
@@ -0,0 +1,150 @@
+/* DemoJAWT.c -- native portion of AWT Native Interface demo
+   Copyright (C) 2005  Free Software Foundation, Inc.
+
+This file is part of GNU Classpath examples.
+
+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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA. */
+
+#include "DemoJAWT.h"
+#include "jawt_md.h"
+#include <string.h>
+
+JNIEXPORT void JNICALL
+Java_gnu_classpath_examples_jawt_DemoJAWT_paintIt (JNIEnv* env,
+                                                  jobject canvas,
+                                                  jobject graphics,
+                                                  jboolean on)
+{
+  JAWT awt;
+  JAWT_DrawingSurface* surface;
+  JAWT_DrawingSurfaceInfo* surface_info;
+  JAWT_X11DrawingSurfaceInfo* surface_info_x11;
+  jint lock;
+  GC gc;
+  int c;
+  char* test_string = "JAWT";
+  XColor orange;
+  XColor yellow;
+  XColor blue;
+  Display* display;
+  Drawable drawable;
+  Status status;
+
+  awt.version = JAWT_VERSION_1_3;
+  if (JAWT_GetAWT (env, &awt) == JNI_FALSE)
+    {
+      printf ("couldn't find AWT\n");
+      return;
+    }
+
+  surface = awt.GetDrawingSurface (env, canvas);
+  if (surface == NULL)
+    {
+      printf ("drawing surface is NULL\n");
+      return;
+    }
+
+  lock = surface->Lock (surface);
+  if ((lock & JAWT_LOCK_ERROR) != 0)
+    {
+      printf ("couldn't lock drawing surface\n");
+      awt.FreeDrawingSurface (surface);
+      return;
+    }
+
+  surface_info = surface->GetDrawingSurfaceInfo (surface);
+  if (surface_info == NULL)
+    {
+      printf ("couldn't get surface information\n");
+      surface->Unlock (surface);
+      awt.FreeDrawingSurface (surface);
+      return;
+    }
+
+  surface_info_x11 = (JAWT_X11DrawingSurfaceInfo*) surface_info->platformInfo;
+
+  display = surface_info_x11->display;
+  drawable = surface_info_x11->drawable;
+
+  gc = XCreateGC (display, drawable, 0, 0);
+  XSetBackground (display, gc, 0);
+
+  orange.red = 254 * 65535 / 255;
+  orange.green = 90 * 65535 / 255;
+  orange.blue = 16 * 65535 / 255;
+
+  /* assume color lookups succeed */
+  status = XAllocColor (display, DefaultColormap (display,
+                                                 DefaultScreen (display)),
+                       &orange);
+
+  if (!status)
+    {
+      printf ("color allocation failed\n");
+      goto cleanup;
+    }
+
+  yellow.red = 255 * 65535 / 255;
+  yellow.green = 255 * 65535 / 255;
+  yellow.blue = 0 * 65535 / 255;
+
+  XAllocColor (display, DefaultColormap (display,
+                                        DefaultScreen (display)),
+              &yellow);
+
+  if (!status)
+    {
+      printf ("color allocation failed\n");
+      goto cleanup;
+    }
+
+  blue.red = 16 * 65535 / 255;
+  blue.green = 30 * 65535 / 255;
+  blue.blue = 137 * 65535 / 255;
+
+  XAllocColor (display, DefaultColormap (display,
+                                        DefaultScreen (display)),
+               &blue);
+
+  if (!status)
+    {
+      printf ("color allocation failed\n");
+      goto cleanup;
+    }
+
+  for (c = 5; c >= 0; c--)
+    {
+      if (c % 2 == on)
+       XSetForeground (display, gc, yellow.pixel);
+      else
+       XSetForeground (display, gc, orange.pixel);
+
+      XFillArc (display, drawable, gc, 140 - c * 15, 140 - c * 15, c * 30, c * 30, 0, 360 * 64);
+    }
+
+  XSetForeground (display, gc, blue.pixel);
+  XDrawString (display, drawable,
+              gc, 129, 145, test_string, strlen (test_string));
+
+ cleanup:
+  XFreeGC (display, gc);
+
+  surface->FreeDrawingSurfaceInfo (surface_info);
+
+  surface->Unlock (surface);
+
+  awt.FreeDrawingSurface (surface);
+}