Revision: 4065
http://vexi.svn.sourceforge.net/vexi/?rev=4065&view=rev
Author: clrg
Date: 2011-03-23 13:52:15 +0000 (Wed, 23 Mar 2011)
Log Message:
-----------
Implementation consistency and fix missing cursor update post-reflow
- all platform-specified functions start with _
- do not call Surface._* functions outside of Surface
- TODO: clearer naming required to indicate method intent (e.g. platform*,
core*, internal*)
Modified Paths:
--------------
trunk/org.vexi-core.main/src/main/java/org/vexi/core/Surface.java
trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java
trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWTBase.java
trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java
trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java
trunk/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
Modified: trunk/org.vexi-core.main/src/main/java/org/vexi/core/Surface.java
===================================================================
--- trunk/org.vexi-core.main/src/main/java/org/vexi/core/Surface.java
2011-03-23 12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/java/org/vexi/core/Surface.java
2011-03-23 13:52:15 UTC (rev 4065)
@@ -78,13 +78,13 @@
public volatile int pendingHeight = 0;
// NOTE: it is up to the platform implementation to set these keys
- public static boolean alt = false; ///< true iff the alt button
is pressed down
- public static boolean control = false; ///< true iff the control
button is pressed down
- public static boolean shift = false; ///< true iff the shift button
is pressed down
+ public static boolean alt = false; ///< true iff the
alt button is pressed down
+ public static boolean control = false; ///< true iff the
control button is pressed down
+ public static boolean shift = false; ///< true iff the
shift button is pressed down
- public static boolean button1 = false; ///< true iff button 1 is
depressed
- public static boolean button2 = false; ///< true iff button 2 is
depressed
- public static boolean button3 = false; ///< true iff button 3 is
depressed
+ public static boolean button1 = false; ///< true iff
button 1 is depressed
+ public static boolean button2 = false; ///< true iff
button 2 is depressed
+ public static boolean button3 = false; ///< true iff
button 3 is depressed
final public static int CAPS_LOCK = 1;
final public static int KANA_LOCK = 2;
@@ -92,25 +92,25 @@
final public static int SCROLL_LOCK = 4;
- // Instance Data
///////////////////////////////////////////////////////////////////////
+ // Instance Data
////////////////////////////////////////////////////////////////////////
- public Box root; ///< the Box at the
root of this surface
- public String cursor = "default"; ///< the active cursor
to switch to when syncCursor() is called
- public boolean cursorset = false; ///< used to prevent
overlapped boxes overwriting the cursor
- public int x; ///< x position of
surface
- public int y; ///< y position of
surface
- public int mousex; ///< x position of the
mouse
- public int mousey; ///< y position of the
mouse
- public int newmousex = -1; ///< x position of the
mouse, in real time; this lets us collapse Move's
- public int newmousey = -1; ///< y position of the
mouse, in real time; this lets us collapse Move's
- public boolean minimized = false; ///< true iff this
surface is minimized, in real time
- public boolean maximized = false; ///< true iff this
surface is maximized, in real time
- protected Picture icon;
- private boolean visible = false;
- private boolean resizable = false;
- private boolean mouseUpdateRequired = false; ///< reflow requests
refresh of cursor
+ public Box root; ///< the Box at
the root of this surface
+ protected String cursor = "default"; ///< the active
cursor to switch to when _updateMouseCursor() is called
+ protected boolean cursorset = false; ///< used to
prevent overlapping boxes overwriting the cursor
+ public int x; ///< x position
of surface
+ public int y; ///< y position
of surface
+ public int mousex; ///< x position
of the mouse
+ public int mousey; ///< y position
of the mouse
+ public int newmousex = -1; ///< x position
of the mouse, in real time; this lets us collapse Move's
+ public int newmousey = -1; ///< y position
of the mouse, in real time; this lets us collapse Move's
+ public boolean minimized = false; ///< true iff
this surface is minimized, in real time
+ public boolean maximized = false; ///< true iff
this surface is maximized, in real time
+ protected Picture icon; ///< user
specified icon for the surface
+ private boolean visible = false; ///< visible
state of the surface
+ private boolean resizable = false; ///< whether a
user may resize this surface
+ private boolean mouseUpdateRequired = false; ///< reflow
requests refresh of cursor
- final private DirtyList dirtyRegions = new DirtyList(); ///<
Dirty regions on the surface
+ final private DirtyList dirtyRegions = new DirtyList(); ///< Dirty
regions on the surface
public int topInset = 0;
public int leftInset = 0;
@@ -121,35 +121,55 @@
private boolean bottomAlign = false;
private boolean rightAlign = false;
- // Used For Simulating Clicks and DoubleClicks
/////////////////////////////////////////////////
+ // Used For Simulating Clicks and DoubleClicks
////////////////////////////////////////////
- int last_press_x = Integer.MAX_VALUE; ///< the x-position of the
mouse the last time a Press message was enqueued
- int last_press_y = Integer.MAX_VALUE; ///< the y-position of the
mouse the last time a Press message was enqueued
- int lastClickButton = 0; ///< the last button to receive
a Click message; used for simulating DoubleClick's
- long lastClickTime = 0; ///< the last time a Click
message was processed; used for simulating DoubleClick's
+ int last_press_x = Integer.MAX_VALUE; ///< the
x-position of the mouse the last time a Press message was enqueued
+ int last_press_y = Integer.MAX_VALUE; ///< the
y-position of the mouse the last time a Press message was enqueued
+ int lastClickButton = 0; ///< the last
button to receive a Click message; used for simulating DoubleClick's
+ long lastClickTime = 0; ///< the last
time a Click message was processed; used for simulating DoubleClick's
- // Methods to be overridden by subclasses
///////////////////////////////////////////////////////
+ // Methods to be overridden by subclasses
/////////////////////////////////////////////////
- public abstract PixelBuffer getPixelBuffer(); ///< returns a
PixelBuffer representing this Surface
- public abstract void toBack(); ///< should push
surface to the back of the stacking order
- public abstract void toFront(); ///< should pull
surface to the front of the stacking order
- public abstract void syncCursor(); ///< set the actual
cursor to this.cursor if they do not match
- public abstract void makeVisible(boolean b); ///< If <tt>b</tt>,
make window invisible; otherwise, make it non-invisible.
- protected abstract void requestFocus(); ///< attempts to assign
focus to a surface
- protected abstract boolean _isLockingKeyOn(int k); ///< detect current
state of a lock key (on==true)
- protected abstract void _setMaximized(boolean b); ///< If <tt>b</tt>,
maximize the surface; otherwise, un-maximize it.
- protected abstract void _setMinimized(boolean b); ///< If <tt>b</tt>,
minimize the surface; otherwise, un-minimize it.
- public abstract void setLocation(); ///< Set the surface's
x/y position to that of the root box
- protected abstract void _setSize(int w, int h); ///< set the actual
size of the surface
- public abstract void setTitleBarText(String s); ///< Sets the surface's
title bar text, if applicable
- public abstract void setIcon(Picture i); ///< Sets the surface's
title bar text, if applicable
- public abstract void _dispose(); ///< Destroy the surface
+ public abstract PixelBuffer _getPixelBuffer(); ///< returns a
PixelBuffer representing this Surface
+ public abstract void _toBack(); ///< should push
surface to the back of the stacking order
+ public abstract void _toFront(); ///< should pull
surface to the front of the stacking order
+ protected abstract void _updateCursor(String cursor); ///< set the
actual cursor to this.cursor if they do not match
+ public abstract void _makeVisible(boolean b); ///< If
<tt>b</tt>, make window visible; otherwise, make it non-visible.
+ protected abstract void _requestFocus(); ///< attempts to
assign focus to a surface
+ protected abstract boolean _isLockingKeyOn(int k); ///< detect
current state of a lock key (on==true)
+ protected abstract void _setMaximized(boolean b); ///< If
<tt>b</tt>, maximize the surface; otherwise, un-maximize it.
+ protected abstract void _setMinimized(boolean b); ///< If
<tt>b</tt>, minimize the surface; otherwise, un-minimize it.
+ public abstract void _setLocation(); ///< Set the
surface's x/y position to that of the root box
+ protected abstract void _setSize(int w, int h); ///< set the
actual size of the surface
+ public abstract void _setTitleBarText(String s); ///< Sets the
surface's title bar text, if applicable
+ public abstract void _setIcon(Picture i); ///< Sets the
surface's title bar text, if applicable
+ public abstract void _dispose(); ///< Destroy the
surface
protected abstract void _setMaximumSize(int maxx, int maxy);
protected abstract void _setMinimumSize(int minx, int miny);
protected abstract void _setResizable(boolean resizable);
+
+
+ // Surface method implementation
//////////////////////////////////////////////////////////
+
+ /** Request that the Surface receives input focus */
+ protected void requestFocus() { _requestFocus(); }
+
+ /** Request to set size of the Surface to the given width 'w' and height
'h' */
protected void setSize(int w, int h) { pendingWidth = w; pendingHeight =
h; _setSize(w, h); }
+ /** Set the titlebar text of the Surface to the given 'text' */
+ protected void setTitleBarText(String text) { _setTitleBarText(text); }
+
+ /** Move this Surface to the front of the window stack */
+ protected void toBack() { _toBack(); }
+
+ /** Drop this Surface to the back of the window stack */
+ protected void toFront() { _toFront(); }
+
+ /** Signal that an update to the mouse cursor has been made */
+ protected void updateCursor() { _updateCursor(cursor); }
+
/** Experimental attempt to access locking key states - note that
* the Java version does not work on Linux
*/
@@ -167,12 +187,16 @@
return false;
}
+ // Used as the default icon for new Surfaces
// FIXME: this should be a Picture
protected static URL vexiIcon =
Main.class.getResource("builtin/vexi-icon.png");
+
+ // The scar image which is rendered over an unsigned Vexi Surface
+ // to let users know the application is not from a trusted source
protected static Picture scarImage = null;
- // Event Handling Helper methods for subclasses ///////////////////
+ // Event Handling Helper methods for subclasses
///////////////////////////////////////////
private boolean keypress_scheduled = false;
protected final void KeyPressed(String key) {
@@ -322,7 +346,7 @@
// root (ONLY) gets motion events outside itself (if trapped)
root.tryPropagateMove(mousex, mousey);
if (!cursor.equals(oldcursor)) {
- syncCursor();
+ updateCursor();
}
return o;
}
@@ -424,12 +448,12 @@
public final void setIcon(JS newicon) throws JSExn {
icon = newicon == null ? null : Picture.load(newicon, seticon);
if (icon==null) {
- setIcon(icon);
+ _setIcon(icon);
Refresh();
}
}
private Callable seticon = new Callable() {
- private synchronized void call() { setIcon(icon); }
+ private synchronized void call() { _setIcon(icon); }
public Object run(Object o) {
call();
Refresh();
@@ -529,7 +553,7 @@
if (x!=this.x || y!=this.y) {
this.x = x;
this.y = y;
- setLocation();
+ _setLocation();
}
}
@@ -579,7 +603,7 @@
}
if (visible != Box.testDisplay(root)) {
visible = Box.testDisplay(root);
- makeVisible(visible);
+ _makeVisible(visible);
}
if (visible) {
render();
@@ -684,11 +708,12 @@
// handle frame-specific box properties
JS title = b.getAndTriggerTraps(SC_frametitle);
if (title == null || JSU.toString(title).trim().equals("")) {
- surface.setTitleBarText("Vexi Application");
+ surface._setTitleBarText("Vexi Application");
} else {
- surface.setTitleBarText(JSU.toString(title));
+ surface._setTitleBarText(JSU.toString(title));
}
+ // get and assign the surface icon
JS icon = b.getAndTriggerTraps(SC_frameicon);
surface.setIcon(icon);
@@ -732,6 +757,7 @@
}
// make sure the root is properly sized
abortcount = 0;
+ final String oldcursor = cursor;
do {
abort = false;
abortcount ++;
@@ -752,12 +778,15 @@
setMinimumSize(root.contentwidth, root.contentheight);
}
} while (abort);
+ if (!cursor.equals(oldcursor)) {
+ updateCursor();
+ }
final int numregions = dirtyRegions.num();
final int[] dirt = dirtyRegions.flush();
if (dirt==null) return null;
- final PixelBuffer buf = getPixelBuffer();
+ final PixelBuffer buf = _getPixelBuffer();
final int rwidth = root.width;
final int rheight = root.height;
final int scar_y = rheight-scarImage.height;
@@ -823,7 +852,7 @@
public static abstract class DoubleBufferedSurfaceNoBlit extends Surface
implements PixelBuffer {
public DoubleBufferedSurfaceNoBlit(Box root) { super(root); }
- public PixelBuffer getPixelBuffer() { return this; }
+ public PixelBuffer _getPixelBuffer() { return this; }
protected PixelBuffer backbuffer =
Platform.createPixelBuffer(Platform.getScreenBounds().width,
Platform.getScreenBounds().height, this);
/** Draw an unscaled image onto the backbuffer where:
Modified: trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java
===================================================================
--- trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java
2011-03-23 12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWT.java
2011-03-23 13:52:15 UTC (rev 4065)
@@ -77,17 +77,17 @@
/** 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() {
+ 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() { if (window != null) window.setLocation(x,
y); }
- public void setTitleBarText(String s) { if (frame != null)
frame.setTitle(s); }
+ public void _requestFocus() { if (window != null)
window.requestFocus(); }
+ public void _setLocation() { 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) {
+ public void _setIcon(final Picture i) {
if (frame == null) {
return;
}
@@ -335,7 +335,7 @@
// IMPORTANT: makeVisible must be called before render()
// to ensure that our peer has been created
- public void makeVisible(boolean b) {
+ public void _makeVisible(boolean b) {
window.setVisible(b);
// respect a frame's requested maximized state
// NB must be called after setVisible(true)
@@ -354,7 +354,7 @@
window.dispose();
}
- public void syncCursor() {
+ 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));
Modified: trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWTBase.java
===================================================================
--- trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWTBase.java
2011-03-23 12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/java/org/vexi/plat/AWTBase.java
2011-03-23 13:52:15 UTC (rev 4065)
@@ -407,17 +407,17 @@
/** 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() {
+ 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() { if (window != null) window.setLocation(x,
y); }
- public void setTitleBarText(String s) { if (frame != null)
frame.setTitle(s); }
+ public void _requestFocus() { if (window != null)
window.requestFocus(); }
+ public void _setLocation() { 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) {
+ public void _setIcon(final Picture i) {
if (frame == null) {
return;
}
@@ -665,7 +665,7 @@
// IMPORTANT: makeVisible must be called before render()
// to ensure that our peer has been created
- public void makeVisible(boolean b) { window.setVisible(b); }
+ public void _makeVisible(boolean b) { window.setVisible(b); }
public void _dispose() {
window.removeMouseListener(this);
@@ -677,7 +677,7 @@
window.dispose();
}
- public void syncCursor() {
+ 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));
Modified: trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java
===================================================================
--- trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java
2011-03-23 12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Java2.java
2011-03-23 13:52:15 UTC (rev 4065)
@@ -139,11 +139,11 @@
}
}
- public void syncCursor() {
+ public void _updateMouseCursor() {
if (cursor.equals("invisible")) {
window.setCursor(invisibleCursor);
} else {
- super.syncCursor();
+ super._updateCursor("default");
}
}
}
@@ -165,7 +165,7 @@
window.addMouseWheelListener(this);
}
- protected void makeVisible() { }
+ public void _makeVisible(boolean b) { window.setVisible(b); }
protected void _setMaximized(boolean m) {
if (frame == null) {
Modified: trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java
===================================================================
--- trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java
2011-03-23 12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/java/org/vexi/plat/Swing.java
2011-03-23 13:52:15 UTC (rev 4065)
@@ -143,17 +143,17 @@
/** 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() {
+ 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() { if (window != null) window.setLocation(x,
y); }
- public void setTitleBarText(String s) { if (frame != null)
frame.setTitle(s); }
+ public void _requestFocus() { if (window != null)
window.requestFocus(); }
+ public void _setLocation() { 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) {
+ public void _setIcon(final Picture i) {
if (frame == null) {
return;
}
@@ -544,7 +544,7 @@
// IMPORTANT: makeVisible must be called before render()
// to ensure that our peer has been created
- public void makeVisible(boolean b) {
+ public void _makeVisible(boolean b) {
window.setVisible(b);
}
@@ -559,7 +559,7 @@
window.dispose();
}
- public void syncCursor() {
+ 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));
Modified: trunk/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
===================================================================
--- trunk/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp 2011-03-23
12:48:48 UTC (rev 4064)
+++ trunk/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp 2011-03-23
13:52:15 UTC (rev 4065)
@@ -2563,7 +2563,7 @@
String oldcursor = s.cursor;
tryPropagateMove(s.mousex, s.mousey);
if (!s.cursor.equals(oldcursor)) {
- s.syncCursor();
+ s.updateCursor();
}
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software
be a part of the solution? Download the Intel(R) Manageability Checker
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn