X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FSwingScreen.java;h=a70c8824b3cc82c5198a42d51342e0a160da67d9;hb=0ab16dbbdccca171ddb03eed96fb011192659e79;hp=3d0729e4feecd719b78431d93e1e54da46c9e30a;hpb=55d2b2c2b29ce51f4f910448a115073371deeae8;p=nikiroo-utils.git diff --git a/src/jexer/io/SwingScreen.java b/src/jexer/io/SwingScreen.java index 3d0729e..a70c882 100644 --- a/src/jexer/io/SwingScreen.java +++ b/src/jexer/io/SwingScreen.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2016 Kevin Lamonte + * Copyright (C) 2017 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -59,7 +59,7 @@ public final class SwingScreen extends Screen { /** * If true, use triple buffering thread. */ - private static final boolean tripleBuffer = true; + private static boolean tripleBuffer = true; /** * Cursor style to draw. @@ -325,6 +325,14 @@ public final class SwingScreen extends Screen { cursorStyle = CursorStyle.BLOCK; } + if (System.getProperty("jexer.Swing.tripleBuffer") != null) { + if (System.getProperty("jexer.Swing.tripleBuffer"). + equals("false")) { + + SwingScreen.tripleBuffer = false; + } + } + setTitle("Jexer Application"); setBackground(Color.black); @@ -452,11 +460,19 @@ public final class SwingScreen extends Screen { } // Generate glyph and draw it. - - image = new BufferedImage(textWidth, textHeight, - BufferedImage.TYPE_INT_ARGB); - Graphics2D gr2 = image.createGraphics(); - gr2.setFont(getFont()); + Graphics2D gr2 = null; + int gr2x = xPixel; + int gr2y = yPixel; + if (tripleBuffer) { + image = new BufferedImage(textWidth, textHeight, + BufferedImage.TYPE_INT_ARGB); + gr2 = image.createGraphics(); + gr2.setFont(getFont()); + gr2x = 0; + gr2y = 0; + } else { + gr2 = (Graphics2D) gr; + } Cell cellColor = new Cell(); cellColor.setTo(cell); @@ -469,7 +485,7 @@ public final class SwingScreen extends Screen { // Draw the background rectangle, then the foreground character. gr2.setColor(attrToBackgroundColor(cellColor)); - gr2.fillRect(0, 0, textWidth, textHeight); + gr2.fillRect(gr2x, gr2y, textWidth, textHeight); // Handle blink and underline if (!cell.isBlink() @@ -478,25 +494,30 @@ public final class SwingScreen extends Screen { gr2.setColor(attrToForegroundColor(cellColor)); char [] chars = new char[1]; chars[0] = cell.getChar(); - gr2.drawChars(chars, 0, 1, 0 + textAdjustX, - 0 + textHeight - maxDescent + textAdjustY); + gr2.drawChars(chars, 0, 1, gr2x + textAdjustX, + gr2y + textHeight - maxDescent + textAdjustY); if (cell.isUnderline()) { - gr2.fillRect(0, 0 + textHeight - 2, textWidth, 2); + gr2.fillRect(gr2x, gr2y + textHeight - 2, textWidth, 2); } } - gr2.dispose(); - // We need a new key that will not be mutated by invertCell(). - Cell key = new Cell(); - key.setTo(cell); - if (cell.isBlink() && !cursorBlinkVisible) { - glyphCacheBlink.put(key, image); - } else { - glyphCache.put(key, image); + if (tripleBuffer) { + gr2.dispose(); + + // We need a new key that will not be mutated by + // invertCell(). + Cell key = new Cell(); + key.setTo(cell); + if (cell.isBlink() && !cursorBlinkVisible) { + glyphCacheBlink.put(key, image); + } else { + glyphCache.put(key, image); + } + + gr.drawImage(image, xPixel, yPixel, this); } - gr.drawImage(image, xPixel, yPixel, this); } /**