Revision: 4873 http://sourceforge.net/p/vexi/code/4873 Author: mkpg2 Date: 2016-07-15 01:16:46 +0000 (Fri, 15 Jul 2016) Log Message: ----------- Remove obselete/never used platform implementations. - Only supporting Java 7 in anycase (or at very least java 1.4). Added build version generation (previously always reporting unknown).
Modified Paths: -------------- branches/vexi3/org.vexi-core.main/meta/module-build.xml branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Platform.java branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java Removed Paths: ------------- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java Modified: branches/vexi3/org.vexi-core.main/meta/module-build.xml =================================================================== --- branches/vexi3/org.vexi-core.main/meta/module-build.xml 2016-06-28 16:46:33 UTC (rev 4872) +++ branches/vexi3/org.vexi-core.main/meta/module-build.xml 2016-07-15 01:16:46 UTC (rev 4873) @@ -4,6 +4,7 @@ <builders> <builder source="local" name="build.jpp" branch="trunk" /> <builder source="local" name="build.jencode" branch="trunk" /> + <builder source="ebuild" name="build.java.versionclass" /> <builder refid="javac"> <property key="source.javaversion" value="1.6"/> </builder> Deleted: branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java =================================================================== --- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java 2016-06-28 16:46:33 UTC (rev 4872) +++ branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java 2016-07-15 01:16:46 UTC (rev 4873) @@ -1,572 +0,0 @@ -// Copyright 2000-2008 the Contributors, as shown in the revision logs. -// Licensed under the GNU General Public License version 2 ("the License"). -// You may not use this file except in compliance with the License. - -package org.vexi.plat; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Frame; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.Window; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.awt.im.InputMethodRequests; - -import javax.swing.ImageIcon; - -import org.ibex.util.Callable; -import org.vexi.core.Box; -import org.vexi.core.Main; -import org.vexi.core.Surface; -import org.vexi.graphics.Picture; -import org.vexi.graphics.PixelBuffer; -import org.vexi.util.Log; - -/** Platform subclass for all VM's providing AWT 1.4 functionality */ -public class AWT extends AWTBase { - - protected String getDescriptiveName() { - return "Generic JDK 1.2+ with AWT"; - } - - //////// Platform Implementation ////////////////////////////////// - - protected Surface _createSurface(Box b, boolean framed) { return new AWTSurface(b, framed); } - - protected static class AWTSurface extends Surface.DoubleBufferedSurface - implements MouseListener, MouseMotionListener, MouseWheelListener, KeyListener, ComponentListener, WindowListener { - - public Picture toPicture() { return new AWTPicture(((AWTPixelBuffer)backbuffer).i); } - - /** synchronized as otherwise it is possible to blit before images have been rendered to the backbuffer */ - public synchronized void blit(PixelBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2) { - discoverInsets(); - try { - window.getGraphics().drawImage(((AWTPixelBuffer)s).i, - dx + leftInset, dy + topInset, // destination topleft corner - dx2 + leftInset, dy2 + topInset, // destination bottomright corner - sx, sy, // source topleft corner - sx + (dx2 - dx), sy + (dy2 - dy), // source bottomright corner - null); - } catch (NullPointerException npe) { /* FIXME: handle this gracefully */ } - } - - /** if (component instanceof Frame) then frame == window else frame == null */ - Frame frame = null; - Window window = null; - - /** our component's insets */ - //protected Insets insets = new Insets(0, 0, 0, 0); - - /** some JDKs let us recycle a single Dimension object when calling getSize() */ - Dimension singleSize = new Dimension(); - - public void _toBack() { if (window != null) window.toBack(); } - public void _toFront() { - // window.toFront() does not work well - //if (window != null) window.toFront(); - if (window != null) { window.setVisible(false); window.setVisible(true); } - } - public void _requestFocus() { if (window != null) window.requestFocus(); } - public void _setLocation(int x, int y) { if (window != null) window.setLocation(x, y); } - public void _setTitleBarText(String s) { if (frame != null) frame.setTitle(s); } - public void setInvisible(boolean b) { window.setVisible(!b); } - public void _setIcon(final Picture i) { - if (frame == null) { - return; - } - if (i==null) { - frame.setIconImage(new ImageIcon(Surface.vexiIcon).getImage()); - } else { - if (i.isLoaded) { - // must init() otherwise ((AWTPicture)i).i is null - ((AWTPicture)i).init(); - frame.setIconImage(((AWTPicture)i).i); - } else { - Main.SCHEDULER.add(new Callable() { - public Object run(Object o) throws Exception { - if (i.isLoaded) { - // must init() otherwise ((AWTPicture)i).i is null - ((AWTPicture)i).init(); - frame.setIconImage(((AWTPicture)i).i); - } else { - Main.SCHEDULER.add(this); - } - return null; - } - }); - } - } - } - public void _setSize(int width, int height) { - discoverInsets(); - window.setSize(width + (leftInset + rightInset), height + (topInset + bottomInset)); - } - public void _setMinimized(boolean b) { - Log.warn(this, "JDK 1.1 platforms cannot minimize or unminimize windows"); - } - public void _setMaximized(boolean b) { - if (!b) { - Log.warn(this, "JDK 1.1 platforms cannot unmaximize windows"); - return; - } - window.setLocation(new Point(0, 0)); - window.setSize(Toolkit.getDefaultToolkit().getScreenSize()); - } - - class InnerFrame extends Frame { - public InnerFrame() throws java.lang.UnsupportedOperationException { } - /** overrides the native Frame method to enforce a minimum size */ - private Dimension minimumSize = new Dimension(0, 0); - public void setMinimumDimensions(int w, int h) { minimumSize = new Dimension(w, h); } - public Dimension getMinimumSize() { return minimumSize; } - - public java.awt.event.ComponentAdapter enforceMinSize = new java.awt.event.ComponentAdapter() { - public void componentResized(ComponentEvent event) { - Dimension newDim = frame.getSize(); - if (newDim.height < minimumSize.height + topInset + bottomInset) { - newDim.height = minimumSize.height + topInset + bottomInset; - } - if (newDim.width < minimumSize.width + leftInset + rightInset) { - newDim.width = minimumSize.width + leftInset + rightInset; - } - frame.setSize(newDim); - blit(backbuffer, leftInset, topInset, leftInset, topInset, root.width + leftInset, root.height + topInset); -// frame.repaint(); - } - }; - - public void update(Graphics gr) { paint(gr); } - public void paint(Graphics gr) { - Rectangle r = gr.getClipBounds(); - - // ugly hack for Java1.4 dynamicLayout on Win32 -- this catches expansions during smooth resize - int newwidth = Math.max(r.x - leftInset + r.width, root.width); - int newheight = Math.max(r.y - topInset + r.height, root.height); - if (newwidth > root.width || newheight > root.height) { - int w = window.getWidth() - leftInset - rightInset; - int h = window.getHeight() - topInset - bottomInset; - AWTSurface.this.componentResized(w, h); - } - - refreshFromBackbuffer(r.x - leftInset, r.y - topInset, r.width, r.height); - } - public InputMethodRequests getInputMethodRequests() { - // REMARK - makes us a passive client FOOTNOTE1 - return null; - } - } - - class InnerWindow extends Window { - public InnerWindow() throws java.lang.UnsupportedOperationException { - super(new Frame()); - } - /** overrides the native Window method to enforce a minimum size */ - private Dimension minimumSize = new Dimension(0, 0); - public void setMinimumDimensions(int w, int h) { minimumSize = new Dimension(w, h); } - public Dimension getMinimumSize() { return minimumSize; } - public void update(Graphics gr) { paint(gr); } - public void paint(Graphics gr) { - Rectangle r = gr.getClipBounds(); - refreshFromBackbuffer(r.x - leftInset, r.y - topInset, r.width, r.height); - } - public InputMethodRequests getInputMethodRequests() { - // REMARK - makes us a passive client FOOTNOTE1 - return null; - } - } - - /** establish the size of the frame decorations */ - private void discoverInsets() { - Insets i = window.getInsets(); - if (leftInset == i.left && topInset == i.top && bottomInset == i.bottom && rightInset == i.right) { - return; - } - leftInset = i.left; - topInset = i.top; - bottomInset = i.bottom; - rightInset = i.right; - // respect the size of the root box - window.setSize(pendingWidth + (leftInset + rightInset), pendingHeight + (topInset + bottomInset)); - } - - /** sets the maximum size of the frame */ - public void _setMaximumSize(int maxw, int maxh) { - - } - - /** note that the minimum size is handled by getMinimumSize in InnerFrame/InnerWindow */ - public void _setMinimumSize(int minw, int minh) { - if (frame != null) { - ((InnerFrame)frame).setMinimumDimensions(minw, minh); - } else if (window != null) { - ((InnerWindow)window).setMinimumDimensions(minw, minh); - } - // FEATURE: Java 1.5 - //window.setMinimumSize(new Dimension(root.minwidth+leftInset+rightInset, root.minheight+topInset+bottomInset)); - } - - /** set whether a frame can be resized by the user */ - public void _setResizable(boolean resizable) { - if (frame != null) { - frame.setResizable(resizable); - if (!resizable) { - Dimension min = frame.getMinimumSize(); - frame.setSize(min.width, min.height); - } - } - } - - private int rootfill = 0x0; - private Color rootcolor = null; - private final void setBackgroundColor() { - rootfill = root.getIntFillcolor(); - rootcolor = org.vexi.graphics.Color.intToColor(rootfill); - window.setBackground(rootcolor); - } - - // FIXME: this hack is to cover up a race condition whereby the backbuffer - // and the window image get somehow out of sync under tough-to-reproduce - // circumstances i.e. fairly complex applications. The backbuffer is valid, - // it is actually correctly (briefly) painted to the window before the - // _previous_ state of the backbuffer is then painted back over it (!!) - // because asynchronous blits seem to occur first-in last-out - that is, - // blit from render is called after a refresh, but refresh happens last. - private boolean blithack = true; - - public RenderedRegions render() { - // useful optimisation; - if (rootfill != root.getIntFillcolor()) { - setBackgroundColor(); - } - // REMARK: it is entirely possible that our initial estimation - // for the maximum window size is exceeded, so here we check for - // this condition and resize the backbuffer as necessary - and - // only do so during render to avoid rapid repeats during resize - AWTPixelBuffer buf = (AWTPixelBuffer)backbuffer; - if (buf.getWidth() < pendingWidth || buf.getHeight() < pendingHeight) { - int h = buf.getWidth() < pendingWidth ? pendingWidth : buf.getWidth(); - int w = buf.getHeight() < pendingHeight ? pendingHeight : buf.getHeight(); - AWTPixelBuffer new_backbuffer = (AWTPixelBuffer)Platform.createPixelBuffer(w, h, this); - new_backbuffer.i.getGraphics().drawImage(buf.i, 0, 0, null); - backbuffer = new_backbuffer; - // dirty() is implicit due to SizeChange - //dirty(); - } - buf.initGraphics(); - RenderedRegions r = super.render(); - buf.cleanupGraphics(); - if (r==null) { - if (blithack) { - blithack = false; - blit(backbuffer, 0, 0, 0, 0, root.width, root.height); - } - return null; - } - blithack = true; - return r; - } - - AWTSurface(Box root, boolean framed) { - super(root); - - try { - if (!framed) { - window = new InnerWindow(); - } else { - window = frame = new InnerFrame(); - // ensures user cannot resize frame to be smaller than contents - // FIXME: this does not work on Linux - frame.addComponentListener(((InnerFrame)frame).enforceMinSize); - } - } catch (java.lang.UnsupportedOperationException e) { - // this is here to catch HeadlessException on jdk1.4 - Log.system.error(this, "Exception thrown creating Surface "+(framed?"frame":"window")); - Log.system.error(this, e); - } - - // Theoretically pack causes the insets to be calculated. - // - // AWT Bug - (Linux X11 at least) - // The insets calculated are not always exact. It seems - // that only a guess is returned. - window.pack(); - - // initialise the backbuffer and window with the root colour - // REMARK - this is for nicer initial rendering - setBackgroundColor(); - AWTPixelBuffer buf = (AWTPixelBuffer)backbuffer; - Graphics g = buf.i.getGraphics(); - g.setColor(rootcolor); - g.fillRect(0, 0, pendingWidth, pendingHeight); - g.dispose(); - - window.addMouseListener(this); - window.addKeyListener(this); - window.addComponentListener(this); - window.addMouseMotionListener(this); - window.addMouseWheelListener(this); - window.addWindowListener(this); - // workaround for an OS X limitation - try { - window.getInputContext().setCompositionEnabled(false); - } catch (UnsupportedOperationException e) { - Log.system.warn(this, "setCompositionEnabled() failed. Are you running OS X?"); - } - } - - // IMPORTANT: makeVisible must be called before render() - // to ensure that our peer has been created - public void _makeVisible(boolean b) { - window.setVisible(b); - // respect a frame's requested maximized state - // NB must be called after setVisible(true) - if (b && frame!=null) { - frame.setExtendedState(maximized ? Frame.MAXIMIZED_BOTH : Frame.NORMAL); - } - } - - public void _dispose() { - window.removeMouseListener(this); - window.removeMouseWheelListener(this); - window.removeKeyListener(this); // previously removed to work around a jdk1.3 bug - window.removeComponentListener(this); - window.removeMouseMotionListener(this); - window.removeWindowListener(this); - window.dispose(); - } - - public void _updateCursor(String cursor) { - if (cursor.equals("crosshair")) window.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); - else if (cursor.equals("east")) window.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR)); - else if (cursor.equals("move")) window.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - else if (cursor.equals("north")) window.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR)); - else if (cursor.equals("northeast")) window.setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR)); - else if (cursor.equals("northwest")) window.setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR)); - else if (cursor.equals("south")) window.setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR)); - else if (cursor.equals("southeast")) window.setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR)); - else if (cursor.equals("southwest")) window.setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR)); - else if (cursor.equals("text")) window.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); - else if (cursor.equals("west")) window.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR)); - else if (cursor.equals("wait")) window.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - else if (cursor.equals("hand")) window.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - else window.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - } - - // AWT Message translation //////////////////////////////////////////////////////////////// - - // these functions are all executed in the AWT thread, not the - // MessageQueue thread. As a result, they must be *extremely* - // careful about invoking methods on instances of Box. Currently, - // they should only enqueue messages, use Box.whoIs() - // (unsynchronised but thought to be safe), and modify members of - // Surface. - - public void componentHidden(ComponentEvent e) { } - public void componentShown(ComponentEvent e) { } - public void windowOpened(WindowEvent e) { } - public void windowClosed(WindowEvent e) { } - public void windowClosing(WindowEvent e) { Close(); } - public void windowIconified(WindowEvent e) { Minimized(true); } - public void windowDeiconified(WindowEvent e) { window.repaint(0, 0, root.width, root.height); Minimized(false); } - public void windowActivated(WindowEvent e) { Focused(true); } - public void windowDeactivated(WindowEvent e) { Focused(false); } - public void componentMoved(ComponentEvent e) { PosChange(window.getLocation().x, window.getLocation().y); } - - public void componentResized(ComponentEvent e) { - // Insets first known exactly on first componentResized event - // Before being set visible (AWT on top of XWindows at least) - // after pack it seems AWT guesses what the insets will be - // Take every time in case they change(?!) - discoverInsets(); - componentResized(window.getWidth() - leftInset - rightInset, window.getHeight() - topInset - bottomInset); - } - - /** frame/window resize notification with newwidth and newheight - * in relation to the backbuffer i.e. insets already subtracted - **/ - public void componentResized(int newwidth, int newheight) { - // First we fill the expanded part of the buffer before - // an old (dirty) copy of that buffer part gets painted - // REMARK - synchronized so we won't fill during render - synchronized (this) { - discoverInsets(); - AWTPixelBuffer buf = (AWTPixelBuffer)backbuffer; - //int rootfill = root.getIntFillcolor(); - Graphics g = buf.i.getGraphics(); - g.setColor(new java.awt.Color((rootfill >> 16) & 0xff, - (rootfill >> 8) & 0xff, - (rootfill) & 0xff)); - if (pendingWidth < newwidth) { - // ______ - // | | | - // | | | - // '----'-' - g.fillRect(pendingWidth, 0, newwidth, newheight); - } - if (pendingHeight < newheight) { - // ______ - // | | - // |______| - // '------' - g.fillRect(0, pendingHeight, newwidth, newheight); - } - g.dispose(); - SizeChange(newwidth, newheight); - } - } - - private void checkEvent(InputEvent e) { - alt = e.isAltDown(); - control = e.isControlDown(); - shift = e.isShiftDown(); - } - - public void keyTyped(KeyEvent k) { - // REMARK - we are a so called 'passive Input Method' client. - // We receive composed text (e.g. Asian characters) as key events - // where we want to convert them into a KeyPressed/KeyReleased - // Vexi event. Unfortunately we need a way to distinguish between - // events due to inputMethods (which we want) and those from the - // keyboard which are already handled via keyPressed/keyReleased. - // HACK - simplest is to just except non-ascii chars. - int unicode = (int)k.getKeyChar(); - if (255 >= unicode) { - return; - } - checkEvent(k); - KeyPressed(""+k.getKeyChar()); - KeyReleased(""+k.getKeyChar()); - } - public void keyPressed(KeyEvent k) { checkEvent(k); KeyPressed(translateKey(k)); } - public void keyReleased(KeyEvent k) { checkEvent(k); KeyReleased(translateKey(k)); } - public void mouseExited(MouseEvent m) { mouseMoved(m); } - public void mouseEntered(MouseEvent m) { mouseMoved(m); } - public void mouseDragged(MouseEvent m) { mouseMoved(m); } - public void mouseMoved(MouseEvent m) { - checkEvent(m); - - // ugly hack for Java1.4 dynamicLayout on Win32 -- this catches contractions during smooth resize - int newwidth = window.getWidth() - leftInset - rightInset; - int newheight = window.getHeight() - topInset - bottomInset; - if (newwidth != root.width || newheight != root.height) { - componentResized(newwidth, newheight); - } - - Move(m.getX() - leftInset, m.getY() - topInset); - } - public void mousePressed(MouseEvent m) { checkEvent(m); Press(modifiersToButtonNumber(m.getModifiers())); } - public void mouseReleased(MouseEvent m) { checkEvent(m); Release(modifiersToButtonNumber(m.getModifiers())); } - public void mouseClicked(MouseEvent m) { - checkEvent(m); - if (m.getClickCount() == 2) { - DoubleClick(modifiersToButtonNumber(m.getModifiers())); - } else { - Click(modifiersToButtonNumber(m.getModifiers())); - } - } - public void mouseWheelMoved(MouseWheelEvent e) { - checkEvent(e); - int notches = e.getWheelRotation(); - // FIXME: take into account WHEEL_BLOCK_SCROLL / WHEEL_UNIT_SCROLL - VScroll(notches); - } - public boolean _isLockingKeyOn(int key) { - // AWT's support for getLockingKeyState is minimal at best and - // more often than not throws an UnsupportedOperationException - int eventkeyid = -1; - switch (key) { - case Surface.CAPS_LOCK: eventkeyid = KeyEvent.VK_CAPS_LOCK; break; - case Surface.KANA_LOCK: eventkeyid = KeyEvent.VK_KANA_LOCK; break; - case Surface.NUM_LOCK: eventkeyid = KeyEvent.VK_NUM_LOCK; break; - case Surface.SCROLL_LOCK: eventkeyid = KeyEvent.VK_SCROLL_LOCK; break; - } - if (eventkeyid == -1) { - return false; - } - return window.getToolkit().getLockingKeyState(eventkeyid); - } - - String translateKey(KeyEvent k) { - switch (k.getKeyCode()) { - case KeyEvent.VK_ALT: return "alt"; - case KeyEvent.VK_BACK_SPACE: return "back_space"; - case KeyEvent.VK_CONTROL: return "control"; - case KeyEvent.VK_DELETE: return "delete"; - case KeyEvent.VK_DOWN: return "down"; - case KeyEvent.VK_END: return "end"; - case KeyEvent.VK_ENTER: return "enter"; - case KeyEvent.VK_ESCAPE: return "escape"; - case KeyEvent.VK_F1: return "f1"; - case KeyEvent.VK_F10: return "f10"; - case KeyEvent.VK_F11: return "f11"; - case KeyEvent.VK_F12: return "f12"; - case KeyEvent.VK_F2: return "f2"; - case KeyEvent.VK_F3: return "f3"; - case KeyEvent.VK_F4: return "f4"; - case KeyEvent.VK_F5: return "f5"; - case KeyEvent.VK_F6: return "f6"; - case KeyEvent.VK_F7: return "f7"; - case KeyEvent.VK_F8: return "f8"; - case KeyEvent.VK_F9: return "f9"; - case KeyEvent.VK_HOME: return "home"; - case KeyEvent.VK_INSERT: return "insert"; - case KeyEvent.VK_LEFT: return "left"; - case KeyEvent.VK_META: return "alt"; - case KeyEvent.VK_PAGE_DOWN: return "page_down"; - case KeyEvent.VK_PAGE_UP: return "page_up"; - case KeyEvent.VK_PAUSE: return "pause"; - case KeyEvent.VK_PRINTSCREEN: return "printscreen"; - case KeyEvent.VK_RIGHT: return "right"; - case KeyEvent.VK_SHIFT: return "shift"; - case KeyEvent.VK_TAB: return "tab"; - case KeyEvent.VK_UP: return "up"; - case KeyEvent.VK_CAPS_LOCK: return "caps_lock"; - case KeyEvent.VK_KANA_LOCK: return "kana_lock"; - case KeyEvent.VK_NUM_LOCK: return "num_lock"; - case KeyEvent.VK_SCROLL_LOCK: return "scroll_lock"; - case KeyEvent.VK_UNDEFINED: return "unknown"; - // VK_ entries not defined for Java 1.4 - case 524: return "windows_key"; - case 525: return "context_menu"; - // usually only single / known characters - default: - char c = k.getKeyChar(); - if (c >= 1 && c <= 26) { - c = (char)('a' + c - 1); - } - // WORKAROUND shift+ctrl+6 (i.e. C-^) returning empty character - if (k.getKeyCode() == 54 && k.isControlDown() && k.isShiftDown()) { - c = '^'; - } - //System.out.println(c+": "+k.getKeyCode()); - return String.valueOf(c); - } - } - } -} -/* FOOTNOTES - * 1. Passive InputMethod Client - means: we only handle committed text. - * - * The alternative to be an 'Active InputMethod Client' would mean we have - * in place composition, this presents quite a lot of complexity. We would need to - * interface with the text widgets and get it to render uncommitted text, move the - * caret ... etc. - * - */ Deleted: branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java =================================================================== --- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java 2016-06-28 16:46:33 UTC (rev 4872) +++ branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java 2016-07-15 01:16:46 UTC (rev 4873) @@ -1,296 +0,0 @@ -// Copyright 2000-2008 the Contributors, as shown in the revision logs. -// Licensed under the GNU General Public License version 2 ("the License"). -// You may not use this file except in compliance with the License. - -package org.vexi.plat; - -import java.awt.AlphaComposite; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Frame; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Toolkit; -import java.awt.event.KeyEvent; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.awt.event.WindowEvent; -import java.awt.event.WindowStateListener; -import java.awt.image.BufferedImage; -import java.awt.image.ColorModel; -import java.awt.image.DataBuffer; -import java.awt.image.DataBufferByte; -import java.awt.image.DataBufferInt; -import java.awt.image.DataBufferUShort; -import java.awt.image.Raster; -import java.awt.image.SampleModel; -import java.awt.image.WritableRaster; -import java.io.File; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.Hashtable; - -import org.ibex.js.Fountain; -import org.ibex.js.JS; -import org.ibex.js.JSExn; -import org.ibex.js.JSU; -import org.vexi.core.Box; -import org.vexi.core.Surface; -import org.vexi.graphics.Font; -import org.vexi.graphics.PixelBuffer; -import org.vexi.util.Log; - -/** Platform class for most reasonable Java1.2+ Java2s */ -public class Java2 extends AWT { - { - Platform.systemfonts = new JS.Immutable() { - File dir = null; - { - String osname = System.getProperty("os.name"); - Log.info(Java2.class, osname); - if (osname.indexOf("Windows")!=-1) { - dir = new File("c:/Windows/Fonts"); - } - } - public JS get(JS key) throws JSExn { - if (dir!=null) { - String s = JSU.toString(key); - File f = new File(dir, s + ".ttf"); - if (f.exists()) { - return new Fountain.File(f.getPath()); - } - f = new File(dir, s + ".ttc"); - if (f.exists()) { - return new Fountain.File(f.getPath()); - } - } - return super.get(key); - } - }; - } - - private boolean isJava14 = false; - - public Java2() { - // disable the focus manager so we can intercept the tab key - String versionString = System.getProperty("java.version", ""); - int secondDecimal = versionString.substring(versionString.indexOf('.') + 1).indexOf('.'); - if (secondDecimal != -1) { - versionString = versionString.substring(0, versionString.indexOf('.') + 1 + secondDecimal); - } - double version = Double.parseDouble(versionString); - if (version >= 1.4) { - isJava14 = true; - try { - Toolkit t = java.awt.Toolkit.getDefaultToolkit(); - Method m = java.awt.Toolkit.class.getMethod("setDynamicLayout", new Class[] { Boolean.TYPE }); - m.invoke(t, new Object[] { Boolean.TRUE }); - } catch (Exception e) { - Log.system.warn(this, "Exception while trying to enable AWT Dynamic Layout"); - Log.system.warn(this, e); - } - } - javax.swing.FocusManager.setCurrentManager(new javax.swing.FocusManager() { - public void processKeyEvent(Component focusedComponent, KeyEvent anEvent) { } - public void focusPreviousComponent(Component aComponent) { } - public void focusNextComponent(Component aComponent) { } - }); - } - - protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) { return new Java2PixelBuffer(w, h); } - protected Surface _createSurface(final Box root, final boolean framed) { - return (Surface)java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() { - public Object run() { - if (isJava14) { - try { - // weaken the binding here to avoid link errors on 1.3.x - Class java14SurfaceClass = Class.forName(Java2.class.getName() + "$Java14Surface"); - Constructor ctor = java14SurfaceClass.getConstructor(new Class[] { Box.class, Boolean.TYPE }); - return ctor.newInstance(new Object[] { root, Boolean.valueOf(framed) }); - } catch (Exception e) { - Log.system.error(this, e); - throw new LinkageError("error: " + e); - } - } - // else - return new Java2Surface(root, framed); - } - }); - } - - // Inner Classes ////////////////////////////////////////////////////////////////// - - private static Cursor invisibleCursor = - Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(2, 2, BufferedImage.TYPE_INT_ARGB), - new Point(1, 1), "invisible"); - - protected static class Java2Surface extends AWTSurface { - - public Java2Surface(Box root, boolean framed) { super(root, framed); } - - public void _setMinimized(boolean b) { - if (frame == null) { - Log.info(this, "JDK 1.2 can only minimize frames, not windows"); - } else if (b) { - frame.setState(java.awt.Frame.ICONIFIED); - } else { - frame.setState(java.awt.Frame.NORMAL); - } - } - - public void _updateMouseCursor() { - if (getCursor().equals("invisible")) { - window.setCursor(invisibleCursor); - } else { - super._updateCursor("default"); - } - } - } - - protected static class Java14Surface extends Java2Surface implements WindowStateListener, MouseWheelListener { - public Java14Surface(Box root, boolean framed) { - super(root, framed); - // JDK1.4 doesn't like java.lang.Window's... - // Is this dead code? TODO - verify that - // (!framed && window instance Frame) can ever be true - try { - if (!framed && window instanceof Frame) { - ((Frame)window).setUndecorated(true); - } - } catch(Exception e){ - Log.system.warn(Java2.class, e); - } - window.addWindowStateListener(this); - window.addMouseWheelListener(this); - } - - public void _makeVisible(boolean b) { window.setVisible(b); } - - public void _setMaximized(boolean m) { - if (frame == null) { - Log.warn(this, "JDK 1.4 can only maximize frames, not windows"); - return; - } - frame.setExtendedState(m ? Frame.MAXIMIZED_BOTH : (minimized ? Frame.ICONIFIED : Frame.NORMAL)); - } - public void _setMinimized(boolean m) { - if (frame == null) { - Log.warn(this, "JDK 1.4 can only minimize frames, not windows"); - return; - } - frame.setExtendedState(m ? Frame.ICONIFIED : (maximized ? Frame.MAXIMIZED_BOTH : Frame.NORMAL)); - } - public void windowStateChanged(WindowEvent e) { - if (e.getOldState() != e.getNewState()) { - if ((e.getNewState() & Frame.MAXIMIZED_BOTH) != 0) { - Maximized(true); - } else if (((e.getOldState() & Frame.MAXIMIZED_BOTH) != 0) && (e.getNewState() & Frame.MAXIMIZED_BOTH) == 0) { - Maximized(false); - } - } - } - - public void mouseWheelMoved(MouseWheelEvent m) { - if (m.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { - VScroll(m.getUnitsToScroll()); - } - } - } - - /** Allow for caching the buffered images to optimise repeated creations */ - protected Font.Glyph _createGlyph(Font f, char c) { return new Java2Glyph(f, c); } - protected static class Java2Glyph extends AWTGlyph { - private BufferedImage i2 = null; - int lastcolor = 0; - Graphics2D g = null; - public Java2Glyph(Font f, char c) { super(f, c); } - BufferedImage getBufferedImage() { - if (i2 == null) { - i2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); - } - return i2; - } - } - - protected static class Java2PixelBuffer extends AWTPixelBuffer { - private static ColorModel cm = Toolkit.getDefaultToolkit().getColorModel(); - private static Hashtable emptyHashtable = new Hashtable(); - private static short[] sbank = null; - private static int[] ibank = null; - private static byte[] bbank = null; - private static int bank_start = 0; - private WritableRaster raster = null; - private SampleModel sm = null; - private DataBuffer buf = null; - - public void drawGlyph(org.vexi.graphics.Font.Glyph glyph, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int argb) { - if (glyph.width == 0 || glyph.height == 0 || argb == 0) { - return; - } - int w = cx2 - cx1; - int h = cy2 - cy1; - Java2Glyph j2g = ((Java2Glyph)glyph); - BufferedImage g = j2g.getBufferedImage(); - if (j2g.lastcolor!=argb) { - j2g.lastcolor = argb; - Graphics2D src = (Graphics2D)g.getGraphics(); - src.setClip(0, 0, glyph.width, glyph.height); - src.setComposite(AlphaComposite.Src); - src.setColor(new Color((argb & 0x00ff0000) >> 16, (argb & 0x0000ff00) >> 8, argb & 0x000000ff, (argb >> 24) & 0x000000ff)); - src.drawImage(j2g.getImage(), 0, 0, null); - src.setComposite(AlphaComposite.SrcIn); - src.fillRect(0, 0, glyph.width, glyph.height); - } - Graphics2D dst = (Graphics2D)i.getGraphics(); - dst.setClip(cx1, cy1, w, h); - dst.setComposite(AlphaComposite.SrcOver); - dst.drawImage(g, dx, dy, null); - dst.setClip(0, 0, i.getWidth(null), i.getHeight(null)); - } - - public Java2PixelBuffer(int w, int h) { - sm = cm.createCompatibleSampleModel(w, h); - int numSamples = w * h * sm.getNumDataElements(); - if (sm.getDataType() == DataBuffer.TYPE_USHORT) { - if (sbank == null || numSamples > 512 * 512 / 3) { - buf = new DataBufferUShort(numSamples); - } else { - if (numSamples > sbank.length - bank_start) { - bank_start = 0; - sbank = new short[512 * 512]; - } - buf = new DataBufferUShort(sbank, numSamples, bank_start); - bank_start += numSamples; - } - } else if (sm.getDataType() == DataBuffer.TYPE_BYTE) { - if (bbank == null || numSamples > 512 * 512 / 3) { - buf = new DataBufferByte(numSamples); - } else { - if (numSamples > bbank.length - bank_start) { - bank_start = 0; - bbank = new byte[512 * 512]; - } - buf = new DataBufferByte(bbank, numSamples, bank_start); - bank_start += numSamples; - } - } else if (sm.getDataType() == DataBuffer.TYPE_INT) { - if (ibank == null || numSamples > 512 * 512 / 3) { - buf = new DataBufferInt(numSamples); - } else { - if (numSamples > ibank.length - bank_start) { - bank_start = 0; - ibank = new int[512 * 512]; - } - buf = new DataBufferInt(ibank, numSamples, bank_start); - bank_start += numSamples; - } - } - raster = Raster.createWritableRaster(sm, buf, null); - i = new BufferedImage(cm, raster, false, emptyHashtable); - } - } - - protected String getDescriptiveName() { return isJava14 ? "Java 1.4+ JVM" : "Java 1.2+ JVM"; } - -} Modified: branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Platform.java =================================================================== --- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Platform.java 2016-06-28 16:46:33 UTC (rev 4872) +++ branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Platform.java 2016-07-15 01:16:46 UTC (rev 4873) @@ -18,6 +18,7 @@ import org.vexi.core.Box; import org.vexi.core.Constants; import org.vexi.core.Surface; +import org.vexi.core.main.ModuleVersion; import org.vexi.graphics.Font; import org.vexi.graphics.Picture; import org.vexi.graphics.PixelBuffer; @@ -57,53 +58,20 @@ String version = System.getProperty("java.version", ""); String os_name = System.getProperty("os.name", ""); String os_version = System.getProperty("os.version", ""); - String platform_class = null; - boolean hasJOGL = false; - try { - Class.forName("org.vexi.plat.JOGL"); - hasJOGL = true; - } catch (ClassNotFoundException cnfe) { - hasJOGL = false; + String platform_class; + int secondDecimal = version.substring(version.indexOf('.') + 1).indexOf('.'); + if (secondDecimal != -1) { + version = version.substring(0, version.indexOf('.') + 1 + secondDecimal); } - if (hasJOGL) { - // OpenGL is cross-platform and as such must be detected first - platform_class = "JOGL"; - } else if (vendor.startsWith("Free Software Foundation")) { - // compiled natively with GCJ - if (os_name.startsWith("Window")) { - platform_class = "Win32"; - } else if (os_name.startsWith("Linux")) { - platform_class = "Linux"; - } else if (os_name.startsWith("SunOS")) { - platform_class = "Solaris"; - } else if (os_name.startsWith("Solaris")) { - platform_class = "Solaris"; - } else if (os_name.startsWith("Darwin")) { - platform_class = "Darwin"; - } else { - platform_class = "X11"; - } + double versionNumber = Double.parseDouble(version); + if (versionNumber >= 1.4) { + platform_class = "Swing"; } else { - int secondDecimal = version.substring(version.indexOf('.') + 1).indexOf('.'); - if (secondDecimal != -1) { - version = version.substring(0, version.indexOf('.') + 1 + secondDecimal); - } - double versionNumber = Double.parseDouble(version); - if (versionNumber >= 1.4) { - platform_class = "Swing"; - } else if (versionNumber >= 1.1) { - platform_class = "AWT"; - } else { - criticalAbort(vendor+" "+version+" is currently unsupported"); - } + criticalAbort(vendor+" "+version+" is currently unsupported"); + return; } - - if (platform_class == null) { - ulog.error(Platform.class, "Unable to detect JVM"); - criticalAbort("Unable to detect JVM"); - } - + if (slog.isInfo()) { slog.info(Platform.class, "Detecting JVM..." + os_name + " ==> org.vexi.plat." + platform_class); } @@ -118,17 +86,8 @@ //Log.color = term != null && term.length() != 0 && !term.equals("cygwin"); - try { - // FIXME org.ibex.Build is not a class - build = (String)Class.forName("org.ibex.Build").getField("build").get(null); - ulog.info(Platform.class, "Vexi build: " + build); - } catch (ClassNotFoundException cnfe) { - ulog.info(Platform.class, "Vexi build: unknown"); - } catch (Exception e) { - slog.warn(Platform.class, "exception while detecting build:"); - slog.warn(Platform.class, e); - } - + ulog.info(Platform.class, "Vexi build: " +ModuleVersion.STRING); + slog.diag(Platform.class, "Vexi VM detection: vendor = " + vendor); slog.diag(Platform.class, " version = " + version); slog.diag(Platform.class, " os = " + os_name + " [version " + os_version + "]"); Modified: branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java =================================================================== --- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java 2016-06-28 16:46:33 UTC (rev 4872) +++ branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java 2016-07-15 01:16:46 UTC (rev 4873) @@ -197,8 +197,6 @@ frame.setExtendedState(b ? (Frame.ICONIFIED | (maximized ? JFrame.MAXIMIZED_BOTH : 0)) : (maximized ? JFrame.MAXIMIZED_BOTH : JFrame.NORMAL)); - } else { - Log.warn(this, "JDK 1.1 platforms cannot minimize or unminimize windows"); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports.http://sdm.link/zohodev2dev _______________________________________________ Vexi-svn mailing list Vexi-svn@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/vexi-svn