jnodetoolkit.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 598 行

JAVA
598
字号
/*
 * $Id: JNodeToolkit.java,v 1.2 2003/12/24 17:17:55 vchira_2000 Exp $
 */
package org.jnode.awt.peer;

import java.awt.AWTError;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Checkbox;
import java.awt.CheckboxMenuItem;
import java.awt.Choice;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Label;
import java.awt.List;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.PrintJob;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.datatransfer.Clipboard;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.peer.ButtonPeer;
import java.awt.peer.CanvasPeer;
import java.awt.peer.CheckboxMenuItemPeer;
import java.awt.peer.CheckboxPeer;
import java.awt.peer.ChoicePeer;
import java.awt.peer.DialogPeer;
import java.awt.peer.FileDialogPeer;
import java.awt.peer.FontPeer;
import java.awt.peer.FramePeer;
import java.awt.peer.LabelPeer;
import java.awt.peer.LightweightPeer;
import java.awt.peer.ListPeer;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuPeer;
import java.awt.peer.PanelPeer;
import java.awt.peer.PopupMenuPeer;
import java.awt.peer.ScrollPanePeer;
import java.awt.peer.ScrollbarPeer;
import java.awt.peer.TextAreaPeer;
import java.awt.peer.TextFieldPeer;
import java.awt.peer.WindowPeer;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import java.util.Properties;

import javax.naming.NamingException;

import org.apache.log4j.Logger;
import org.jnode.awt.JNodeFrameBufferDevice;
import org.jnode.awt.JNodeGraphicsConfiguration;
import org.jnode.awt.font.FontManager;
import org.jnode.awt.image.GIFDecoder;
import org.jnode.awt.image.JNodeImage;
import org.jnode.driver.DeviceException;
import org.jnode.driver.video.AlreadyOpenException;
import org.jnode.driver.video.FrameBufferAPI;
import org.jnode.driver.video.Surface;
import org.jnode.driver.video.UnknownConfigurationException;
import org.jnode.naming.InitialNaming;

/**
 * @author epr
 */
public class JNodeToolkit extends Toolkit {

	/** My logger */
	private final Logger log = Logger.getLogger(getClass());
	private int refCount = 0;
	private FrameBufferAPI api;
	private Surface graphics;
	private MouseHandler mouseHandler;
	private final EventQueue eventQueue = new EventQueue();
	private final Dimension screenSize = new Dimension(640, 480);
	private JNodeGraphicsConfiguration config;
	private final FocusHandler focusHandler;

	public JNodeToolkit() {
		refCount = 0;
		this.focusHandler = new FocusHandler(this);
		JNodeGenericPeer.enableQueue(eventQueue);
	}

	/**
	 * @see java.awt.Toolkit#beep()
	 */
	public void beep() {
		// TODO Auto-generated method stub

	}

