import jexer.bits.Cell;
import jexer.bits.CellAttributes;
import jexer.bits.ColorTheme;
+import jexer.bits.StringUtils;
import jexer.event.TCommandEvent;
import jexer.event.TInputEvent;
import jexer.event.TKeypressEvent;
*/
private List<Runnable> invokeLaters = new LinkedList<Runnable>();
+ /**
+ * The last time the screen was resized.
+ */
+ private long screenResizeTime = 0;
+
/**
* WidgetEventHandler is the main event consumer loop. There are at most
* two such threads in existence: the primary for normal case and a
}
} // while (!application.quit)
- assert (dirty == true);
-
- // Flush the screen contents
+ // Flush the screen contents
if (debugThreads) {
System.err.printf("%d %s backend.flushScreen()\n",
System.currentTimeMillis(), Thread.currentThread());
if (event instanceof TResizeEvent) {
TResizeEvent resize = (TResizeEvent) event;
synchronized (getScreen()) {
- getScreen().setDimensions(resize.getWidth(),
- resize.getHeight());
+ if ((System.currentTimeMillis() - screenResizeTime >= 15)
+ || (resize.getWidth() < getScreen().getWidth())
+ || (resize.getHeight() < getScreen().getHeight())
+ ) {
+ getScreen().setDimensions(resize.getWidth(),
+ resize.getHeight());
+ screenResizeTime = System.currentTimeMillis();
+ }
desktopBottom = getScreen().getHeight() - 1;
mouseX = 0;
mouseY = 0;
menuMnemonicColor = theme.getColor("tmenu.mnemonic");
}
// Draw the menu title
- getScreen().hLineXY(x, 0, menu.getTitle().length() + 2, ' ',
+ getScreen().hLineXY(x, 0, StringUtils.width(menu.getTitle()) + 2, ' ',
menuColor);
getScreen().putStringXY(x + 1, 0, menu.getTitle(), menuColor);
// Draw the highlight character
// Reset the screen clipping so we can draw the next title.
getScreen().resetClipping();
}
- x += menu.getTitle().length() + 2;
+ x += StringUtils.width(menu.getTitle()) + 2;
}
for (TMenu menu: subMenus) {
for (TMenu menu: menus) {
if ((mouse.getAbsoluteX() >= menu.getTitleX())
&& (mouse.getAbsoluteX() < menu.getTitleX()
- + menu.getTitle().length() + 2)
+ + StringUtils.width(menu.getTitle()) + 2)
) {
menu.setActive(true);
activeMenu = menu;
for (TMenu menu: menus) {
if ((mouse.getAbsoluteX() >= menu.getTitleX())
&& (mouse.getAbsoluteX() < menu.getTitleX()
- + menu.getTitle().length() + 2)
+ + StringUtils.width(menu.getTitle()) + 2)
) {
menu.setActive(true);
activeMenu = menu;
for (TMenu menu: menus) {
menu.setX(x);
menu.setTitleX(x);
- x += menu.getTitle().length() + 2;
+ x += StringUtils.width(menu.getTitle()) + 2;
// Don't let the menu window exceed the screen width
int rightEdge = menu.getX() + menu.getWidth();