// This file was created by `gcjh -stubs'. -*- c++ -*- // // This file is intended to give you a head start on implementing native // methods using CNI. // Be aware: running `gcjh -stubs ' once more for this class may // overwrite any edits you have made to this file. #include #include #include #include #include #include "gtkcommon.h" #include void gnu::awt::gtk::GtkComponentPeer::dispose () { GDK_THREADS_ENTER (); gtk_widget_destroy (GTK_WIDGET (ptr)); GDK_THREADS_LEAVE (); } ::java::awt::Point * gnu::awt::gtk::GtkComponentPeer::getLocationOnScreen () { gint x, y; _Jv_GdkThreadLock sync; gdk_window_get_root_origin (GTK_WIDGET (ptr)->window, &x, &y); return new ::java::awt::Point (x, y); } ::java::awt::Dimension * gnu::awt::gtk::GtkComponentPeer::getMinimumSize () { GtkRequisition req; ::java::awt::Dimension *dim = new ::java::awt::Dimension (); GDK_THREADS_ENTER (); gtk_widget_size_request (GTK_WIDGET (ptr), &req); GDK_THREADS_LEAVE (); dim->width = (jint) req.width; dim->height = (jint) req.height; return dim; } ::java::awt::Dimension * gnu::awt::gtk::GtkComponentPeer::getPreferredSize () { return getMinimumSize (); } void gnu::awt::gtk::GtkComponentPeer::requestFocus () { GDK_THREADS_ENTER (); gtk_widget_grab_focus (GTK_WIDGET (ptr)); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::setBounds (jint x, jint y, jint width, jint height) { GDK_THREADS_ENTER (); GtkWidget *widget = GTK_WIDGET (ptr); gtk_widget_set_usize (widget, width, height); //gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::setCursor (::java::awt::Cursor *cursor) { GdkCursorType type; switch (cursor->type) { case ::java::awt::Cursor::CROSSHAIR_CURSOR: type = GDK_CROSSHAIR; break; case ::java::awt::Cursor::TEXT_CURSOR: type = GDK_XTERM; break; case ::java::awt::Cursor::WAIT_CURSOR: type = GDK_WATCH; break; case ::java::awt::Cursor::SW_RESIZE_CURSOR: type = GDK_BOTTOM_LEFT_CORNER; break; case ::java::awt::Cursor::SE_RESIZE_CURSOR: type = GDK_BOTTOM_RIGHT_CORNER; break; case ::java::awt::Cursor::NW_RESIZE_CURSOR: type = GDK_TOP_LEFT_CORNER; break; case ::java::awt::Cursor::NE_RESIZE_CURSOR: type = GDK_TOP_RIGHT_CORNER; break; case ::java::awt::Cursor::N_RESIZE_CURSOR: type = GDK_TOP_SIDE; break; case ::java::awt::Cursor::S_RESIZE_CURSOR: type = GDK_RIGHT_SIDE; break; case ::java::awt::Cursor::W_RESIZE_CURSOR: type = GDK_LEFT_SIDE; break; case ::java::awt::Cursor::E_RESIZE_CURSOR: type = GDK_BOTTOM_SIDE; break; case ::java::awt::Cursor::HAND_CURSOR: type = GDK_HAND1; break; case ::java::awt::Cursor::MOVE_CURSOR: type = GDK_FLEUR; break; case ::java::awt::Cursor::CUSTOM_CURSOR: // FIXME: not implemented yet. We want a gtk-specific subclass // of Cursor which holds a new gdk cursor. For now, fall // through. case ::java::awt::Cursor::DEFAULT_CURSOR: default: type = GDK_LEFT_PTR; break; } _Jv_GdkThreadLock sync; GtkWidget *widget = GTK_WIDGET (ptr); GdkCursor *cursor = gdk_cursor_new (type); gdk_window_set_cursor (widget->window, cursor); gdk_cursor_destroy (cursor); } void gnu::awt::gtk::GtkComponentPeer::setEnabled (jboolean enabled) { GDK_THREADS_ENTER (); gtk_widget_set_sensitive (GTK_WIDGET (ptr), enabled); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::setEventMask (jlong) { // TODO } void gnu::awt::gtk::GtkComponentPeer::setFont (::java::awt::Font *) { // TODO } void gnu::awt::gtk::GtkComponentPeer::setForeground (::java::awt::Color *color) { // FIXME: This doesn't work if component is already realized/visible GdkColor gcolor; _Jv_ConvertAwtColor(color, &gcolor); GDK_THREADS_ENTER (); GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (ptr)); style->bg[GTK_STATE_NORMAL] = gcolor; style->bg[GTK_STATE_ACTIVE] = gcolor; style->bg[GTK_STATE_PRELIGHT] = gcolor; style->bg[GTK_STATE_SELECTED] = gcolor; style->bg[GTK_STATE_INSENSITIVE] = gcolor; gtk_widget_set_style (GTK_WIDGET (ptr), style); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::setBackground (::java::awt::Color *color) { // FIXME: This doesn't work if component is already realized/visible GdkColor gcolor; _Jv_ConvertAwtColor(color, &gcolor); GDK_THREADS_ENTER (); GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (ptr)); style->bg[GTK_STATE_NORMAL] = gcolor; style->bg[GTK_STATE_ACTIVE] = gcolor; style->bg[GTK_STATE_PRELIGHT] = gcolor; style->bg[GTK_STATE_SELECTED] = gcolor; style->bg[GTK_STATE_INSENSITIVE] = gcolor; // gtk allows us to set color values for different states of the // widget. AWT only provides a single background color, so scale it // to get some reasonable values. // _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_ACTIVE], -0.1); // _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_PRELIGHT], 0.2); // _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_SELECTED], -0.2); // _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_INSENSITIVE], -0.2); gtk_widget_set_style (GTK_WIDGET (ptr), style); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::setVisible (jboolean visible) { GDK_THREADS_ENTER (); GtkWidget *widget = GTK_WIDGET (ptr); if (visible) gtk_widget_show (widget); else gtk_widget_hide (widget); _Jv_FlushRequests (); GDK_THREADS_LEAVE (); } void gnu::awt::gtk::GtkComponentPeer::create () { } void gnu::awt::gtk::GtkComponentPeer::realize () { GDK_THREADS_ENTER (); gtk_widget_realize (GTK_WIDGET (ptr)); GDK_THREADS_LEAVE (); }