1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52:
53: public class GtkFramePeer extends GtkWindowPeer
54: implements FramePeer
55: {
56: private int menuBarHeight;
57: private MenuBarPeer menuBar;
58: native int getMenuBarHeight (MenuBarPeer bar);
59: native void setMenuBarWidthUnlocked (MenuBarPeer bar, int width);
60: native void setMenuBarWidth (MenuBarPeer bar, int width);
61: native void setMenuBarPeer (MenuBarPeer bar);
62: native void removeMenuBarPeer ();
63: native void gtkFixedSetVisible (boolean visible);
64:
65: int getMenuBarHeight ()
66: {
67: return menuBar == null ? 0 : getMenuBarHeight (menuBar);
68: }
69:
70: public void setMenuBar (MenuBar bar)
71: {
72: if (bar == null && menuBar != null)
73: {
74:
75: gtkFixedSetVisible (false);
76: menuBar = null;
77: removeMenuBarPeer ();
78: insets.top -= menuBarHeight;
79: menuBarHeight = 0;
80: awtComponent.validate ();
81: gtkFixedSetVisible (true);
82: }
83: else if (bar != null && menuBar == null)
84: {
85:
86: gtkFixedSetVisible (false);
87: menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
88: setMenuBarPeer (menuBar);
89: int menuBarWidth =
90: awtComponent.getWidth () - insets.left - insets.right;
91: if (menuBarWidth > 0)
92: setMenuBarWidth (menuBar, menuBarWidth);
93: menuBarHeight = getMenuBarHeight ();
94: insets.top += menuBarHeight;
95: awtComponent.validate ();
96: gtkFixedSetVisible (true);
97: }
98: else if (bar != null && menuBar != null)
99: {
100:
101: gtkFixedSetVisible (false);
102: removeMenuBarPeer();
103: int oldHeight = menuBarHeight;
104: int menuBarWidth =
105: awtComponent.getWidth () - insets.left - insets.right;
106: menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
107: setMenuBarPeer (menuBar);
108: if (menuBarWidth > 0)
109: setMenuBarWidth (menuBar, menuBarWidth);
110: menuBarHeight = getMenuBarHeight ();
111: if (oldHeight != menuBarHeight)
112: {
113: insets.top += (menuBarHeight - oldHeight);
114: awtComponent.validate ();
115: }
116: gtkFixedSetVisible (true);
117: }
118: }
119:
120: public void setBounds (int x, int y, int width, int height)
121: {
122:
123:
124: if (Thread.currentThread() == GtkToolkit.mainThread)
125: {
126: int menuBarWidth = width - insets.left - insets.right;
127: if (menuBar != null && menuBarWidth > 0)
128: setMenuBarWidthUnlocked (menuBar, menuBarWidth);
129:
130: return;
131: }
132:
133: int menuBarWidth = width - insets.left - insets.right;
134: if (menuBar != null && menuBarWidth > 0)
135: setMenuBarWidth (menuBar, menuBarWidth);
136:
137: nativeSetBounds (x, y,
138: width - insets.left - insets.right,
139: height - insets.top - insets.bottom
140: + menuBarHeight);
141: }
142:
143: public void setResizable (boolean resizable)
144: {
145:
146:
147:
148: setSize (awtComponent.getWidth() - insets.left - insets.right,
149: awtComponent.getHeight() - insets.top - insets.bottom
150: + menuBarHeight);
151: gtkWindowSetResizable (resizable);
152: }
153:
154: protected void postInsetsChangedEvent (int top, int left,
155: int bottom, int right)
156: {
157: insets.top = top + menuBarHeight;
158: insets.left = left;
159: insets.bottom = bottom;
160: insets.right = right;
161: }
162:
163: public GtkFramePeer (Frame frame)
164: {
165: super (frame);
166: }
167:
168: void create ()
169: {
170:
171: create (GDK_WINDOW_TYPE_HINT_NORMAL,
172: !((Frame) awtComponent).isUndecorated ());
173:
174: Frame frame = (Frame) awtComponent;
175:
176: setMenuBar (frame.getMenuBar ());
177:
178: setTitle (frame.getTitle ());
179: gtkWindowSetResizable (frame.isResizable ());
180: setIconImage(frame.getIconImage());
181: }
182:
183: native void nativeSetIconImage (GtkImage image);
184:
185: public void setIconImage (Image image)
186: {
187: if (image != null)
188: {
189: if (image instanceof GtkImage)
190: nativeSetIconImage((GtkImage) image);
191: else
192: nativeSetIconImage(new GtkImage(image.getSource()));
193: }
194: }
195:
196: public Graphics getGraphics ()
197: {
198: Graphics g;
199: if (GtkToolkit.useGraphics2D ())
200: g = new GdkGraphics2D (this);
201: else
202: g = new GdkGraphics (this);
203: g.translate (-insets.left, -insets.top);
204: return g;
205: }
206:
207: protected void postConfigureEvent (int x, int y, int width, int height)
208: {
209: int frame_width = width + insets.left + insets.right;
210:
211:
212: int frame_height = height + insets.top + insets.bottom - menuBarHeight;
213:
214: if (frame_width != awtComponent.getWidth()
215: || frame_height != awtComponent.getHeight())
216: awtComponent.setSize(frame_width, frame_height);
217:
218: int frame_x = x - insets.left;
219:
220:
221:
222: int frame_y = y - insets.top + menuBarHeight;
223:
224: if (frame_x != awtComponent.getX()
225: || frame_y != awtComponent.getY())
226: {
227:
228: }
229: }
230:
231: protected void postMouseEvent(int id, long when, int mods, int x, int y,
232: int clickCount, boolean popupTrigger)
233: {
234: super.postMouseEvent (id, when, mods,
235: x + insets.left, y + insets.top,
236: clickCount, popupTrigger);
237: }
238:
239: protected void postExposeEvent (int x, int y, int width, int height)
240: {
241: if (!isInRepaint)
242: q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
243: new Rectangle (x + insets.left,
244: y + insets.top,
245: width, height)));
246: }
247:
248: public int getState ()
249: {
250: return 0;
251: }
252:
253: public void setState (int state)
254: {
255:
256: }
257:
258: public void setMaximizedBounds (Rectangle r)
259: {
260:
261: }
262: public void setBoundsPrivate(int x, int y, int width, int height)
263: {
264:
265:
266: }
267: public void updateAlwaysOnTop()
268: {
269:
270:
271: }
272: public boolean requestWindowFocus()
273: {
274:
275: return false;
276: }
277: }
278: