+ // ------------------------------------------------------------------------
+ // TEditorWidget ----------------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Align visible area with document current line.
+ *
+ * @param topLineIsTop if true, make the top visible line the document
+ * current line if it was off-screen. If false, make the bottom visible
+ * line the document current line.
+ */
+ private void alignTopLine(final boolean topLineIsTop) {
+ int line = document.getLineNumber();
+
+ if ((line < topLine) || (line > topLine + getHeight() - 1)) {
+ // Need to move topLine to bring document back into view.
+ if (topLineIsTop) {
+ topLine = line - (getHeight() - 1);
+ if (topLine < 0) {
+ topLine = 0;
+ }
+ assert (topLine >= 0);
+ } else {
+ topLine = line;
+ assert (topLine >= 0);
+ }
+ }
+
+ /*
+ System.err.println("line " + line + " topLine " + topLine);
+ */
+
+ // Document is in view, let's set cursorY
+ assert (line >= topLine);
+ setCursorY(line - topLine);
+ alignCursor();
+ }
+
+ /**
+ * Align document current line with visible area.
+ *
+ * @param topLineIsTop if true, make the top visible line the document
+ * current line if it was off-screen. If false, make the bottom visible
+ * line the document current line.
+ */
+ private void alignDocument(final boolean topLineIsTop) {
+ int line = document.getLineNumber();
+ int cursor = document.getCursor();
+
+ if ((line < topLine) || (line > topLine + getHeight() - 1)) {
+ // Need to move document to ensure it fits view.
+ if (topLineIsTop) {
+ document.setLineNumber(topLine);
+ } else {
+ document.setLineNumber(topLine + (getHeight() - 1));
+ }
+ if (cursor < document.getCurrentLine().getDisplayLength()) {
+ document.setCursor(cursor);
+ }
+ }
+
+ /*
+ System.err.println("getLineNumber() " + document.getLineNumber() +
+ " topLine " + topLine);
+ */
+
+ // Document is in view, let's set cursorY
+ setCursorY(document.getLineNumber() - topLine);
+ alignCursor();
+ }
+
+ /**
+ * Align visible cursor with document cursor.
+ */
+ private void alignCursor() {
+ int width = getWidth();
+
+ int desiredX = document.getCursor() - leftColumn;
+ if (desiredX < 0) {
+ // We need to push the screen to the left.
+ leftColumn = document.getCursor();
+ } else if (desiredX > width - 1) {
+ // We need to push the screen to the right.
+ leftColumn = document.getCursor() - (width - 1);
+ }
+
+ /*
+ System.err.println("document cursor " + document.getCursor() +
+ " leftColumn " + leftColumn);
+ */
+
+
+ setCursorX(document.getCursor() - leftColumn);
+ }
+