public abstract void setInvisible(boolean b); ///< If <tt>b</tt>, make window invisible; otherwise, make it non-invisible.
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.
- protected abstract void setSize(int width, int height); ///< Sets the surface's width and height.
public abstract void setLocation(); ///< Set the surface's x/y position to that of the root box
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 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.
+ 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);
+ }
+ _setSize(root.width, root.height);
+ }
// Helper methods for subclasses ////////////////////////////////////////////////////////////
protected final void PosChange(final int x, final int y) {
Message.Q.add(new Message() { public void perform() {
- root.put("x", new Integer(x));
- root.put("y", new Integer(y));
+ root.x = x;
+ root.y = y;
+ root.put("PosChange", Boolean.TRUE);
}});
}
// Other Methods ///////////////////////////////////////////////////////////////////////////////
- /** wrapper for setSize() which makes sure to dirty the place where the scar used to be */
- void setSize() {
- root.width = Math.max(root.width, 10);
- root.height = Math.max(root.height, 10);
- setSize(root.width, root.height);
- }
-
/** Indicates that the Surface is no longer needed */
public final void dispose(boolean quitIfAllSurfacesGone) {
if (Log.on) Log.log(this, "disposing " + this);
do {
abort = false;
root.reflow();
+ setSize(root.width, root.height);
// update mouseinside and trigger Enter/Leave as a result of box size/position changes
String oldcursor = cursor;
cursor = "default";
if (w <= 0 || h <= 0) continue;
root.render(0, 0, x, y, w, h, this, identity);
+ drawPicture(Main.scarImage,
+ 0, root.height - Main.scarImage.getHeight(),
+ x, y, w, h);
if (abort) {
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 drawPicture(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2) {
+ screenDirtyRegions.dirty(cx1, cy1, cx2 - cx1, cy2 - cy1);
+ backbuffer.drawPicture(source, dx, dy, cx1, cy1, cx2, cy2);
+ }
- public void drawPictureAlphaOnly(Picture source,
- int dx1, int dy1, int dx2, int dy2,
- int sx1, int sy1, int sx2, int sy2,
- int argb) {
- screenDirtyRegions.dirty(dx1, dy1, dx2 - dx1, dy2 - dy1);
- backbuffer.drawPictureAlphaOnly(source, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, argb); }
+ public void drawPictureAlphaOnly(Picture source, int dx, int dy, int cx1, int cy1, int cx2, int cy2, int argb) {
+ screenDirtyRegions.dirty(cx1, cy1, cx2 - cx1, cy2 - cy1);
+ backbuffer.drawPictureAlphaOnly(source, dx, dy, cx1, cy1, cx2, cy2, argb);
+ }
public void fillTrapezoid(int x1, int x2, int y1, int x3, int x4, int y2, int color) {
screenDirtyRegions.dirty(Math.min(x1, x3), y1, Math.max(x2, x4) - Math.min(x1, x3), y2 - y1);