	/**
	 * @param image
	 * @param width
	 * @param height
	 * @param observer
	 * @return int
	 */
	public int checkImage(Image image, int width, int height, ImageObserver observer) {
		// TODO Auto-generated method stub
		return 0;
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected ButtonPeer createButton(Button target) {
		return new JNodeButtonPeer(this, target);
	}

	/**
	 * @param target
	 * @return the peer
	 */
	protected CanvasPeer createCanvas(Canvas target) {
		return new JNodeCanvasPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected CheckboxPeer createCheckbox(Checkbox target) {
		return new JNodeCheckboxPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected ChoicePeer createChoice(Choice target) {
		return new JNodeChoicePeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected DialogPeer createDialog(Dialog target) {
		return new JNodeDialogPeer(this, target);
	}

	/**
	 * @param e
	 * @see java.awt.Toolkit#createDragSourceContextPeer(java.awt.dnd.DragGestureEvent)
	 * @return The peer
	 */
	public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected FileDialogPeer createFileDialog(FileDialog target) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected FramePeer createFrame(Frame target) {
		return new JNodeFramePeer(this, target);
	}

	/**
	 * @param data
	 * @param offset
	 * @param len
	 * @see java.awt.Toolkit#createImage(byte[], int, int)
	 * @return The image
	 */
	public Image createImage(byte[] data, int offset, int len) {
		if (len >= 4 && data[offset + 0] == 'G' && data[offset + 1] == 'I' && data[offset + 2] == 'F' && data[offset + 3] == '8') {
			try {
				return createImage(new GIFDecoder(new ByteArrayInputStream(data, offset, len)));
			} catch (LinkageError err) {
			} // let it fall through to default code
		}

		return null;
	}

	/**
	 * @param producer
	 * @see java.awt.Toolkit#createImage(java.awt.image.ImageProducer)
	 * @return The image
	 */
	public Image createImage(ImageProducer producer) {
		return new JNodeImage(producer);
	}

	/**
	 * @param filename
	 * @see java.awt.Toolkit#createImage(java.lang.String)
	 * @return The image
	 */
	public Image createImage(String filename) {
		return getImage(filename);
	}

	/**
	 * @param url
	 * @see java.awt.Toolkit#createImage(java.net.URL)
	 * @return The image
	 */
	public Image createImage(URL url) {
		return getImage(url);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected LabelPeer createLabel(Label target) {
		return new JNodeLabelPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected ListPeer createList(List target) {
		return new JNodeListPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected MenuPeer createMenu(Menu target) {
		return new JNodeMenuPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected MenuBarPeer createMenuBar(MenuBar target) {
		return new JNodeMenuBarPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected MenuItemPeer createMenuItem(MenuItem target) {
		return new JNodeMenuItemPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected PanelPeer createPanel(Panel target) {
		return new JNodePanelPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected PopupMenuPeer createPopupMenu(PopupMenu target) {
		return new JNodePopupMenuPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected ScrollbarPeer createScrollbar(Scrollbar target) {
		return new JNodeScrollbarPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected ScrollPanePeer createScrollPane(ScrollPane target) {
		return new JNodeScrollPanePeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected TextAreaPeer createTextArea(TextArea target) {
		return new JNodeTextAreaPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected TextFieldPeer createTextField(TextField target) {
		return new JNodeTextFieldPeer(this, target);
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected WindowPeer createWindow(Window target) {
		return new JNodeWindowPeer(this, target);
	}

	/**
	 * @see java.awt.Toolkit#getColorModel()
	 * @return The model
	 */
	public ColorModel getColorModel() {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @see java.awt.Toolkit#getFontList()
	 * @return The fonts
	 */
	public String[] getFontList() {
		Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
		String[] names = new String[fonts.length];
		for(int i = 0; i < fonts.length;i++)
		{
			names[i] = fonts[i].getName();
		}
		return names;
	}

	/**
	 * @param font
	 * @see java.awt.Toolkit#getFontMetrics(java.awt.Font)
	 * @return The metrics
	 */
	public FontMetrics getFontMetrics(Font font) {
		final FontManager fm = getFontManager();
		if (fm != null) {
			return fm.getFontMetrics(font);
		} else {
			return null;
		}
	}

	/**
	 * @param name
	 * @param style
	 * @return The peer
	 */
	protected FontPeer getFontPeer(String name, int style) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param filename
	 * @see java.awt.Toolkit#getImage(java.lang.String)
	 * @return The image
	 */
	public Image getImage(String filename) {
		try {
			Image image = getImage(new URL("file:" + new File(System.getProperty("user.dir"), filename)));
			return image != null ? image : getImage(new URL("file:" + new File(filename).getAbsolutePath()));
		} catch (MalformedURLException e) {
			// Ignore
		}
		return null;
	}

	/**
	 * @param url
	 * @see java.awt.Toolkit#getImage(java.net.URL)
	 * @return The image
	 */
	public Image getImage(URL url) {
		try {
			final URLConnection conn = url.openConnection();
			final String type = conn.getContentType();
			if ("image/gif".equals(type) || url.getFile().toLowerCase().endsWith(".gif")) {
				try {
					return createImage(new GIFDecoder(conn.getInputStream(), true));
				} catch (LinkageError e) {
					// If GIFDecoder not available try default loader
					return createImage((ImageProducer) (conn.getContent()));
				}
			} else
				return createImage((ImageProducer) (conn.getContent()));
		} catch (IOException ex) {
			log.debug("IOException during getImage", ex);
		}
		return null;
	}

	/**
	 * @param frame
	 * @param title
	 * @param props
	 * @see java.awt.Toolkit#getPrintJob(java.awt.Frame, java.lang.String, java.util.Properties)
	 * @return The print job
	 */
	public PrintJob getPrintJob(Frame frame, String title, Properties props) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @see java.awt.Toolkit#getScreenResolution()
	 * @return int
	 */
	public int getScreenResolution() {
		// TODO Auto-generated method stub
		return 0;
	}

	/**
	 * @see java.awt.Toolkit#getScreenSize()
	 * @return The screen size
	 */
	public Dimension getScreenSize() {
		return new Dimension(screenSize);
	}

	/**
	 * @see java.awt.Toolkit#getSystemClipboard()
	 * @return The clipboard
	 */
	public Clipboard getSystemClipboard() {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @return The event queue
	 */
	protected EventQueue getSystemEventQueueImpl() {
		return eventQueue;
	}

	/**
	 * @param highlight
	 * @see java.awt.Toolkit#mapInputMethodHighlight(java.awt.im.InputMethodHighlight)
	 * @return Map
	 */
	public Map mapInputMethodHighlight(InputMethodHighlight highlight) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param image
	 * @param width
	 * @param height
	 * @param observer
	 * @see java.awt.Toolkit#prepareImage(java.awt.Image, int, int, java.awt.image.ImageObserver)
	 * @return boolean
	 */
	public boolean prepareImage(Image image, int width, int height, ImageObserver observer) {
		// TODO Auto-generated method stub
		return false;
	}

	/**
	 * @see java.awt.Toolkit#sync()
	 */
	public void sync() {
		// TODO Auto-generated method stub

	}

	/**
	 * @see java.awt.peer.ComponentPeer#getGraphicsConfiguration()
	 * @return The configuration
	 */
	protected GraphicsConfiguration getGraphicsConfiguration() {
		return config;
	}

	/**
	 * Increment the peer reference count
	 */
	final synchronized void incRefCount() {
		refCount++;
		if (refCount == 1) {
			final JNodeFrameBufferDevice dev = (JNodeFrameBufferDevice) GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
			config = (JNodeGraphicsConfiguration) dev.getDefaultConfiguration();
			this.api = dev.getAPI();
			try {
				log.debug("Opening AWT: Using device " + dev.getIDstring());
				this.graphics = api.open(config.getConfig());
				screenSize.width = config.getConfig().getScreenWidth();
				screenSize.height = config.getConfig().getScreenHeight();
				this.mouseHandler = new MouseHandler(dev.getDevice(), screenSize);
			} catch (DeviceException ex) {
				throw (AWTError) new AWTError(ex.getMessage()).initCause(ex);
			} catch (UnknownConfigurationException ex) {
				throw (AWTError) new AWTError(ex.getMessage()).initCause(ex);
			} catch (AlreadyOpenException ex) {
				throw (AWTError) new AWTError(ex.getMessage()).initCause(ex);
			}
		}
	}

	/**
	 * Decrement the peer reference count
	 */
	final synchronized void decRefCount() {
		refCount--;
		if (refCount == 0) {
			if (mouseHandler != null) {
				this.mouseHandler.close();
			}
			if (graphics != null) {
				this.graphics.close();
			}
			this.api = null;
			this.graphics = null;
			this.mouseHandler = null;
		}
	}

	/**
	 * @return
	 */
	final Surface getGraphics() {
		return this.graphics;
	}

	/**
	 * @param target
	 * @return The peer
	 */
	protected LightweightPeer createComponent(Component target) {
		return new JNodeLWComponentPeer(this, target);
	}

	/**
	 * Gets the font manager, or null if not found.
	 * 
	 * @return
	 */
	public FontManager getFontManager() {
		try {
			return (FontManager) InitialNaming.lookup(FontManager.NAME);
		} catch (NamingException ex) {
			return null;
		}
	}

	/**
	 * Gets the focus handler
	 * @return The focus handler
	 */
	public final FocusHandler getFocusHandler() {
		return this.focusHandler;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?