Я пишу приложение с использованием ncurses и хочу использовать в нем символы рисования прямоугольников, в частности u/2550 и u/2551 (на данный момент). У меня есть настройка циклов, чтобы рисовать полосы с двух сторон терминала, исходя из размера экрана, который я определяю в другом месте.
По какой-то причине, когда дело доходит до рисования любых символов Юникода по горизонтали (здесь, в нижней части экрана, но это происходит в любой строке), он перейдет от печати символов в порядке к печати мусора «P». Это немного сложно объяснить, поэтому у меня есть несколько рисунков, показывающих, что происходит, когда я рисую 6 символов, а затем 7 или более символов.
Часть кода, отвечающая за отрисовку этих символов, как таковая, обратите внимание, что последний цикл for — это то, что рисует эти символы, и итератор должен идти дальше, чем просто 7, но он делает это здесь и где-либо еще.
void drawBorder(){ //draw the border graphics
attron(COLOR_PAIR(3));
for(int i = 1; i < screenSizeY - 1; i++){ //draw left side
mvaddwstr(i, 0, L"║");
}
for(int i = 1; i < screenSizeY - 1; i++){ //draw right side
mvaddwstr(i, screenSizeX - 1, L"\u2551");
}
for(int i = 0; i < 7; i++){ //draw bottom
mvaddwstr(screenSizeY - 1, i, L"\u2550");
}
attroff(COLOR_PAIR(3));
}
Я связываюсь с пакетом ncursew и у меня правильно настроена локаль. Другие символы, нарисованные вертикальными линиями, работают нормально, но не здесь. Я использую C++, скомпилированный с помощью g++, работающий в Linux в сеансе терминала Alacritty.
Это не имеет ничего общего с функциями рисования прямоугольников или специфическими возможностями терминала, все широкие символы отлично поддерживаются терминалом и работают в других частях терминала. Это произойдет в зависимости от того, сколько из них я нарисую подряд, а также для других символов коробки.