X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FScreen.java;h=81dabd246a8f607a4c87994c70a65880482eda0a;hb=87a17f3ca4b2602c396afdbb13cccb4c1e7cbd38;hp=eab9650d14aac19735f732b78036e3fcf7d28d2d;hpb=fca67db090dc7e6476b98b800ce225c2bf60425c;p=fanfix.git diff --git a/src/jexer/io/Screen.java b/src/jexer/io/Screen.java index eab9650..81dabd2 100644 --- a/src/jexer/io/Screen.java +++ b/src/jexer/io/Screen.java @@ -215,8 +215,11 @@ public abstract class Screen { * @return attributes at (x, y) */ public final CellAttributes getAttrXY(final int x, final int y) { + CellAttributes attr = new CellAttributes(); - attr.setTo(logical[x][y]); + if ((x >= 0) && (x < width) && (y >= 0) && (y < height)) { + attr.setTo(logical[x][y]); + } return attr; } @@ -241,8 +244,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; @@ -278,6 +281,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); @@ -346,6 +350,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) @@ -396,6 +401,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); @@ -447,7 +453,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++) { @@ -492,7 +498,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); } @@ -502,7 +508,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); } @@ -522,7 +528,7 @@ public abstract class Screen { * * @return current screen height */ - public final int getHeight() { + public final synchronized int getHeight() { return this.height; } @@ -531,7 +537,7 @@ public abstract class Screen { * * @return current screen width */ - public final int getWidth() { + public final synchronized int getWidth() { return this.width; } @@ -552,7 +558,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++) { @@ -727,7 +733,7 @@ public abstract class Screen { * Subclasses must provide an implementation to push the logical screen * to the physical device. */ - abstract public void flushPhysical(); + public abstract void flushPhysical(); /** * Put the cursor at (x,y). @@ -736,8 +742,7 @@ public abstract class Screen { * @param x column coordinate to put the cursor on * @param y row coordinate to put the cursor on */ - public final void putCursor(final boolean visible, - final int x, final int y) { + public void putCursor(final boolean visible, final int x, final int y) { cursorVisible = visible; cursorX = x;