This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] implement GtkToolkit.loadSystemColors
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Wed, 12 May 2004 19:42:37 -0400
- Subject: [gui][PATCH] implement GtkToolkit.loadSystemColors
Hi,
I committed this patch to java-gui-branch. It implements
GtkToolkit.loadSystemColors.
Tom
2004-05-12 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkToolkit.java (loadSystemColors): Make
native.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
(gdk_color_to_java_color): New function.
* jni/gtk-peer/gtkpeer.h: Add SystemColor defines.
Index: gnu/java/awt/peer/gtk/GtkToolkit.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkToolkit.java,v
retrieving revision 1.8.2.3
diff -u -r1.8.2.3 GtkToolkit.java
--- gnu/java/awt/peer/gtk/GtkToolkit.java 25 Feb 2004 20:37:27 -0000 1.8.2.3
+++ gnu/java/awt/peer/gtk/GtkToolkit.java 12 May 2004 23:35:00 -0000
@@ -432,9 +432,7 @@
return q;
}
- protected void loadSystemColors (int[] systemColors)
- {
- }
+ protected native void loadSystemColors (int[] systemColors);
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e)
{
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c,v
retrieving revision 1.2
diff -u -r1.2 gnu_java_awt_peer_gtk_GtkToolkit.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c 8 Oct 2003 15:49:33 -0000 1.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c 12 May 2004 23:35:01 -0000
@@ -39,6 +39,8 @@
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkToolkit.h"
+static jint gdk_color_to_java_color (GdkColor color);
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkToolkit_beep
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)))
@@ -88,3 +90,70 @@
return res;
}
+#define CONVERT(type, state) \
+ gdk_color_to_java_color (style->type[GTK_STATE_ ## state])
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors
+ (JNIEnv *env, jobject obj __attribute__((unused)),
+ jintArray jcolors)
+{
+ jint *colors;
+ GtkStyle *style;
+
+ colors = (*env)->GetIntArrayElements (env, jcolors, 0);
+
+ gdk_threads_enter ();
+
+ style = gtk_widget_get_default_style ();
+
+ colors[AWT_DESKTOP] = CONVERT (bg, SELECTED);
+ colors[AWT_ACTIVE_CAPTION] = CONVERT (bg, SELECTED);
+ colors[AWT_ACTIVE_CAPTION_TEXT] = CONVERT (text, SELECTED);
+ colors[AWT_ACTIVE_CAPTION_BORDER] = CONVERT (fg, NORMAL);
+ colors[AWT_INACTIVE_CAPTION] = CONVERT (base, INSENSITIVE);
+ colors[AWT_INACTIVE_CAPTION_TEXT] = CONVERT (fg, INSENSITIVE);
+ colors[AWT_INACTIVE_CAPTION_BORDER] = CONVERT (fg, INSENSITIVE);
+ colors[AWT_WINDOW] = CONVERT (bg, NORMAL);
+ colors[AWT_WINDOW_BORDER] = CONVERT (fg, NORMAL);
+ colors[AWT_WINDOW_TEXT] = CONVERT (fg, NORMAL);
+ colors[AWT_MENU] = CONVERT (bg, NORMAL);
+ colors[AWT_MENU_TEXT] = CONVERT (fg, NORMAL);
+ colors[AWT_TEXT] = CONVERT (bg, NORMAL);
+ colors[AWT_TEXT_TEXT] = CONVERT (fg, NORMAL);
+ colors[AWT_TEXT_HIGHLIGHT] = CONVERT (bg, SELECTED);
+ colors[AWT_TEXT_HIGHLIGHT_TEXT] = CONVERT (fg, SELECTED);
+ colors[AWT_TEXT_INACTIVE_TEXT] = CONVERT (bg, INSENSITIVE);
+ colors[AWT_CONTROL] = CONVERT (bg, NORMAL);
+ colors[AWT_CONTROL_TEXT] = CONVERT (fg, NORMAL);
+ colors[AWT_CONTROL_HIGHLIGHT] = CONVERT (base, ACTIVE);
+ colors[AWT_CONTROL_LT_HIGHLIGHT] = CONVERT (bg, PRELIGHT);
+ colors[AWT_CONTROL_SHADOW] = CONVERT (bg, ACTIVE);
+ colors[AWT_CONTROL_DK_SHADOW] = CONVERT (fg, INSENSITIVE);
+ colors[AWT_SCROLLBAR] = CONVERT (base, INSENSITIVE);
+ colors[AWT_INFO] = CONVERT (bg, NORMAL);
+ colors[AWT_INFO_TEXT] = CONVERT (fg, NORMAL);
+
+ gdk_threads_leave ();
+
+ (*env)->ReleaseIntArrayElements(env, jcolors, colors, 0);
+}
+
+#undef CONVERT
+
+static jint
+gdk_color_to_java_color (GdkColor gdk_color)
+{
+ guchar red;
+ guchar green;
+ guchar blue;
+ float factor;
+
+ factor = 255.0 / 65535.0;
+
+ red = (float) gdk_color.red * factor;
+ green = (float) gdk_color.green * factor;
+ blue = (float) gdk_color.blue * factor;
+
+ return (jint) (0xff000000 | (red << 16) | (green << 8) | blue);
+}
Index: jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.12.8.1
diff -u -r1.12.8.1 gtkpeer.h
--- jni/gtk-peer/gtkpeer.h 22 Apr 2004 17:47:38 -0000 1.12.8.1
+++ jni/gtk-peer/gtkpeer.h 12 May 2004 23:35:01 -0000
@@ -385,6 +385,35 @@
#define AWT_STYLE_BOLD 1
#define AWT_STYLE_ITALIC 2
+/* From java.awt.SystemColor */
+#define AWT_DESKTOP 0
+#define AWT_ACTIVE_CAPTION 1
+#define AWT_ACTIVE_CAPTION_TEXT 2
+#define AWT_ACTIVE_CAPTION_BORDER 3
+#define AWT_INACTIVE_CAPTION 4
+#define AWT_INACTIVE_CAPTION_TEXT 5
+#define AWT_INACTIVE_CAPTION_BORDER 6
+#define AWT_WINDOW 7
+#define AWT_WINDOW_BORDER 8
+#define AWT_WINDOW_TEXT 9
+#define AWT_MENU 10
+#define AWT_MENU_TEXT 11
+#define AWT_TEXT 12
+#define AWT_TEXT_TEXT 13
+#define AWT_TEXT_HIGHLIGHT 14
+#define AWT_TEXT_HIGHLIGHT_TEXT 15
+#define AWT_TEXT_INACTIVE_TEXT 16
+#define AWT_CONTROL 17
+#define AWT_CONTROL_TEXT 18
+#define AWT_CONTROL_HIGHLIGHT 19
+#define AWT_CONTROL_LT_HIGHLIGHT 20
+#define AWT_CONTROL_SHADOW 21
+#define AWT_CONTROL_DK_SHADOW 22
+#define AWT_SCROLLBAR 23
+#define AWT_INFO 24
+#define AWT_INFO_TEXT 25
+#define AWT_NUM_COLORS 26
+
extern jmethodID setBoundsCallbackID;
extern jmethodID postActionEventID;