aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/awt/gtk/gtkcommon.h
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/awt/gtk/gtkcommon.h')
-rw-r--r--libjava/gnu/awt/gtk/gtkcommon.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/libjava/gnu/awt/gtk/gtkcommon.h b/libjava/gnu/awt/gtk/gtkcommon.h
new file mode 100644
index 0000000..4e9c430
--- /dev/null
+++ b/libjava/gnu/awt/gtk/gtkcommon.h
@@ -0,0 +1,71 @@
+// -*- c++ -*-
+// gtkutils.h - Common defines and inline functions for the gtk AWT peers.
+
+/* Copyright (C) 2000 Free Software Foundation
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+#ifndef __GTKCOMMON_H__
+#define __GTKCOMMON_H__
+
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include <java/awt/Color.h>
+
+// Convert AWT Color to gdk color value.
+static inline void
+_Jv_ConvertAwtColor(java::awt::Color* awtcolor, GdkColor* gdkcolor)
+{
+ jint rgb = awtcolor->getRGB();
+ gushort r = (rgb >> 16) & 0xFF;
+ gushort g = (rgb >> 8) & 0xFF;
+ gushort b = rgb & 0xFF;
+
+ gdkcolor->red = (r << 8) + r;
+ gdkcolor->green = (g << 8) + g;
+ gdkcolor->blue = (b << 8) + b;
+
+ // FIXME: Deal with colormap? gdk_color_alloc()?
+}
+
+// Convert gdk color value to AWT Color.
+static inline java::awt::Color*
+_Jv_ConvertGtkColor (GdkColor* gdkcolor)
+{
+ jint r = gdkcolor->red >> 8;
+ jint g = gdkcolor->green >> 8;
+ jint b = gdkcolor->blue >> 8;
+
+ java::awt::Color *c = new java::awt::Color(r,g,b);
+
+ return c;
+}
+
+static inline void
+_Jv_GdkScaleColor (GdkColor* oldc, GdkColor* newc, gfloat scale)
+{
+ // FIXME: Need to deal with overflows or find a better way
+ *newc = *oldc;
+ newc->red += (gushort) (newc->red * scale);
+ newc->green += (gushort) (newc->green * scale);
+ newc->blue += (gushort) (newc->blue * scale);
+}
+
+// Normally the X queue gets flushed automatically when gtk's event loop goes
+// idle. However, some calls do not cause any activitity on the event loop,
+// so we need to occasionally flush pending requests manually because we arn't
+// running from the gtk_main thread. Note that gdk_flush calls XSync(), which
+// is more than what is needed here.
+static inline void
+_Jv_FlushRequests ()
+{
+ // FIXME: What about platforms that arn't X?
+ XFlush (GDK_DISPLAY ());
+}
+
+#endif /* __GTKUTILS_H__ */