source: trunk/gcc/libjava/gnu/awt/gtk/natGtkComponentPeer.cc

Last change on this file was 2, checked in by bird, 22 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 5.9 KB
Line 
1// This file was created by `gcjh -stubs'. -*- c++ -*-
2//
3// This file is intended to give you a head start on implementing native
4// methods using CNI.
5// Be aware: running `gcjh -stubs ' once more for this class may
6// overwrite any edits you have made to this file.
7
8#include <config.h>
9
10#include <gcj/cni.h>
11
12#include <java/awt/Point.h>
13#include <java/awt/Dimension.h>
14#include <java/awt/Cursor.h>
15
16#include "gtkcommon.h"
17
18#include <gnu/awt/gtk/GtkComponentPeer.h>
19
20
21void
22gnu::awt::gtk::GtkComponentPeer::dispose ()
23{
24 GDK_THREADS_ENTER ();
25 gtk_widget_destroy (GTK_WIDGET (ptr));
26 GDK_THREADS_LEAVE ();
27}
28
29
30::java::awt::Point *
31gnu::awt::gtk::GtkComponentPeer::getLocationOnScreen ()
32{
33 gint x, y;
34 _Jv_GdkThreadLock sync;
35 gdk_window_get_root_origin (GTK_WIDGET (ptr)->window, &x, &y);
36 return new ::java::awt::Point (x, y);
37}
38
39
40::java::awt::Dimension *
41gnu::awt::gtk::GtkComponentPeer::getMinimumSize ()
42{
43 GtkRequisition req;
44 ::java::awt::Dimension *dim = new ::java::awt::Dimension ();
45
46 GDK_THREADS_ENTER ();
47
48 gtk_widget_size_request (GTK_WIDGET (ptr), &req);
49
50 GDK_THREADS_LEAVE ();
51
52 dim->width = (jint) req.width;
53 dim->height = (jint) req.height;
54 return dim;
55}
56
57
58::java::awt::Dimension *
59gnu::awt::gtk::GtkComponentPeer::getPreferredSize ()
60{
61 return getMinimumSize ();
62}
63
64
65void
66gnu::awt::gtk::GtkComponentPeer::requestFocus ()
67{
68 GDK_THREADS_ENTER ();
69
70 gtk_widget_grab_focus (GTK_WIDGET (ptr));
71
72 GDK_THREADS_LEAVE ();
73}
74
75
76void
77gnu::awt::gtk::GtkComponentPeer::setBounds (jint x, jint y,
78 jint width, jint height)
79{
80 GDK_THREADS_ENTER ();
81
82 GtkWidget *widget = GTK_WIDGET (ptr);
83 gtk_widget_set_usize (widget, width, height);
84 //gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y);
85
86 GDK_THREADS_LEAVE ();
87}
88
89
90void
91gnu::awt::gtk::GtkComponentPeer::setCursor (::java::awt::Cursor *cursor)
92{
93 GdkCursorType type;
94
95 switch (cursor->type)
96 {
97 case ::java::awt::Cursor::CROSSHAIR_CURSOR:
98 type = GDK_CROSSHAIR;
99 break;
100 case ::java::awt::Cursor::TEXT_CURSOR:
101 type = GDK_XTERM;
102 break;
103 case ::java::awt::Cursor::WAIT_CURSOR:
104 type = GDK_WATCH;
105 break;
106 case ::java::awt::Cursor::SW_RESIZE_CURSOR:
107 type = GDK_BOTTOM_LEFT_CORNER;
108 break;
109 case ::java::awt::Cursor::SE_RESIZE_CURSOR:
110 type = GDK_BOTTOM_RIGHT_CORNER;
111 break;
112 case ::java::awt::Cursor::NW_RESIZE_CURSOR:
113 type = GDK_TOP_LEFT_CORNER;
114 break;
115 case ::java::awt::Cursor::NE_RESIZE_CURSOR:
116 type = GDK_TOP_RIGHT_CORNER;
117 break;
118 case ::java::awt::Cursor::N_RESIZE_CURSOR:
119 type = GDK_TOP_SIDE;
120 break;
121 case ::java::awt::Cursor::S_RESIZE_CURSOR:
122 type = GDK_RIGHT_SIDE;
123 break;
124 case ::java::awt::Cursor::W_RESIZE_CURSOR:
125 type = GDK_LEFT_SIDE;
126 break;
127 case ::java::awt::Cursor::E_RESIZE_CURSOR:
128 type = GDK_BOTTOM_SIDE;
129 break;
130 case ::java::awt::Cursor::HAND_CURSOR:
131 type = GDK_HAND1;
132 break;
133 case ::java::awt::Cursor::MOVE_CURSOR:
134 type = GDK_FLEUR;
135 break;
136 case ::java::awt::Cursor::CUSTOM_CURSOR:
137 // FIXME: not implemented yet. We want a gtk-specific subclass
138 // of Cursor which holds a new gdk cursor. For now, fall
139 // through.
140
141 case ::java::awt::Cursor::DEFAULT_CURSOR:
142 default:
143 type = GDK_LEFT_PTR;
144 break;
145 }
146
147 _Jv_GdkThreadLock sync;
148 GtkWidget *widget = GTK_WIDGET (ptr);
149 GdkCursor *cursor = gdk_cursor_new (type);
150 gdk_window_set_cursor (widget->window, cursor);
151 gdk_cursor_destroy (cursor);
152}
153
154
155void
156gnu::awt::gtk::GtkComponentPeer::setEnabled (jboolean enabled)
157{
158 GDK_THREADS_ENTER ();
159
160 gtk_widget_set_sensitive (GTK_WIDGET (ptr), enabled);
161
162 GDK_THREADS_LEAVE ();
163}
164
165
166void
167gnu::awt::gtk::GtkComponentPeer::setEventMask (jlong)
168{
169 // TODO
170}
171
172
173void
174gnu::awt::gtk::GtkComponentPeer::setFont (::java::awt::Font *)
175{
176 // TODO
177}
178
179
180void
181gnu::awt::gtk::GtkComponentPeer::setForeground (::java::awt::Color *color)
182{
183 // FIXME: This doesn't work if component is already realized/visible
184
185 GdkColor gcolor;
186 _Jv_ConvertAwtColor(color, &gcolor);
187
188 GDK_THREADS_ENTER ();
189
190 GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (ptr));
191
192 style->bg[GTK_STATE_NORMAL] = gcolor;
193 style->bg[GTK_STATE_ACTIVE] = gcolor;
194 style->bg[GTK_STATE_PRELIGHT] = gcolor;
195 style->bg[GTK_STATE_SELECTED] = gcolor;
196 style->bg[GTK_STATE_INSENSITIVE] = gcolor;
197
198 gtk_widget_set_style (GTK_WIDGET (ptr), style);
199
200 GDK_THREADS_LEAVE ();
201}
202
203
204void
205gnu::awt::gtk::GtkComponentPeer::setBackground (::java::awt::Color *color)
206{
207 // FIXME: This doesn't work if component is already realized/visible
208
209 GdkColor gcolor;
210 _Jv_ConvertAwtColor(color, &gcolor);
211
212 GDK_THREADS_ENTER ();
213
214 GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (ptr));
215
216 style->bg[GTK_STATE_NORMAL] = gcolor;
217 style->bg[GTK_STATE_ACTIVE] = gcolor;
218 style->bg[GTK_STATE_PRELIGHT] = gcolor;
219 style->bg[GTK_STATE_SELECTED] = gcolor;
220 style->bg[GTK_STATE_INSENSITIVE] = gcolor;
221 // gtk allows us to set color values for different states of the
222 // widget. AWT only provides a single background color, so scale it
223 // to get some reasonable values.
224// _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_ACTIVE], -0.1);
225// _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_PRELIGHT], 0.2);
226// _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_SELECTED], -0.2);
227// _Jv_GdkScaleColor (&gcolor, &style->bg[GTK_STATE_INSENSITIVE], -0.2);
228
229 gtk_widget_set_style (GTK_WIDGET (ptr), style);
230
231 GDK_THREADS_LEAVE ();
232}
233
234
235void
236gnu::awt::gtk::GtkComponentPeer::setVisible (jboolean visible)
237{
238 GDK_THREADS_ENTER ();
239
240 GtkWidget *widget = GTK_WIDGET (ptr);
241
242 if (visible)
243 gtk_widget_show (widget);
244 else
245 gtk_widget_hide (widget);
246
247 _Jv_FlushRequests ();
248
249 GDK_THREADS_LEAVE ();
250}
251
252
253void
254gnu::awt::gtk::GtkComponentPeer::create ()
255{
256}
257
258
259void
260gnu::awt::gtk::GtkComponentPeer::realize ()
261{
262 GDK_THREADS_ENTER ();
263 gtk_widget_realize (GTK_WIDGET (ptr));
264 GDK_THREADS_LEAVE ();
265}
Note: See TracBrowser for help on using the repository browser.