/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.awt.swingpeers; import gnu.classpath.SystemProperties; import java.awt.AWTEvent; import java.awt.AWTException; import java.awt.BufferCapabilities; import java.awt.BufferCapabilities.FlipContents; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Dialog; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.Insets; import java.awt.MenuBar; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.awt.event.PaintEvent; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; import java.awt.image.VolatileImage; import java.awt.peer.ContainerPeer; import java.awt.peer.FramePeer; import org.apache.log4j.Logger; import org.jnode.awt.JNodeGenericPeer; import org.jnode.awt.JNodeGraphics2D; import org.jnode.awt.GraphicsFactory; import sun.awt.CausedFocusEvent; import sun.java2d.pipe.Region; /** * @author Ewout Prangsma (epr@users.sourceforge.net) */ final class DesktopFramePeer extends JNodeGenericPeer<SwingToolkit, DesktopFrame> implements FramePeer { private final SwingToolkit toolkit; private static final Logger log = Logger.getLogger(DesktopFramePeer.class); private static final Point TOP_LEFT = new Point(0, 0); private Insets insets; private final Frame awtFrame; /** * Initialize * * @param toolkit * @param frame */ public DesktopFramePeer(SwingToolkit toolkit, DesktopFrame frame) { super(toolkit, frame); this.toolkit = toolkit; this.awtFrame = frame; } /** * @see java.awt.peer.FramePeer#getState() */ public int getState() { // TODO Auto-generated method stub return 0; } /** * @see java.awt.peer.FramePeer#setIconImage(java.awt.Image) */ public void setIconImage(Image image) { // TODO Auto-generated method stub } /** * @see java.awt.peer.FramePeer#setMaximizedBounds(java.awt.Rectangle) */ public void setMaximizedBounds(Rectangle r) { // Ignore } /** * @see java.awt.peer.FramePeer#setMenuBar(java.awt.MenuBar) */ public void setMenuBar(MenuBar mb) { } /** * @see java.awt.peer.FramePeer#setResizable(boolean) */ public void setResizable(boolean resizable) { // TODO Auto-generated method stub } /** * @see java.awt.peer.FramePeer#setState(int) */ public void setState(int state) { // TODO Auto-generated method stub } /** * @see java.awt.peer.FramePeer#setTitle(java.lang.String) */ public void setTitle(String title) { // TODO Auto-generated method stub } /** * @see java.awt.peer.WindowPeer#toBack() */ public void toBack() { // TODO Auto-generated method stub } /** * @see java.awt.peer.WindowPeer#toFront() */ public void toFront() { // TODO Auto-generated method stub } /** * @see java.awt.peer.ContainerPeer#beginLayout() */ public void beginLayout() { // TODO Auto-generated method stub } /** * @see java.awt.peer.ContainerPeer#beginValidate() */ public void beginValidate() { // TODO Auto-generated method stub } /** * @see java.awt.peer.ContainerPeer#endLayout() */ public void endLayout() { // TODO Auto-generated method stub } /** * @see java.awt.peer.ContainerPeer#endValidate() */ public void endValidate() { // TODO Auto-generated method stub } /** * @see java.awt.peer.ContainerPeer#getInsets() */ public Insets getInsets() { if (insets == null) { insets = new Insets(0, 0, 0, 0); } return insets; } /** * @see java.awt.peer.ContainerPeer#insets() */ public Insets insets() { return getInsets(); } /** * @see java.awt.peer.ContainerPeer#isPaintPending() */ public boolean isPaintPending() { // TODO Auto-generated method stub return false; } /** * @see java.awt.peer.ComponentPeer#canDetermineObscurity() */ public boolean canDetermineObscurity() { // TODO Auto-generated method stub return false; } /** * @see java.awt.peer.ComponentPeer#checkImage(java.awt.Image, int, int, * java.awt.image.ImageObserver) */ public int checkImage(Image img, int width, int height, ImageObserver ob) { return toolkit.checkImage(img, width, height, ob); } /** * @see java.awt.peer.ComponentPeer#coalescePaintEvent(java.awt.event.PaintEvent) */ public void coalescePaintEvent(PaintEvent e) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#createBuffers(int, * java.awt.BufferCapabilities) */ public void createBuffers(int x, BufferCapabilities capabilities) throws AWTException { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#createImage(java.awt.image.ImageProducer) */ public Image createImage(ImageProducer producer) { return toolkit.createImage(producer); } /** * @see java.awt.peer.ComponentPeer#createImage(int, int) */ public Image createImage(int width, int height) { return toolkit.createCompatibleImage(width, height); } /** * @see java.awt.peer.ComponentPeer#createVolatileImage(int, int) */ public VolatileImage createVolatileImage(int width, int height) { return toolkit.createVolatileImage(width, height); } /** * @see java.awt.peer.ComponentPeer#destroyBuffers() */ public void destroyBuffers() { } /** * @see java.awt.peer.ComponentPeer#disable() */ public void disable() { setEnabled(false); } /** * @see java.awt.peer.ComponentPeer#enable() */ public void enable() { setEnabled(true); } /** * @see java.awt.peer.ComponentPeer#flip(java.awt.BufferCapabilities.FlipContents) */ public void flip(FlipContents contents) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#getBackBuffer() */ public Image getBackBuffer() { // TODO Auto-generated method stub return null; } /** * @see java.awt.peer.ComponentPeer#getColorModel() */ public ColorModel getColorModel() { return toolkit.getColorModel(); } /** * @see java.awt.peer.ComponentPeer#getFontMetrics(java.awt.Font) */ public FontMetrics getFontMetrics(Font f) { return toolkit.getFontMetrics(f); } /** * @see java.awt.peer.ComponentPeer#getGraphics() */ public Graphics getGraphics() { return SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") == null ? new JNodeGraphics2D(this) : GraphicsFactory.getInstance().createGraphics(this); } /** * @see java.awt.peer.ComponentPeer#getGraphicsConfiguration() */ public GraphicsConfiguration getGraphicsConfiguration() { return toolkit.getGraphicsConfiguration(); } /** * @see java.awt.peer.ComponentPeer#getLocationOnScreen() */ public Point getLocationOnScreen() { return new Point(TOP_LEFT); } /** * @see java.awt.peer.ComponentPeer#getMinimumSize() */ public Dimension getMinimumSize() { return toolkit.getScreenSize(); } /** * @see java.awt.peer.ComponentPeer#getPreferredSize() */ public Dimension getPreferredSize() { return toolkit.getScreenSize(); } /** * Response on paint events. */ @SuppressWarnings("unused") private void processPaintEvent(PaintEvent event) { final Graphics g = getGraphics(); if (g != null) { if (event.getID() == PaintEvent.PAINT) { targetComponent.paint(g); } else { targetComponent.update(g); } g.dispose(); } } /** * @see java.awt.peer.ComponentPeer#handleEvent(java.awt.AWTEvent) */ public void handleEvent(AWTEvent event) { final int id = event.getID(); switch (id) { case PaintEvent.PAINT: case PaintEvent.UPDATE: { //processPaintEvent((PaintEvent)event); break; } case KeyEvent.KEY_PRESSED: case KeyEvent.KEY_RELEASED: case KeyEvent.KEY_TYPED: { targetComponent.processKeyEvent((KeyEvent) event); break; } } } /** * @see java.awt.peer.ComponentPeer#handlesWheelScrolling() */ public boolean handlesWheelScrolling() { // TODO Auto-generated method stub return false; } /** * @see java.awt.peer.ComponentPeer#hide() */ public final void hide() { setVisible(false); } /** * @see java.awt.peer.ComponentPeer#isFocusable() */ public boolean isFocusable() { return awtFrame.isFocusable(); } /** * @see java.awt.peer.ComponentPeer#isObscured() */ public boolean isObscured() { // TODO Auto-generated method stub return false; } /** * @see java.awt.peer.ComponentPeer#minimumSize() */ public Dimension minimumSize() { return getMinimumSize(); } /** * @see java.awt.peer.ComponentPeer#paint(java.awt.Graphics) */ public void paint(Graphics graphics) { log.debug("Paint"); // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#preferredSize() */ public Dimension preferredSize() { return getPreferredSize(); } /** * @see java.awt.peer.ComponentPeer#prepareImage(java.awt.Image, int, int, * java.awt.image.ImageObserver) */ public boolean prepareImage(Image img, int width, int height, ImageObserver ob) { return toolkit.prepareImage(img, width, height, ob); } /** * @see java.awt.peer.ComponentPeer#print(java.awt.Graphics) */ public void print(Graphics graphics) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#repaint(long, int, int, int, int) */ public void repaint(long tm, int x, int y, int width, int height) { //log.info("repaint (" + tm + ", " + x + ", " + y + ", " + width + ", " // + height); if (x == 0 && y == 0 && width == 0 && height == 0) { return; } toolkit.postEvent( new PaintEvent(awtFrame, PaintEvent.UPDATE, new Rectangle(x, y, width, height))); } /** * @see java.awt.peer.ComponentPeer#requestFocus() */ public void requestFocus() { awtFrame.requestFocus(); } /** * @see java.awt.peer.ComponentPeer#requestFocus(java.awt.Component, * boolean, boolean, long) */ public boolean requestFocus(Component source, boolean bool1, boolean bool2, long x) { return awtFrame.requestFocusInWindow(); } /** * @see java.awt.peer.ComponentPeer#reshape(int, int, int, int) */ public void reshape(int x, int y, int width, int height) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setBackground(java.awt.Color) */ public void setBackground(Color color) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setBounds(int, int, int, int) */ public void setBounds(int x, int y, int width, int height) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setCursor(java.awt.Cursor) */ public void setCursor(Cursor cursor) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setEnabled(boolean) */ public void setEnabled(boolean enabled) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setEventMask(long) */ public void setEventMask(long mask) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setFont(java.awt.Font) */ public void setFont(Font font) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setForeground(java.awt.Color) */ public void setForeground(Color color) { // TODO Auto-generated method stub } /** * @see java.awt.peer.ComponentPeer#setVisible(boolean) */ public void setVisible(boolean visible) { if (visible) { paintAWTComponent(); } } /** * @see java.awt.peer.ComponentPeer#show() */ public final void show() { setVisible(true); } /** * @see java.awt.peer.ComponentPeer#updateCursorImmediately() */ public void updateCursorImmediately() { // TODO Auto-generated method stub } public boolean isRestackSupported() { return false; //TODO implement it } public void setBoundsPrivate(int x, int y, int width, int height) { //TODO implement it } public void updateAlwaysOnTop() { //TODO implement it } public boolean requestWindowFocus() { return false; //TODO implement it } public void cancelPendingPaint(int x, int y, int width, int height) { //TODO implement it } public void restack() { //TODO implement it } public Rectangle getBounds() { return null; //TODO implement it } public void reparent(ContainerPeer parent) { //TODO implement it } public void setBounds(int x, int y, int width, int height, int z) { //TODO implement it } public boolean isReparentSupported() { return false; //TODO implement it } public void layout() { //TODO implement it } public void setAlwaysOnTop(boolean alwaysOnTop) { //TODO implement it } public void updateFocusableWindowState() { //TODO implement it } public void setModalBlocked(Dialog blocker, boolean blocked) { //TODO implement it } public void updateMinimumSize() { //TODO implement it } public void updateIconImages() { //TODO implement it } public boolean requestFocus(Component lightweightChild, boolean temporary, boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) { //TODO implement it return false; } //jnode openjdk public Rectangle getBoundsPrivate() { //TODO implement it return null; } protected final void paintAWTComponent() { if (targetComponent != null) { toolkit.postEvent(new PaintEvent(targetComponent, PaintEvent.PAINT, targetComponent .getBounds())); } } public void applyShape(Region shape) { //TODO implement it } }