123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 |
- /* Copyright (C) 2000, 2002, 2003, 2005 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.dnd.*;
- import java.awt.dnd.peer.*;
- import java.awt.font.*;
- import java.awt.im.*;
- import java.awt.peer.*;
- import java.awt.image.ImageProducer;
- import java.awt.image.ImageObserver;
- import java.net.*;
- import java.awt.datatransfer.Clipboard;
- import java.io.InputStream;
- import java.text.AttributedString;
- import java.util.Map;
- import java.util.Properties;
- import gnu.gcj.xlib.Display;
- import gnu.gcj.xlib.Screen;
- import gnu.gcj.xlib.Visual;
- import gnu.java.awt.ClasspathToolkit;
- import gnu.java.awt.EmbeddedWindow;
- import gnu.java.awt.peer.ClasspathFontPeer;
- import gnu.java.awt.peer.EmbeddedWindowPeer;
- public class XToolkit extends ClasspathToolkit
- {
- 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 new XFontPeer (name,style);
- }
- public Dimension getScreenSize()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public int getScreenResolution()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
-
- public java.awt.image.ColorModel getColorModel()
- {
- return getDefaultXGraphicsConfiguration().getColorModel();
- }
- public String[] getFontList()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public FontMetrics getFontMetrics(Font font)
- {
- return getDefaultXGraphicsConfiguration().getXFontMetrics(font);
- }
- public void sync()
- {
- flushIfIdle ();
- // FIXME: should instead wait for eventLoop to go idle
- // (perhaps send a dummy event there and block till it makes
- // it through the queue)
- }
-
- 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;
- }
-
- public PrintJob getPrintJob (Frame frame, String title, Properties props)
- {
- return null; // FIXME
- }
- 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
- {
- throw new UnsupportedOperationException("not implemented");
- }
- public DragGestureRecognizer
- createDragGestureRecognizer(Class abstractRecognizerClass,
- DragSource ds, Component c,
- int srcActions, DragGestureListener dgl)
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- public Map mapInputMethodHighlight(InputMethodHighlight highlight)
- {
- throw new UnsupportedOperationException("not implemented");
- }
-
- /** Returns a shared instance of the local, platform-specific
- * graphics environment.
- *
- * <p>This method is specific to GNU Classpath. It gets called by
- * the Classpath implementation of {@link
- * GraphicsEnvironment.getLocalGraphcisEnvironment()}.
- */
- public GraphicsEnvironment getLocalGraphicsEnvironment ()
- {
- return new XGraphicsEnvironment (this);
- }
-
- /** Acquires an appropriate {@link ClasspathFontPeer}, for use in
- * classpath's implementation of {@link java.awt.Font}.
- *
- * @param name The logical name of the font. This may be either a face
- * name or a logical font name, or may even be null. A default
- * implementation of name decoding is provided in
- * {@link ClasspathFontPeer}, but may be overridden in other toolkits.
- *
- * @param attrs Any extra {@link java.awt.font.TextAttribute} attributes
- * this font peer should have, such as size, weight, family name, or
- * transformation.
- */
- public ClasspathFontPeer getClasspathFontPeer (String name, Map attrs)
- {
- int style = Font.PLAIN;
- float size = 12;
- if (attrs.containsKey (TextAttribute.WEIGHT))
- {
- Float weight = (Float) attrs.get (TextAttribute.WEIGHT);
- if (weight.floatValue () >= TextAttribute.WEIGHT_BOLD.floatValue ())
- style += Font.BOLD;
- }
- if (attrs.containsKey (TextAttribute.POSTURE))
- {
- Float posture = (Float) attrs.get (TextAttribute.POSTURE);
- if (posture.floatValue () >= TextAttribute.POSTURE_OBLIQUE.floatValue ())
- style += Font.ITALIC;
- }
- if (attrs.containsKey (TextAttribute.SIZE))
- {
- Float fsize = (Float) attrs.get (TextAttribute.SIZE);
- size = fsize.floatValue ();
- }
- return new XFontPeer (name,style,size);
- }
- /** Creates a font, reading the glyph definitions from a stream.
- *
- * <p>This method provides the platform-specific implementation for
- * the static factory method {@link Font#createFont(int,
- * java.io.InputStream)}.
- *
- * @param format the format of the font data, such as {@link
- * Font#TRUETYPE_FONT}. An implementation may ignore this argument
- * if it is able to automatically recognize the font format from the
- * provided data.
- *
- * @param stream an input stream from where the font data is read
- * in. The stream will be advanced to the position after the font
- * data, but not closed.
- *
- * @throws IllegalArgumentException if <code>format</code> is
- * not supported.
- *
- * @throws FontFormatException if <code>stream</code> does not
- * contain data in the expected format, or if required tables are
- * missing from a font.
- *
- * @throws IOException if a problem occurs while reading in the
- * contents of <code>stream</code>.
- */
- public Font createFont (int format, InputStream stream)
- {
- throw new java.lang.UnsupportedOperationException ();
- }
- public RobotPeer createRobot (GraphicsDevice screen) throws AWTException
- {
- throw new java.lang.UnsupportedOperationException ();
- }
- public EmbeddedWindowPeer createEmbeddedWindow (EmbeddedWindow w)
- {
- throw new java.lang.UnsupportedOperationException ();
- }
- public boolean nativeQueueEmpty()
- {
- // Tell EventQueue the native queue is empty, because XEventLoop
- // separately ensures that native events are posted to AWT.
- return true;
- }
- public void wakeNativeQueue()
- {
- // Not implemented, because the native queue is always awake.
- // (i.e. it's polled in a thread separate from the AWT dispatch thread)
- }
- /** Checks the native event queue for events. If blocking, waits until an
- * event is available before returning, unless interrupted by
- * wakeNativeQueue. If non-blocking, returns immediately even if no
- * event is available.
- *
- * @param locked The calling EventQueue
- * @param block If true, waits for a native event before returning
- */
- public void iterateNativeQueue(java.awt.EventQueue locked, boolean block)
- {
- // There is nothing to do here except block, because XEventLoop
- // iterates the queue in a dedicated thread.
- if (block)
- {
- try
- {
- queue.wait ();
- }
- catch (InterruptedException ie)
- {
- // InterruptedException intentionally ignored
- }
- }
- }
- public void setAlwaysOnTop(boolean b)
- {
- // TODO: Implement properly.
- }
- public boolean isModalExclusionTypeSupported
- (Dialog.ModalExclusionType modalExclusionType)
- {
- // TODO: Implement properly.
- return false;
- }
- public boolean isModalityTypeSupported(Dialog.ModalityType modalityType)
- {
- // TODO: Implement properly.
- return false;
- }
- }
|