*/
package jexer.backend;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import jexer.bits.Cell;
/**
* The list of screens to use.
*/
- private List<Screen> screens = new LinkedList<Screen>();
+ private List<Screen> screens = new ArrayList<Screen>();
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
*/
public void setDimensions(final int width, final int height) {
for (Screen screen: screens) {
- screen.setDimensions(width, height);
+ // Do not blindly call setDimension() on every screen. Instead
+ // call it only on those screens that do not already have the
+ // requested dimension. With this very small check, we have the
+ // ability for ANY screen in the MultiBackend to resize ALL of
+ // the screens.
+ if ((screen.getWidth() != width)
+ || (screen.getHeight() != height)
+ ) {
+ screen.setDimensions(width, height);
+ } else {
+ // The screen that didn't change is probably the one that
+ // prompted the resize. Force it to repaint.
+ screen.clearPhysical();
+ }
}
}
public int getTextWidth() {
int textWidth = 16;
for (Screen screen: screens) {
- int newTextWidth = textWidth;
- if (screen instanceof MultiScreen) {
- newTextWidth = ((MultiScreen) screen).getTextWidth();
- } else if (screen instanceof ECMA48Terminal) {
- newTextWidth = ((ECMA48Terminal) screen).getTextWidth();
- } else if (screen instanceof SwingTerminal) {
- newTextWidth = ((SwingTerminal) screen).getTextWidth();
- }
+ int newTextWidth = screen.getTextWidth();
if (newTextWidth < textWidth) {
textWidth = newTextWidth;
}
public int getTextHeight() {
int textHeight = 20;
for (Screen screen: screens) {
- int newTextHeight = textHeight;
- if (screen instanceof MultiScreen) {
- newTextHeight = ((MultiScreen) screen).getTextHeight();
- } else if (screen instanceof ECMA48Terminal) {
- newTextHeight = ((ECMA48Terminal) screen).getTextHeight();
- } else if (screen instanceof SwingTerminal) {
- newTextHeight = ((SwingTerminal) screen).getTextHeight();
- }
+ int newTextHeight = screen.getTextHeight();
if (newTextHeight < textHeight) {
textHeight = newTextHeight;
}