2000-10-02 13:14:25 +08:00
|
|
|
// -*- 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>
|
|
|
|
|
2001-01-13 07:08:23 +08:00
|
|
|
class _Jv_GdkThreadLock
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
_Jv_GdkThreadLock ()
|
|
|
|
{
|
|
|
|
GDK_THREADS_ENTER ();
|
|
|
|
}
|
|
|
|
|
|
|
|
~_Jv_GdkThreadLock ()
|
|
|
|
{
|
|
|
|
GDK_THREADS_LEAVE ();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2000-10-02 13:14:25 +08:00
|
|
|
// 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__ */
|