1 /* Copyright (C) 2000, 2002, 2003 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
12 import java
.awt
.dnd
.*;
13 import java
.awt
.dnd
.peer
.*;
15 import java
.awt
.peer
.*;
16 import java
.awt
.image
.ImageProducer
;
17 import java
.awt
.image
.ImageObserver
;
19 import java
.awt
.datatransfer
.Clipboard
;
20 import java
.util
.Properties
;
23 import gnu
.gcj
.xlib
.Display
;
24 import gnu
.gcj
.xlib
.Screen
;
25 import gnu
.gcj
.xlib
.Visual
;
27 public class XToolkit
extends Toolkit
29 static XToolkit INSTANCE
;
36 XGraphicsConfiguration defaultConfig
;
41 display
= new Display();
42 synchronized (display
)
44 queue
= new XEventQueue(display
);
45 eventLoop
= new XEventLoop(display
, queue
);
49 public void flushIfIdle()
51 eventLoop
.flushIfIdle();
54 protected ButtonPeer
createButton(Button frontend
)
56 // FIXME: Stubbed out, needs Swing:
58 XCanvasPeer realPeer = new XCanvasPeer(frontend);
59 SButtonPeer sbPeer = new SButtonPeer(frontend, realPeer);
65 protected TextFieldPeer
createTextField(TextField frontend
)
70 protected LabelPeer
createLabel(Label frontend
)
75 protected ListPeer
createList(List frontend
)
80 protected CheckboxPeer
createCheckbox(Checkbox frontend
)
85 protected ScrollbarPeer
createScrollbar(Scrollbar frontend
)
90 protected ScrollPanePeer
createScrollPane(ScrollPane frontend
)
95 protected TextAreaPeer
createTextArea(TextArea frontend
)
100 protected ChoicePeer
createChoice(Choice frontend
)
102 return null; // FIXME
105 protected FramePeer
createFrame(Frame frontend
) {
106 return new XFramePeer(frontend
);
109 protected CanvasPeer
createCanvas(Canvas frontend
) {
110 XCanvasPeer peer
= new XCanvasPeer(frontend
);
114 protected PanelPeer
createPanel(Panel frontend
) {
115 return new XPanelPeer(frontend
);
118 protected WindowPeer
createWindow(Window frontend
)
120 return null; // FIXME
123 protected DialogPeer
createDialog(Dialog frontend
)
125 return null; // FIXME
128 protected MenuBarPeer
createMenuBar(MenuBar frontend
)
130 return null; // FIXME
133 protected MenuPeer
createMenu(Menu frontend
)
135 return null; // FIXME
138 protected PopupMenuPeer
createPopupMenu(PopupMenu frontend
)
140 return null; // FIXME
143 protected MenuItemPeer
createMenuItem(MenuItem frontend
)
145 return null; // FIXME
148 protected FileDialogPeer
createFileDialog(FileDialog frontend
)
150 return null; // FIXME
153 protected CheckboxMenuItemPeer
154 createCheckboxMenuItem(CheckboxMenuItem frontend
)
156 return null; // FIXME
159 protected java
.awt
.peer
.FontPeer
getFontPeer(String name
, int style
)
164 public Dimension
getScreenSize()
166 throw new UnsupportedOperationException("not implemented yet");
169 public int getScreenResolution()
171 throw new UnsupportedOperationException("not implemented yet");
174 public java
.awt
.image
.ColorModel
getColorModel()
176 return getDefaultXGraphicsConfiguration().getColorModel();
179 public String
[] getFontList()
181 throw new UnsupportedOperationException("not implemented yet");
184 public FontMetrics
getFontMetrics(Font font
)
186 return getDefaultXGraphicsConfiguration().getXFontMetrics(font
);
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)
197 public Image
getImage(String filename
)
199 return createImage(filename
);
202 public Image
getImage(URL url
)
204 throw new UnsupportedOperationException("not implemented yet");
207 public Image
createImage(String filename
)
209 // FIXME: Stubbed out. We need a proper image I/O API.
213 FileInputStream fis = openFile(filename);
217 BasicRasterImageConsumer consumer = new BasicRasterImageConsumer();
218 JPEGImageDecoder jid = new JPEGImageDecoder(fis);
220 jid.startProduction(consumer);
221 jpeg = consumer.getImage();
223 int w = jpeg.getWidth();
224 int h = jpeg.getHeight();
227 getDefaultXGraphicsConfiguration().createCompatibleImage(w, h);
229 Renderers renderers = Renderers.getInstance();
231 RasterOp renderer = renderers.createRenderer(jpeg.getColorModel(),
232 jpeg.getSampleModel(),
234 img.getSampleModel());
236 if (renderer == null)
238 throw new UnsupportedOperationException("couldn't find renderer");
241 renderer.filter(jpeg.getRaster(), img.getRaster());
249 public Image
createImage(URL url
)
251 throw new UnsupportedOperationException("not implemented yet");
254 public boolean prepareImage(Image image
,
257 ImageObserver observer
)
259 throw new UnsupportedOperationException("not implemented yet");
262 public int checkImage(Image image
,
265 ImageObserver observer
)
267 throw new UnsupportedOperationException("not implemented yet");
270 public Image
createImage(ImageProducer producer
)
272 throw new UnsupportedOperationException("not implemented yet");
275 public Image
createImage(byte[] imagedata
,
279 throw new UnsupportedOperationException("not implemented yet");
283 public PrintJob getPrintJob(Frame frame,
290 throw new UnsupportedOperationException("not implemented yet");
293 public Clipboard
getSystemClipboard()
295 return null; // FIXME
298 protected EventQueue
getSystemEventQueueImpl()
303 public PrintJob
getPrintJob (Frame frame
, String title
, Properties props
)
305 return null; // FIXME
308 XGraphicsConfiguration
getDefaultXGraphicsConfiguration()
310 if (defaultConfig
== null)
312 Screen screen
= display
.getDefaultScreen();
313 Visual visual
= screen
.getRootVisual();
314 defaultConfig
= new XGraphicsConfiguration(visual
);
317 if (!defaultConfig
.getVisual().getScreen().equals(screen
))
319 String msg
= "screen of graphics configuration is not " +
321 throw new Error(msg
);
325 return defaultConfig
;
328 public DragSourceContextPeer
329 createDragSourceContextPeer(DragGestureEvent dge
)
330 throws InvalidDnDOperationException
332 throw new UnsupportedOperationException("not implemented");
335 public DragGestureRecognizer
336 createDragGestureRecognizer(Class abstractRecognizerClass
,
337 DragSource ds
, Component c
,
338 int srcActions
, DragGestureListener dgl
)
340 throw new UnsupportedOperationException("not implemented");
344 public Map
mapInputMethodHighlight(InputMethodHighlight highlight
)
346 throw new UnsupportedOperationException("not implemented");