+ List<DisplayLine> preceedingBlankLines = new ArrayList<DisplayLine>();
+ int visibleTop = visibleBottom - visibleHeight;
+ if (visibleTop < 0) {
+ for (int i = visibleTop; i < 0; i++) {
+ preceedingBlankLines.add(emulator.getBlankDisplayLine());
+ }
+ visibleTop = 0;
+ }
+ assert (visibleTop >= 0);
+
+ List<DisplayLine> displayLines = new ArrayList<DisplayLine>();
+ displayLines.addAll(scrollback);
+ displayLines.addAll(display);
+
+ List<DisplayLine> visibleLines = new ArrayList<DisplayLine>();
+ visibleLines.addAll(preceedingBlankLines);
+ visibleLines.addAll(displayLines.subList(visibleTop,
+ visibleBottom));
+
+ visibleHeight -= visibleLines.size();
+ assert (visibleHeight >= 0);
+
+ // Now draw the emulator screen
+ int row = 1;
+ for (DisplayLine line: visibleLines) {
+ int widthMax = width;
+ if (line.isDoubleWidth()) {
+ widthMax /= 2;
+ }
+ if (widthMax > getWidth() - 2) {
+ widthMax = getWidth() - 2;
+ }
+ for (int i = 0; i < widthMax; i++) {
+ Cell ch = line.charAt(i);