Skip to content

Commit 427d250

Browse files
committed
UI: ctrl+shift left or right arrow
1 parent bcaf6c8 commit 427d250

File tree

4 files changed

+30
-7
lines changed

4 files changed

+30
-7
lines changed

src/common/keymap.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ extern "C" {
5151
#define SB_KEY_SF(x) (0xFFE0+(x))
5252

5353
// Control & Alt keys (parameter = capital character)
54-
#define SB_KEY_CTRL(c) (0xF1000000 + (c))
55-
#define SB_KEY_ALT(c) (0xF2000000 + (c))
56-
#define SB_KEY_CTRL_ALT(c) (0xF4000000 + (c))
57-
#define SB_KEY_SHIFT(c) (0xF8000000 + (c))
54+
#define SB_KEY_CTRL(c) (0xF1000000 + (c))
55+
#define SB_KEY_ALT(c) (0xF2000000 + (c))
56+
#define SB_KEY_CTRL_ALT(c) (0xF3000000 + (c))
57+
#define SB_KEY_SHIFT(c) (0xF4000000 + (c))
58+
#define SB_KEY_SHIFT_CTRL(c) (0xF5000000 + (c))
5859

5960
// keypad
6061
#define SB_KEY_KP_DIV 0xFFDA

src/platform/sdl/runtime.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,9 @@ void Runtime::handleKeyEvent(MAEvent &event) {
355355
if ((event.nativeKey & KMOD_CTRL) &&
356356
(event.nativeKey & KMOD_ALT)) {
357357
event.key = SB_KEY_CTRL_ALT(event.key);
358+
} else if ((event.nativeKey & KMOD_CTRL) &&
359+
(event.nativeKey & KMOD_SHIFT)) {
360+
event.key = SB_KEY_SHIFT_CTRL(event.key);
358361
} else if (event.nativeKey & KMOD_CTRL) {
359362
event.key = SB_KEY_CTRL(event.key);
360363
} else if (event.nativeKey & KMOD_ALT) {
@@ -461,7 +464,11 @@ void Runtime::pollEvents(bool blocking) {
461464
}
462465
if (maEvent == NULL &&
463466
((ev.key.keysym.sym >= SDLK_KP_1 && ev.key.keysym.sym <= SDLK_KP_9) ||
464-
(ev.key.keysym.mod & KMOD_CTRL) ||
467+
((ev.key.keysym.mod & KMOD_CTRL) &&
468+
ev.key.keysym.sym != SDLK_LSHIFT &&
469+
ev.key.keysym.sym != SDLK_RSHIFT &&
470+
ev.key.keysym.sym != SDLK_LCTRL &&
471+
ev.key.keysym.sym != SDLK_RCTRL) ||
465472
(ev.key.keysym.mod & KMOD_ALT))) {
466473
maEvent = new MAEvent();
467474
maEvent->type = EVENT_TYPE_KEY_PRESSED;

src/ui/textedit.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,12 @@ bool TextEditInput::edit(int key, int screenWidth, int charWidth) {
644644
case SB_KEY_ENTER:
645645
editEnter();
646646
break;
647+
case SB_KEY_SHIFT_CTRL(SB_KEY_LEFT):
648+
selectNavigate(true);
649+
break;
650+
case SB_KEY_SHIFT_CTRL(SB_KEY_RIGHT):
651+
selectNavigate(false);
652+
break;
647653
case -1:
648654
return false;
649655
break;
@@ -796,6 +802,14 @@ bool TextEditInput::selected(MAPoint2d pt, int scrollX, int scrollY, bool &redra
796802
return focus;
797803
}
798804

805+
void TextEditInput::selectNavigate(bool up) {
806+
int start = _state.select_start == _state.select_end ? _state.cursor : _state.select_start;
807+
_state.select_start = _state.select_end = _state.cursor;
808+
stb_textedit_key(&_buf, &_state, up ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_WORDRIGHT);
809+
_state.select_start = start;
810+
_state.select_end = _state.cursor;
811+
}
812+
799813
char *TextEditInput::copy(bool cut) {
800814
int selectStart = MIN(_state.select_start, _state.select_end);
801815
int selectEnd = MAX(_state.select_start, _state.select_end);

src/ui/textedit.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ struct TextEditInput : public FormEditInput {
110110
char *getWordBeforeCursor();
111111
bool replaceNext(const char *text);
112112
int getCompletions(StringList *list, int max);
113+
void selectNavigate(bool up);
113114

114115
protected:
115116
enum SyntaxState {
@@ -233,8 +234,8 @@ struct TextEditHelpWidget : public TextEditInput {
233234
#define STB_TEXTEDIT_K_PGUP SB_KEY_PGUP
234235
#define STB_TEXTEDIT_K_PGDOWN SB_KEY_PGDN
235236
#define STB_TEXTEDIT_NEWLINE '\n'
236-
#define STB_TEXTEDIT_K_CONTROL 0xF1000000
237-
#define STB_TEXTEDIT_K_SHIFT 0xF8000000
237+
#define STB_TEXTEDIT_K_CONTROL SB_KEY_CTRL(0)
238+
#define STB_TEXTEDIT_K_SHIFT SB_KEY_SHIFT(0)
238239
#define STB_TEXTEDIT_GETWIDTH_NEWLINE 0.0f
239240
#define STB_TEXTEDIT_KEYTOTEXT(k) k
240241
#define STB_TEXTEDIT_STRINGLEN(o) o->_len

0 commit comments

Comments
 (0)