+ // Selection.
+ if (inSelection) {
+ selectionColumn1 = leftColumn + mouse.getX();
+ selectionLine1 = topLine + mouse.getY();
+ } else if (mouse.isShift() || mouse.isCtrl()) {
+ inSelection = true;
+ selectionColumn0 = leftColumn + mouse.getX();
+ selectionLine0 = topLine + mouse.getY();
+ selectionColumn1 = selectionColumn0;
+ selectionLine1 = selectionLine0;
+ selectionRectangle = mouse.isAlt() | mouse.isCtrl();
+ }
+
+ // Set the row and column
+ int newLine = topLine + mouse.getY();
+ int newX = leftColumn + mouse.getX();
+ if (newLine > document.getLineCount() - 1) {
+ // Go to the end
+ document.setLineNumber(document.getLineCount() - 1);
+ document.end();
+ if (newLine > document.getLineCount() - 1) {
+ setCursorY(document.getLineCount() - 1 - topLine);
+ } else {
+ setCursorY(mouse.getY());
+ }
+ alignCursor();
+ if (inSelection) {
+ selectionColumn1 = document.getCursor();
+ selectionLine1 = document.getLineNumber();
+ selectionRectangle = mouse.isCtrl();
+ }
+ return;
+ }
+
+ document.setLineNumber(newLine);
+ setCursorY(mouse.getY());
+ if (newX >= document.getCurrentLine().getDisplayLength()) {
+ document.end();
+ alignCursor();
+ } else {
+ document.setCursor(newX);
+ setCursorX(mouse.getX());
+ }
+ if (inSelection) {
+ selectionColumn1 = document.getCursor();
+ selectionLine1 = document.getLineNumber();
+ selectionRectangle = mouse.isCtrl();
+ }
+ return;
+ } else {
+ inSelection = false;
+ }
+
+ // Pass to children
+ super.onMouseDown(mouse);
+ }
+
+ /**
+ * Handle mouse motion events.
+ *
+ * @param mouse mouse motion event
+ */
+ @Override
+ public void onMouseMotion(final TMouseEvent mouse) {
+
+ if (mouse.isMouse1()) {
+ // Selection.
+ if (inSelection) {
+ selectionColumn1 = leftColumn + mouse.getX();
+ selectionLine1 = topLine + mouse.getY();
+ } else if (mouse.isShift() || mouse.isCtrl()) {
+ inSelection = true;
+ selectionColumn0 = leftColumn + mouse.getX();
+ selectionLine0 = topLine + mouse.getY();
+ selectionColumn1 = selectionColumn0;
+ selectionLine1 = selectionLine0;
+ selectionRectangle = mouse.isAlt() | mouse.isCtrl();
+ }
+