1 /* Copyright (C) 2000, 2002, 2003  Free Software Foundation
2 
3    This file is part of libgcj.
4 
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8 
9 package gnu.awt.xlib;
10 
11 import java.awt.*;
12 import java.awt.dnd.*;
13 import java.awt.dnd.peer.*;
14 import java.awt.im.*;
15 import java.awt.peer.*;
16 import java.awt.image.ImageProducer;
17 import java.awt.image.ImageObserver;
18 import java.net.*;
19 import java.awt.datatransfer.Clipboard;
20 import java.util.Properties;
21 import java.util.Map;
22 
23 import gnu.gcj.xlib.Display;
24 import gnu.gcj.xlib.Screen;
25 import gnu.gcj.xlib.Visual;
26 
27 public class XToolkit extends Toolkit
28 {
29   static XToolkit INSTANCE;
30 
31   Display display;
32 
33   EventQueue queue;
34   XEventLoop eventLoop;
35 
36   XGraphicsConfiguration defaultConfig;
37 
XToolkit()38   public XToolkit()
39   {
40     INSTANCE = this;
41     display = new Display();
42     synchronized (display)
43       {
44 	queue = new XEventQueue(display);
45 	eventLoop = new XEventLoop(display, queue);
46       }
47   }
48 
flushIfIdle()49   public void flushIfIdle()
50   {
51     eventLoop.flushIfIdle();
52   }
53 
createButton(Button frontend)54   protected ButtonPeer createButton(Button frontend)
55   {
56     // FIXME: Stubbed out, needs Swing:
57     /*
58     XCanvasPeer realPeer = new XCanvasPeer(frontend);
59     SButtonPeer sbPeer = new SButtonPeer(frontend, realPeer);
60     return sbPeer;
61     */
62     return null;
63   }
64 
createTextField(TextField frontend)65   protected TextFieldPeer createTextField(TextField frontend)
66   {
67     return null; // FIXME
68   }
69 
createLabel(Label frontend)70   protected LabelPeer createLabel(Label frontend)
71   {
72     return null; // FIXME
73   }
74 
createList(List frontend)75   protected ListPeer createList(List frontend)
76   {
77     return null; // FIXME
78   }
79 
createCheckbox(Checkbox frontend)80   protected CheckboxPeer createCheckbox(Checkbox frontend)
81   {
82     return null; // FIXME
83   }
84 
createScrollbar(Scrollbar frontend)85   protected ScrollbarPeer createScrollbar(Scrollbar frontend)
86   {
87     return null; // FIXME
88   }
89 
createScrollPane(ScrollPane frontend)90   protected ScrollPanePeer createScrollPane(ScrollPane frontend)
91   {
92     return null; // FIXME
93   }
94 
createTextArea(TextArea frontend)95   protected TextAreaPeer createTextArea(TextArea frontend)
96   {
97     return null; // FIXME
98   }
99 
createChoice(Choice frontend)100   protected ChoicePeer createChoice(Choice frontend)
101   {
102     return null; // FIXME
103   }
104 
createFrame(Frame frontend)105   protected FramePeer createFrame(Frame frontend) {
106     return new XFramePeer(frontend);
107   }
108 
createCanvas(Canvas frontend)109   protected CanvasPeer createCanvas(Canvas frontend) {
110     XCanvasPeer peer = new XCanvasPeer(frontend);
111     return peer;
112   }
113 
createPanel(Panel frontend)114   protected PanelPeer createPanel(Panel frontend) {
115     return new XPanelPeer(frontend);
116   }
117 
createWindow(Window frontend)118   protected WindowPeer createWindow(Window frontend)
119   {
120     return null; // FIXME
121   }
122 
createDialog(Dialog frontend)123   protected DialogPeer createDialog(Dialog frontend)
124   {
125     return null; // FIXME
126   }
127 
createMenuBar(MenuBar frontend)128   protected MenuBarPeer createMenuBar(MenuBar frontend)
129   {
130     return null; // FIXME
131   }
132 
createMenu(Menu frontend)133   protected MenuPeer createMenu(Menu frontend)
134   {
135     return null; // FIXME
136   }
137 
createPopupMenu(PopupMenu frontend)138   protected PopupMenuPeer createPopupMenu(PopupMenu frontend)
139   {
140     return null; // FIXME
141   }
142 
createMenuItem(MenuItem frontend)143   protected MenuItemPeer createMenuItem(MenuItem frontend)
144   {
145     return null; // FIXME
146   }
147 
createFileDialog(FileDialog frontend)148   protected FileDialogPeer createFileDialog(FileDialog frontend)
149   {
150     return null; // FIXME
151   }
152 
153   protected CheckboxMenuItemPeer
createCheckboxMenuItem(CheckboxMenuItem frontend)154       createCheckboxMenuItem(CheckboxMenuItem frontend)
155   {
156     return null; // FIXME
157   }
158 
getFontPeer(String name, int style)159   protected java.awt.peer.FontPeer getFontPeer(String name, int style)
160   {
161     return null;
162   }
163 
getScreenSize()164   public Dimension getScreenSize()
165   {
166     throw new UnsupportedOperationException("not implemented yet");
167   }
168 
getScreenResolution()169   public int getScreenResolution()
170   {
171     throw new UnsupportedOperationException("not implemented yet");
172   }
173 
getColorModel()174   public java.awt.image.ColorModel getColorModel()
175   {
176     return getDefaultXGraphicsConfiguration().getColorModel();
177   }
178 
getFontList()179   public String[] getFontList()
180   {
181     throw new UnsupportedOperationException("not implemented yet");
182   }
183 
getFontMetrics(Font font)184   public FontMetrics getFontMetrics(Font font)
185   {
186     return getDefaultXGraphicsConfiguration().getXFontMetrics(font);
187   }
188 
sync()189   public void sync()
190   {
191     flushIfIdle ();
192     // FIXME: should instead wait for eventLoop to go idle
193     // (perhaps send a dummy event there and block till it makes
194     // it through the queue)
195   }
196 
getImage(String filename)197   public Image getImage(String filename)
198   {
199     return createImage(filename);
200   }
201 
getImage(URL url)202   public Image getImage(URL url)
203   {
204     throw new UnsupportedOperationException("not implemented yet");
205   }
206 
createImage(String filename)207   public Image createImage(String filename)
208   {
209     // FIXME: Stubbed out. We need a proper image I/O API.
210 
211     /*
212     BufferedImage jpeg;
213     FileInputStream fis = openFile(filename);
214     if (fis == null)
215       return null;
216 
217     BasicRasterImageConsumer consumer = new BasicRasterImageConsumer();
218     JPEGImageDecoder jid = new JPEGImageDecoder(fis);
219 
220     jid.startProduction(consumer);
221     jpeg = consumer.getImage();
222 
223     int w = jpeg.getWidth();
224     int h = jpeg.getHeight();
225 
226     BufferedImage img =
227       getDefaultXGraphicsConfiguration().createCompatibleImage(w, h);
228 
229     Renderers renderers = Renderers.getInstance();
230 
231     RasterOp renderer = renderers.createRenderer(jpeg.getColorModel(),
232 						 jpeg.getSampleModel(),
233 						 img.getColorModel(),
234 						 img.getSampleModel());
235 
236     if (renderer == null)
237       {
238 	throw new UnsupportedOperationException("couldn't find renderer");
239       }
240 
241     renderer.filter(jpeg.getRaster(), img.getRaster());
242 
243     return img;
244     */
245 
246     return null;
247   }
248 
createImage(URL url)249   public Image createImage(URL url)
250   {
251     throw new UnsupportedOperationException("not implemented yet");
252   }
253 
prepareImage(Image image, int width, int height, ImageObserver observer)254   public boolean prepareImage(Image image,
255 			      int width,
256 			      int height,
257 			      ImageObserver observer)
258   {
259     throw new UnsupportedOperationException("not implemented yet");
260   }
261 
checkImage(Image image, int width, int height, ImageObserver observer)262   public int checkImage(Image image,
263 			int width,
264 			int height,
265 			ImageObserver observer)
266   {
267     throw new UnsupportedOperationException("not implemented yet");
268   }
269 
createImage(ImageProducer producer)270   public Image createImage(ImageProducer producer)
271   {
272     throw new UnsupportedOperationException("not implemented yet");
273   }
274 
createImage(byte[] imagedata, int imageoffset, int imagelength)275   public Image createImage(byte[] imagedata,
276 			   int imageoffset,
277 			   int imagelength)
278   {
279     throw new UnsupportedOperationException("not implemented yet");
280   }
281 
282   /*
283     public PrintJob getPrintJob(Frame frame,
284 				String jobtitle,
285 				Properties props);
286   */
287 
beep()288   public void beep()
289   {
290     throw new UnsupportedOperationException("not implemented yet");
291   }
292 
getSystemClipboard()293   public Clipboard getSystemClipboard()
294   {
295     return null; // FIXME
296   }
297 
getSystemEventQueueImpl()298   protected EventQueue getSystemEventQueueImpl()
299   {
300     return queue;
301   }
302 
getPrintJob(Frame frame, String title, Properties props)303   public PrintJob getPrintJob (Frame frame, String title, Properties props)
304   {
305     return null;		// FIXME
306   }
307 
getDefaultXGraphicsConfiguration()308   XGraphicsConfiguration getDefaultXGraphicsConfiguration()
309   {
310     if (defaultConfig == null)
311       {
312 	Screen screen = display.getDefaultScreen();
313 	Visual visual = screen.getRootVisual();
314 	defaultConfig = new XGraphicsConfiguration(visual);
315 
316 	// ASSERT:
317 	if (!defaultConfig.getVisual().getScreen().equals(screen))
318 	  {
319 	    String msg = "screen of graphics configuration is not " +
320 	      "default screen";
321 	    throw new Error(msg);
322 	  }
323       }
324 
325     return defaultConfig;
326   }
327 
328   public DragSourceContextPeer
createDragSourceContextPeer(DragGestureEvent dge)329     createDragSourceContextPeer(DragGestureEvent dge)
330     throws InvalidDnDOperationException
331   {
332     throw new UnsupportedOperationException("not implemented");
333   }
334 
335   public DragGestureRecognizer
createDragGestureRecognizer(Class abstractRecognizerClass, DragSource ds, Component c, int srcActions, DragGestureListener dgl)336     createDragGestureRecognizer(Class abstractRecognizerClass,
337 				DragSource ds, Component c,
338 				int srcActions, DragGestureListener dgl)
339   {
340     throw new UnsupportedOperationException("not implemented");
341   }
342 
343 
mapInputMethodHighlight(InputMethodHighlight highlight)344   public Map mapInputMethodHighlight(InputMethodHighlight highlight)
345   {
346     throw new UnsupportedOperationException("not implemented");
347   }
348 }
349