From c3f3b3ab7fb9ddccdb69af822caee944229a9bd4 Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Mon, 8 Oct 2007 21:12:57 +0000 Subject: [PATCH] bug 205679: [terminal] Before the terminal is connected, the cursor and scrollbar are wrong https://bugs.eclipse.org/bugs/show_bug.cgi?id=205679 --- .../emulator/VT100EmulatorBackend.java | 28 ++++++++++++++++--- .../terminal/textcanvas/TextCanvas.java | 19 ++++++------- .../terminal/textcanvas/VirtualCanvas.java | 8 ++++-- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java index cda57c62c3a..144582c2723 100644 --- a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java +++ b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100EmulatorBackend.java @@ -78,14 +78,34 @@ public class VT100EmulatorBackend implements IVT100EmulatorBackend { if(lines==fLines && cols==fColumns) return; // nothing to do // cursor line from the bottom - int cl=fLines-getCursorLine(); + int cl=lines-(fLines-getCursorLine()); int cc=getCursorColumn(); - + int newLines=Math.max(lines,fTerminal.getHeight()); + // if the terminal has no history, then resize by + // setting the size to the new size + if(fTerminal.getHeight()==fLines) { + if(lines1) +// break; +// // is the line empty? +// if(segments[0].getText().replaceAll("[\000 ]+", "").length()==0) +// break; +// } + } else { + cl+=fLines-lines; + } + } fLines=lines; fColumns=cols; // make the terminal at least as high as we need lines - fTerminal.setDimensions(Math.max(fLines,fTerminal.getHeight()), fColumns); - setCursor(fLines-cl, cc); + fTerminal.setDimensions(newLines, fColumns); + setCursor(cl, cc); } } diff --git a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java index d9b4b5b30a8..97fd807f891 100644 --- a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java +++ b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java @@ -163,11 +163,13 @@ public class TextCanvas extends GridCanvas { } protected void onResize() { -// if(!isShowHScrollBar()) { - if(fResizeListener!=null) { - Rectangle bonds=getClientArea(); - int lines=bonds.height/getCellHeight(); - int columns=bonds.width/getCellWidth(); + if(fResizeListener!=null) { + Rectangle bonds=getClientArea(); + int lines=bonds.height/getCellHeight(); + int columns=bonds.width/getCellWidth(); + // when the view is minimised, its size is set to 0 + // we don't sent this to the terminal! + if(lines>0 && columns>0) { if(columns0 && columns>0 && (lines!=getRows()||columns!=getCols())) { - if(lines>0 && columns>0) { - fResizeListener.sizeChanged(lines, columns); - } + fResizeListener.sizeChanged(lines, columns); } -// } + } super.onResize(); calculateGrid(); } diff --git a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java index fdc38869149..eb0e8ccaff1 100644 --- a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java +++ b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/VirtualCanvas.java @@ -318,14 +318,18 @@ public abstract class VirtualCanvas extends Canvas { Point size= getSize(); Rectangle clientArea= getClientArea(); ScrollBar horizontal= getHorizontalBar(); - if(horizontal.isVisible()) { + // even if setVisible was called on the scrollbar, isVisible + // returns false if its parent is not visible. + if(!isVisible() || horizontal.isVisible()) { horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement()); int max= fVirtualBounds.width + (size.x - clientArea.width); horizontal.setMaximum(max); horizontal.setThumb(size.x > max ? max : size.x); } ScrollBar vertical= getVerticalBar(); - if(vertical.isVisible()) { + // even if setVisible was called on the scrollbar, isVisible + // returns false if its parent is not visible. + if(!isVisible() || vertical.isVisible()) { vertical.setPageIncrement(clientArea.height - vertical.getIncrement()); int max= fVirtualBounds.height + (size.y - clientArea.height); vertical.setMaximum(max);