X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FSurface.java;h=089480e79ae34ec83797e7d4bb4346c15f4023d7;hb=8235361e8601ae7b36ab707058de3b52225d15a2;hp=922f2e3c4b11276def566489fda05fd902293931;hpb=d1db5780c2fe79cf7acaa71508358d410aec7b96;p=org.ibex.core.git diff --git a/src/org/xwt/Surface.java b/src/org/xwt/Surface.java index 922f2e3..089480e 100644 --- a/src/org/xwt/Surface.java +++ b/src/org/xwt/Surface.java @@ -17,6 +17,7 @@ import java.util.*; * MessageQueue-time (the size/position/state at the time that the * now-executing message was enqueued). This distinction is important. */ +// FIXME: put the scar box back in public abstract class Surface extends PixelBuffer { public int getWidth() { return root == null ? 0 : root.width; } @@ -33,9 +34,6 @@ public abstract class Surface extends PixelBuffer { /** When set to true, render() should abort as soon as possible and restart the rendering process */ static volatile boolean abort = false; - /** the scar image drawn on the bottom right hand corner */ - static Box scarBox = null; - public static boolean alt = false; ///< true iff the alt button is pressed down, in real time public static boolean control = false; ///< true iff the control button is pressed down, in real time public static boolean shift = false; ///< true iff the shift button is pressed down, in real time @@ -224,9 +222,8 @@ public abstract class Surface extends PixelBuffer { protected final void SizeChange(final int width, final int height) { Message.Q.add(new Message() { public void perform() { if (width == root.width && height == root.height) return; - root.width = width; - root.height = height; root.needs_reflow = true; + root.reflow(width, height); }}); abort = true; } @@ -252,12 +249,9 @@ public abstract class Surface extends PixelBuffer { /** wrapper for setSize() which makes sure to dirty the place where the scar used to be */ void setSize() { - scarBox.dirty(); - root.width = Math.max(root.width, scarBox.minwidth); - root.height = Math.max(root.height, scarBox.minheight); + root.width = Math.max(root.width, 10); + root.height = Math.max(root.height, 10); setSize(root.width, root.height); - scarBox.x = 0; - scarBox.y = root.height - scarBox.minheight; } /** Indicates that the Surface is no longer needed */ @@ -277,14 +271,8 @@ public abstract class Surface extends PixelBuffer { } public Surface(Box root) { + this.root = root; - scarBox = new Box(); - try { - scarBox.put("image", ((Res)Main.builtin.get("org/xwt/builtin/scar.png")).getInputStream()); - } catch (Exception e) { - Log.log(this, e); - } - scarBox.surface = this; if (root.surface != null && root.surface.root == root) root.surface.dispose(false); else root.remove(); root.surface = this; @@ -296,11 +284,6 @@ public abstract class Surface extends PixelBuffer { Refresh(); } - public void paintRegion(int x, int y, int w, int h) { - root.render(0, 0, x, y, w, h, this); - scarBox.render(0, 0, x, y, w, h, this); - } - /** runs the prerender() and render() pipelines in the root Box to regenerate the backbuffer, then blits it to the screen */ public synchronized void render() { @@ -326,7 +309,7 @@ public abstract class Surface extends PixelBuffer { if (y+h > root.height) h = root.height - y; if (w <= 0 || h <= 0) continue; - paintRegion(x, y, w, h); + root.render(0, 0, x, y, w, h, this); if (abort) { @@ -370,29 +353,17 @@ public abstract class Surface extends PixelBuffer { public static abstract class DoubleBufferedSurface extends Surface { - public DoubleBufferedSurface(Box root) { - super(root); - - // this is a bit dangerous since we're passing ourselves to another method before subclasses' ctors have run... - backbuffer = Platform.createPixelBuffer(Platform.getScreenWidth(), Platform.getScreenHeight(), this); - } - - /** The automatic double buffer for the root box */ - PixelBuffer backbuffer = null; - - /** Dirty regions on the screen which need to be rebuilt using Surface.blit() */ + public DoubleBufferedSurface(Box root) { super(root); } + PixelBuffer backbuffer = Platform.createPixelBuffer(Platform.getScreenWidth(), Platform.getScreenHeight(), this); DirtyList screenDirtyRegions = new DirtyList(); public void drawPicture(Picture source, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2) { + screenDirtyRegions.dirty(dx1, dy1, dx2 - dx1, dy2 - dy1); backbuffer.drawPicture(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2); } public void fillRect(int x1, int y1, int x2, int y2, int color) { + screenDirtyRegions.dirty(x1, y1, x2 - x1, y2 - y1); backbuffer.fillRect(x1, y1, x2, y2, color); } - - public void paintRegion(int x, int y, int w, int h) { - super.paintRegion(x, y, w, h); - screenDirtyRegions.dirty(x, y, w, h); - } public void render() { super.render();