From: megacz Date: Fri, 30 Jan 2004 07:42:45 +0000 (+0000) Subject: 2003/12/11 09:34:55 X-Git-Tag: RC3~274 X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=commitdiff_plain;h=6f3098e15d6fc6c1023e86b4b69cd70ee38f59e5 2003/12/11 09:34:55 darcs-hash:20040130074245-2ba56-85417a69f16e47931cfd7ac5fb34afcff6b0b12f.gz --- diff --git a/src/org/xwt/Surface.java b/src/org/xwt/Surface.java index 97041f1..0977ada 100644 --- a/src/org/xwt/Surface.java +++ b/src/org/xwt/Surface.java @@ -20,9 +20,6 @@ import java.util.*; */ public abstract class Surface extends PixelBuffer { - public int getWidth() { return root == null ? 0 : root.width; } - public int getHeight() { return root == null ? 0 : root.height; } - // Static Data //////////////////////////////////////////////////////////////////////////////// /**< the most recently enqueued Move message; used to throttle the message rate */ @@ -77,22 +74,31 @@ public abstract class Surface extends PixelBuffer { 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 + + + + // Sizing ///////////////////////////////////////////////////////////////////////////////// + + private int width = 0; + private int height = 0; + public int getWidth() { return width; } + public int getHeight() { return height; } + public void setLimits(int min_width, int min_height, int max_width, int max_height) { } - protected abstract void _setSize(int width, int height); ///< Sets the surface's width and height. + /// should be overriden by subclasses; programmatically sets the height + protected abstract void _setSize(int width, int height); - private int platform_window_width = 0; - private int platform_window_height = 0; + public final void setWidth(int width) { setSize(width, this.height); } + public final void setHeight(int height) { setSize(this.width, height); } protected final void setSize(int width, int height) { - if (root.width != width || root.height != height) { - root.dirty(0, root.height - Main.scarImage.getHeight(), Main.scarImage.getWidth(), Main.scarImage.getHeight()); - root.width = Math.max(Main.scarImage.getWidth(), width); - root.height = Math.max(Main.scarImage.getHeight(), height); - } - if (root.width > 0 && root.height > 0 && platform_window_width != root.width && platform_window_height != root.height) - _setSize(root.width, root.height); + if (this.width == width && this.height == height) return; + this.width = Math.max(Main.scarImage.getWidth(), width); + this.height = Math.max(Main.scarImage.getHeight(), height); + _setSize(width, height); } + // Helper methods for subclasses //////////////////////////////////////////////////////////// protected final void Press(final int button) { @@ -234,11 +240,9 @@ public abstract class Surface extends PixelBuffer { protected final void SizeChange(final int width, final int height) { Scheduler.add(new Scheduler.Task() { public void perform() { - if (width == root.width && height == root.height) return; root.set(root.REFLOW); - platform_window_width = width; - platform_window_height = height; - do { abort = false; root.reflow(width, height); } while(abort); + Surface.this.width = width; + Surface.this.height = height; }}); abort = true; } @@ -304,11 +308,6 @@ public abstract class Surface extends PixelBuffer { } catch (JSExn e) { throw new Error("this should never happen"); } - - // make sure the root is properly sized - do { abort = false; root.reflow(root.width, root.height); } while(abort); - - root.dirty(); Refresh(); } @@ -317,11 +316,15 @@ public abstract class Surface extends PixelBuffer { /** runs the prerender() and render() pipelines in the root Box to regenerate the backbuffer, then blits it to the screen */ public synchronized void render() { + // FIXME ugly + if (root.width != width || root.height != height) + root.dirty(0, root.height - Main.scarImage.getHeight(), Main.scarImage.getWidth(), Main.scarImage.getHeight()); + // make sure the root is properly sized do { abort = false; - root.reflow(root.width, root.height); - setSize(root.width, root.height); + root.reflow(width, height); + setSize(width, height); // update mouseinside and trigger Enter/Leave as a result of box size/position changes String oldcursor = cursor; cursor = "default";