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 + -
显示快捷键?