@@ -1850,17 +1850,43 @@ void UITextInput::onKeyDown(PolyKEY key, wchar_t charCode) {
18501850 }
18511851
18521852 if (key == KEY_HOME) {
1853- if (multiLine) {
1854- scrollContainer->setScrollValue (0 , 0 );
1855-
1853+ if (actualCaretPosition < lines[actualLineOffset].text .length () || lineOffset + 1 < lines.size ()) {
1854+ if (input->getKeyState (KEY_LSHIFT) || input->getKeyState (KEY_RSHIFT)) {
1855+ // Holding down shift allows you to select with the arrow keys.
1856+ if (hasSelection) {
1857+ setSelection (actualLineOffset, selectionLine, actualCaretPosition, 0 );
1858+ } else {
1859+ setSelection (actualLineOffset, actualLineOffset, actualCaretPosition, 0 );
1860+ }
1861+ } else {
1862+ clearSelection ();
1863+
1864+ int newLineEnd = actualLineOffset;
1865+ actualCaretPosition = 0 ;
1866+ actualLineOffset = newLineEnd;
1867+ }
1868+ updateCaretPosition ();
18561869 }
18571870 return ;
18581871 }
18591872
18601873 if (key == KEY_END) {
1861- if (multiLine) {
1862- scrollContainer->setScrollValue (0 , 1 );
1863-
1874+ if (actualCaretPosition < lines[actualLineOffset].text .length () || lineOffset + 1 < lines.size ()) {
1875+ if (input->getKeyState (KEY_LSHIFT) || input->getKeyState (KEY_RSHIFT)) {
1876+ // Holding down shift allows you to select with the arrow keys.
1877+ if (hasSelection) {
1878+ setSelection (actualLineOffset, selectionLine, actualCaretPosition, lines[selectionLine].text .length ());
1879+ } else {
1880+ setSelection (actualLineOffset, actualLineOffset, actualCaretPosition, lines[actualLineOffset].text .length ());
1881+ }
1882+ } else {
1883+ clearSelection ();
1884+
1885+ int newLineEnd = actualLineOffset;
1886+ actualCaretPosition = lines[actualLineOffset].text .length ();
1887+ actualLineOffset = newLineEnd;
1888+ }
1889+ updateCaretPosition ();
18641890 }
18651891 return ;
18661892 }
0 commit comments