X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FSwingScreen.java;h=cdca714bb1cff6765144cc381c5bfef20ae6c16c;hb=3649b9210ea425f398ba8c24f9509669cf72aa96;hp=2c31d765ac1f15f7e8b4fa93229e371b3ff7f695;hpb=55b4f29bc5389d9ce185efa9f6e14c5f3882ac70;p=nikiroo-utils.git diff --git a/src/jexer/io/SwingScreen.java b/src/jexer/io/SwingScreen.java index 2c31d76..cdca714 100644 --- a/src/jexer/io/SwingScreen.java +++ b/src/jexer/io/SwingScreen.java @@ -1,4 +1,4 @@ -/** +/* * Jexer - Java Text User Interface * * License: LGPLv3 or later @@ -168,6 +168,16 @@ public final class SwingScreen extends Screen { */ private int maxDescent = 0; + /** + * System-dependent Y adjustment for text in the character cell. + */ + private int textAdjustY = 0; + + /** + * System-dependent X adjustment for text in the character cell. + */ + private int textAdjustX = 0; + /** * Top pixel absolute location. */ @@ -329,7 +339,7 @@ public final class SwingScreen extends Screen { getFontDimensions(); // Setup double-buffering - if (screen.doubleBuffer) { + if (SwingScreen.doubleBuffer) { setIgnoreRepaint(true); createBufferStrategy(2); bufferStrategy = getBufferStrategy(); @@ -350,6 +360,11 @@ public final class SwingScreen extends Screen { // This also produces the same number, but works better for ugly // monospace. textHeight = fm.getMaxAscent() + maxDescent - leading; + + if (System.getProperty("os.name").startsWith("Windows")) { + textAdjustY = -1; + textAdjustX = 0; + } } /** @@ -477,8 +492,10 @@ public final class SwingScreen extends Screen { gr.setColor(attrToForegroundColor(lCellColor)); char [] chars = new char[1]; chars[0] = lCell.getChar(); - gr.drawChars(chars, 0, 1, xPixel, - yPixel + textHeight - maxDescent); + gr.drawChars(chars, 0, 1, xPixel + textAdjustX, + yPixel + textHeight - maxDescent + + textAdjustY); + if (lCell.isUnderline()) { gr.fillRect(xPixel, yPixel + textHeight - 2, textWidth, 2); @@ -502,6 +519,8 @@ public final class SwingScreen extends Screen { Cell lCell = screen.logical[cursorX][cursorY]; gr.setColor(attrToForegroundColor(lCell)); switch (cursorStyle) { + default: + // Fall through... case UNDERLINE: gr.fillRect(xPixel, yPixel + textHeight - 2, textWidth, 2); @@ -554,7 +573,7 @@ public final class SwingScreen extends Screen { SwingScreen.this.frame.resizeToScreen(); SwingScreen.this.frame.setVisible(true); } - } ); + }); } catch (Exception e) { e.printStackTrace(); } @@ -582,7 +601,7 @@ public final class SwingScreen extends Screen { if (reallyCleared) { // Really refreshed, do it all - if (doubleBuffer) { + if (SwingScreen.doubleBuffer) { Graphics gr = frame.bufferStrategy.getDrawGraphics(); frame.paint(gr); gr.dispose(); @@ -649,7 +668,7 @@ public final class SwingScreen extends Screen { // Repaint the desired area // System.err.printf("REPAINT X %d %d Y %d %d\n", xMin, xMax, // yMin, yMax); - if (doubleBuffer) { + if (SwingScreen.doubleBuffer) { Graphics gr = frame.bufferStrategy.getDrawGraphics(); Rectangle bounds = new Rectangle(xMin, yMin, xMax - xMin, yMax - yMin);