// -*- 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 #include #include class _Jv_GdkThreadLock { public: _Jv_GdkThreadLock () { GDK_THREADS_ENTER (); } ~_Jv_GdkThreadLock () { GDK_THREADS_LEAVE (); } }; // 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__ */