X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FScreen.java;h=1ecc4b185e0ee1eb8352211882c55bb39003d27b;hb=bd8d51fa0a33d6d27dba088c57791e1650512fc0;hp=29c8485f95b837d41fece27f6b9c02af6c90cd7a;hpb=30bd4abd2a85c162bdf0a1cc687b366345182bc1;p=fanfix.git diff --git a/src/jexer/io/Screen.java b/src/jexer/io/Screen.java index 29c8485..1ecc4b1 100644 --- a/src/jexer/io/Screen.java +++ b/src/jexer/io/Screen.java @@ -183,7 +183,17 @@ public abstract class Screen { /** * When true, logical != physical. */ - protected boolean dirty; + protected volatile boolean dirty; + + /** + * Get dirty flag. + * + * @return if true, the logical screen is not in sync with the physical + * screen + */ + public final boolean isDirty() { + return dirty; + } /** * Set if the user explicitly wants to redraw everything starting with a @@ -243,8 +253,8 @@ public abstract class Screen { * @param attr attributes to use (bold, foreColor, backColor) * @param clip if true, honor clipping/offset */ - public final void putAttrXY(final int x, final int y, - final CellAttributes attr, final boolean clip) { + public final void putAttrXY(final int x, final int y + , final CellAttributes attr, final boolean clip) { int X = x; int Y = y; @@ -280,6 +290,7 @@ public abstract class Screen { * @param attr attributes to use (bold, foreColor, backColor) */ public final void putAll(final char ch, final CellAttributes attr) { + for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { putCharXY(x, y, ch, attr); @@ -348,6 +359,7 @@ public abstract class Screen { * @param ch character to draw */ public final void putCharXY(final int x, final int y, final char ch) { + if ((x < clipLeft) || (x >= clipRight) || (y < clipTop) @@ -398,6 +410,7 @@ public abstract class Screen { * @param str string to draw */ public final void putStrXY(final int x, final int y, final String str) { + int i = x; for (int j = 0; j < str.length(); j++) { char ch = str.charAt(j); @@ -449,7 +462,7 @@ public abstract class Screen { * @param width new width * @param height new height */ - private void reallocate(final int width, final int height) { + private synchronized void reallocate(final int width, final int height) { if (logical != null) { for (int row = 0; row < this.height; row++) { for (int col = 0; col < this.width; col++) { @@ -494,7 +507,7 @@ public abstract class Screen { * * @param width new screen width */ - public final void setWidth(final int width) { + public final synchronized void setWidth(final int width) { reallocate(width, this.height); } @@ -504,7 +517,7 @@ public abstract class Screen { * * @param height new screen height */ - public final void setHeight(final int height) { + public final synchronized void setHeight(final int height) { reallocate(this.width, height); } @@ -524,7 +537,7 @@ public abstract class Screen { * * @return current screen height */ - public final int getHeight() { + public final synchronized int getHeight() { return this.height; } @@ -533,7 +546,7 @@ public abstract class Screen { * * @return current screen width */ - public final int getWidth() { + public final synchronized int getWidth() { return this.width; } @@ -554,7 +567,7 @@ public abstract class Screen { * Reset screen to not-bold, white-on-black. Also flushes the offset and * clip variables. */ - public final void reset() { + public final synchronized void reset() { dirty = true; for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { @@ -577,12 +590,24 @@ public abstract class Screen { } /** - * Force the screen to be fully cleared and redrawn on the next flush(). + * Clear the logical screen. */ public final void clear() { reset(); } + /** + * Clear the physical screen. + */ + public final void clearPhysical() { + dirty = true; + for (int row = 0; row < height; row++) { + for (int col = 0; col < width; col++) { + physical[col][row].reset(); + } + } + } + /** * Draw a box with a border and empty background. *