Полноэкранный текстовый редактор SFML - PullRequest
1 голос
/ 15 декабря 2010

Я пытаюсь создать полноэкранный минималистичный текстовый редактор (под минималистическим я подразумеваю наличие только мигающей каретки, черного фона, управления клавиатурой с помощью стрелок для перемещения по тексту, удаления клавиши Backspace и т. Д. И все). Я создал RenderWindow, у меня есть глобальный строковый буфер для текста, и я использую класс String2D для визуализации его на экране (я разрабатываю его в C # с использованием VC2010 и SFML .NET package).

По сути, я занимаюсь отловом нажатий клавиш, проверкой их нахождения букв, цифр или любых других письменных символов, полезных при написании, и добавлением или вычитанием их из строкового буфера, который постоянно отображается на экране с помощью отрисовки RenderWindow.

Теперь проблема в том, как мне реализовать правильное движение каретки, управляемое стрелками. Если кто-то хотел бы перемещаться по всему экрану текста, используя стрелки вниз / вверх / влево / вправо. Для перемещения влево / вправо в одной строке текста легко реализовать счетчик, чтобы узнать, после какого символа я должен повторить каретку. Тем не менее, в конечном итоге мне придется разбивать строки в тех местах, где заканчивается экран, и что тогда, как я могу правильно «обнаружить», где визуализировать каретку, если кто-то хочет пойти вниз или вверх, и как узнать, какая позиция в строке, потому что кто-то может добавить или удалить часть текста впоследствии. Или, может быть, мой подход совершенно не так? Пожалуйста, сообщите.

1 Ответ

2 голосов
/ 15 декабря 2010

Сохраните дополнительный список Line объектов, которые содержат индексы, в ваш основной строковый буфер. Каждый раз, когда новая строка добавляется в буфер, обновляйте текущий объект Line и добавляйте новый для новой строки.

Чтобы переместить каретку, просто найдите текущую строку и переместите ее вверх или вниз по необходимости.

Другой подход может заключаться в том, чтобы хранить каждую строку в отдельной строке, но это добавляет некоторую сложность при выполнении операций, которые охватывают строки.

...