Просмотр исходного кода

Home and End button don't scroll the Texteditor up and down, but let the cursor jump to the front / end of the line. (works with selection too)

Joachim Meyer 11 лет назад
Родитель
Сommit
17b8fc8a1e

+ 2 - 2
Core/Contents/Include/PolyInputKeys.h

@@ -232,9 +232,9 @@ namespace Polycode {
 		KEY_LEFT		= 276,
 		KEY_INSERT		= 277,
 		KEY_HOME		= 278,
-		KEY_END		= 279,
+		KEY_END			= 279,
 		KEY_PAGEUP		= 280,
-		KEY_PAGEDOWN		= 281,
+		KEY_PAGEDOWN	= 281,
 		
 		/* Function keys */
 		KEY_F1			= 282,

+ 32 - 6
Modules/Contents/UI/Source/PolyUITextInput.cpp

@@ -1850,17 +1850,43 @@ void UITextInput::onKeyDown(PolyKEY key, wchar_t charCode) {
 	}
 
 	if(key == KEY_HOME) {
-		if(multiLine) {
-			scrollContainer->setScrollValue(0, 0);
-		
+		if (actualCaretPosition < lines[actualLineOffset].text.length() || lineOffset + 1 < lines.size()) {
+			if (input->getKeyState(KEY_LSHIFT) || input->getKeyState(KEY_RSHIFT)) {
+				// Holding down shift allows you to select with the arrow keys.
+				if (hasSelection) {
+					setSelection(actualLineOffset, selectionLine, actualCaretPosition, 0);
+				} else {
+					setSelection(actualLineOffset, actualLineOffset, actualCaretPosition, 0);
+				}
+			} else {
+				clearSelection();
+
+				int newLineEnd = actualLineOffset;
+				actualCaretPosition = 0;
+				actualLineOffset = newLineEnd;
+			}
+			updateCaretPosition();
 		}
 		return;
 	}
 	
 	if(key == KEY_END) {
-		if(multiLine) {
-			scrollContainer->setScrollValue(0, 1);
-		
+		if (actualCaretPosition < lines[actualLineOffset].text.length() || lineOffset + 1 < lines.size()) {
+			if (input->getKeyState(KEY_LSHIFT) || input->getKeyState(KEY_RSHIFT)) {
+				// Holding down shift allows you to select with the arrow keys.
+				if (hasSelection) {
+					setSelection(actualLineOffset, selectionLine, actualCaretPosition, lines[selectionLine].text.length());
+				} else {
+					setSelection(actualLineOffset, actualLineOffset, actualCaretPosition, lines[actualLineOffset].text.length());
+				}
+			} else {
+				clearSelection();
+
+				int newLineEnd = actualLineOffset;
+				actualCaretPosition = lines[actualLineOffset].text.length();
+				actualLineOffset = newLineEnd;
+			}
+			updateCaretPosition();
 		}
 		return;
 	}