/* 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 JNIEXPORT void JNICALL Java_DemoJAWT_paint (JNIEnv* env, jobject canvas, jobject graphics) { 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) 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); }