X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FSurface.java;h=126646605a5862db83fa7cc0f9bc067b26010884;hb=0867bd3763893981567dec0bc8221ca98712760e;hp=e2e18836e45068a10af4d795842c979963cef417;hpb=8d4cf9930b8d25dba85acaeea1e7f2b09cf1c272;p=org.ibex.core.git diff --git a/src/org/xwt/Surface.java b/src/org/xwt/Surface.java index e2e1883..1266466 100644 --- a/src/org/xwt/Surface.java +++ b/src/org/xwt/Surface.java @@ -48,6 +48,9 @@ public abstract class Surface { /** true iff button 3 is depressed, in MessageQueue-time */ public static boolean button3 = false; + /** true iff all surfaces created from now on should be scarred */ + public static boolean scarAllSurfacesFromNowOn = false; + // Public Members and State Variables ///////////////////////////////////////////////////////// @@ -92,7 +95,12 @@ public abstract class Surface { /** the y-position of the mouse the last time a Press message was enqueued */ int last_press_y = Integer.MAX_VALUE; + /** the last button to recieve a Click message; used for simulating DoubleClick's */ + static int lastClickButton = 0; + /** the last time a Click message was processed; used for simulating DoubleClick's */ + static long lastClickTime = 0; + // Methods to be overridden by subclasses /////////////////////////////////////////////////////// @@ -132,6 +140,9 @@ public abstract class Surface { /** Destroy the surface */ public abstract void _dispose(); + /** Notifies the surface that limits have been imposed on the surface's size */ + public void setLimits(int min_width, int min_height, int max_width, int max_height) { } + // Helper methods for subclasses //////////////////////////////////////////////////////////// @@ -150,7 +161,7 @@ public abstract class Surface { MessageQueue.add(new Message() { public void perform() { Surface.this.boxContainingMouse = who; Platform.clipboardReadEnabled = true; - root.put("Press1", null, Boolean.TRUE); + root.put("Press3", null, Boolean.TRUE); Platform.clipboardReadEnabled = false; }}); } @@ -174,6 +185,12 @@ public abstract class Surface { if (button == 1) new SimpleMessage("Click1", Boolean.TRUE, root.whoIs(mousex, mousey)); else if (button == 2) new SimpleMessage("Click2", Boolean.TRUE, root.whoIs(mousex, mousey)); else if (button == 3) new SimpleMessage("Click3", Boolean.TRUE, root.whoIs(mousex, mousey)); + if (Platform.needsAutoDoubleClick()) { + long now = System.currentTimeMillis(); + if (lastClickButton == button && now - lastClickTime < 350) DoubleClick(button); + lastClickButton = button; + lastClickTime = now; + } } protected final void DoubleClick(int button) { @@ -185,16 +202,16 @@ public abstract class Surface { /** sends a KeyPressed message; subclasses should not add the C- or A- prefixes, nor should they capitalize alphabet characters */ protected final void KeyPressed(String key) { if (key == null) return; - - if (key.equals("alt")) alt = true; + + if (key.toLowerCase().endsWith("shift")) shift = true; + else if (shift) key = key.toUpperCase(); + + if (key.toLowerCase().equals("alt")) alt = true; else if (alt) key = "A-" + key; - if (key.endsWith("control")) control = true; + if (key.toLowerCase().endsWith("control")) control = true; else if (control) key = "C-" + key; - if (key.endsWith("shift")) shift = true; - else if (shift) key = key.toUpperCase(); - final String fkey = key; MessageQueue.add(new KMessage(key)); } @@ -205,8 +222,12 @@ public abstract class Surface { public KMessage(String k) { key = k; } public void perform() { if (key.equals("C-v") || key.equals("A-v")) Platform.clipboardReadEnabled = true; - for(int i=0; i height - scarPicture.getHeight() - vscar) { int _x1 = Math.max(x, hscar); int _x2 = Math.min(x + w, hscar + scarPicture.getWidth()); @@ -540,11 +576,11 @@ public abstract class Surface { } // FEATURE: reinstate recycler - private class SimpleMessage implements Message { + public class SimpleMessage implements Message { private Box boxContainingMouse; private Object value; - private String name; + public String name; SimpleMessage(String name, Object value, Box boxContainingMouse) { this.boxContainingMouse = boxContainingMouse;