/* Copyright (C) 2000 Free Software Foundation This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package gnu.awt.xlib; import java.awt.*; import java.awt.peer.*; import java.awt.image.ImageProducer; import java.awt.image.ImageObserver; import java.net.*; import java.awt.datatransfer.Clipboard; import gnu.gcj.xlib.Display; import gnu.gcj.xlib.Screen; import gnu.gcj.xlib.Visual; public class XToolkit extends Toolkit { static XToolkit INSTANCE; Display display; EventQueue queue; XEventLoop eventLoop; XGraphicsConfiguration defaultConfig; public XToolkit() { INSTANCE = this; display = new Display(); synchronized (display) { queue = new XEventQueue(display); eventLoop = new XEventLoop(display, queue); } } public void flushIfIdle() { eventLoop.flushIfIdle(); } protected ButtonPeer createButton(Button frontend) { // FIXME: Stubbed out, needs Swing: /* XCanvasPeer realPeer = new XCanvasPeer(frontend); SButtonPeer sbPeer = new SButtonPeer(frontend, realPeer); return sbPeer; */ return null; } protected TextFieldPeer createTextField(TextField frontend) { return null; // FIXME } protected LabelPeer createLabel(Label frontend) { return null; // FIXME } protected ListPeer createList(List frontend) { return null; // FIXME } protected CheckboxPeer createCheckbox(Checkbox frontend) { return null; // FIXME } protected ScrollbarPeer createScrollbar(Scrollbar frontend) { return null; // FIXME } protected ScrollPanePeer createScrollPane(ScrollPane frontend) { return null; // FIXME } protected TextAreaPeer createTextArea(TextArea frontend) { return null; // FIXME } protected ChoicePeer createChoice(Choice frontend) { return null; // FIXME } protected FramePeer createFrame(Frame frontend) { return new XFramePeer(frontend); } protected CanvasPeer createCanvas(Canvas frontend) { XCanvasPeer peer = new XCanvasPeer(frontend); return peer; } protected PanelPeer createPanel(Panel frontend) { return new XPanelPeer(frontend); } protected WindowPeer createWindow(Window frontend) { return null; // FIXME } protected DialogPeer createDialog(Dialog frontend) { return null; // FIXME } protected MenuBarPeer createMenuBar(MenuBar frontend) { return null; // FIXME } protected MenuPeer createMenu(Menu frontend) { return null; // FIXME } protected PopupMenuPeer createPopupMenu(PopupMenu frontend) { return null; // FIXME } protected MenuItemPeer createMenuItem(MenuItem frontend) { return null; // FIXME } protected FileDialogPeer createFileDialog(FileDialog frontend) { return null; // FIXME } protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem frontend) { return null; // FIXME } protected java.awt.peer.FontPeer getFontPeer(String name, int style) { return null; } public Dimension getScreenSize() { throw new UnsupportedOperationException("not implemented yet"); } public int getScreenResolution() { throw new UnsupportedOperationException("not implemented yet"); } public java.awt.image.ColorModel getColorModel() { throw new UnsupportedOperationException("not implemented yet"); } public String[] getFontList() { throw new UnsupportedOperationException("not implemented yet"); } public FontMetrics getFontMetrics(Font font) { return defaultConfig.getXFontMetrics(font); } public void sync() { throw new UnsupportedOperationException("not implemented yet"); } public Image getImage(String filename) { return createImage(filename); } public Image getImage(URL url) { throw new UnsupportedOperationException("not implemented yet"); } public Image createImage(String filename) { // FIXME: Stubbed out. We need a proper image I/O API. /* BufferedImage jpeg; FileInputStream fis = openFile(filename); if (fis == null) return null; BasicRasterImageConsumer consumer = new BasicRasterImageConsumer(); JPEGImageDecoder jid = new JPEGImageDecoder(fis); jid.startProduction(consumer); jpeg = consumer.getImage(); int w = jpeg.getWidth(); int h = jpeg.getHeight(); BufferedImage img = getDefaultXGraphicsConfiguration().createCompatibleImage(w, h); Renderers renderers = Renderers.getInstance(); RasterOp renderer = renderers.createRenderer(jpeg.getColorModel(), jpeg.getSampleModel(), img.getColorModel(), img.getSampleModel()); if (renderer == null) { throw new UnsupportedOperationException("couldn't find renderer"); } renderer.filter(jpeg.getRaster(), img.getRaster()); return img; */ return null; } public Image createImage(URL url) { throw new UnsupportedOperationException("not implemented yet"); } public boolean prepareImage(Image image, int width, int height, ImageObserver observer) { throw new UnsupportedOperationException("not implemented yet"); } public int checkImage(Image image, int width, int height, ImageObserver observer) { throw new UnsupportedOperationException("not implemented yet"); } public Image createImage(ImageProducer producer) { throw new UnsupportedOperationException("not implemented yet"); } public Image createImage(byte[] imagedata, int imageoffset, int imagelength) { throw new UnsupportedOperationException("not implemented yet"); } /* public PrintJob getPrintJob(Frame frame, String jobtitle, Properties props); */ public void beep() { throw new UnsupportedOperationException("not implemented yet"); } public Clipboard getSystemClipboard() { return null; // FIXME } protected EventQueue getSystemEventQueueImpl() { return queue; } XGraphicsConfiguration getDefaultXGraphicsConfiguration() { if (defaultConfig == null) { Screen screen = display.getDefaultScreen(); Visual visual = screen.getRootVisual(); defaultConfig = new XGraphicsConfiguration(visual); // ASSERT: if (!defaultConfig.getVisual().getScreen().equals(screen)) { String msg = "screen of graphics configuration is not " + "default screen"; throw new Error(msg); } } return defaultConfig; } /* public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException; public DragGestureRecognizer createDragGestureRecognizer(Class abstractRecognizerClass, DragSource ds, Component c, int srcActions, DragGestureListener dgl) { throw new UnsupportedOperationException("not implemented"); } */ /* public Map mapInputMethodHighlight(InputMethodHighlight highlight); */ }