В матрице CDur NCurses можно ли покрасить отдельную ячейку?

Я могу покрасить ячейки, указав формат строки или формат столбца, но при этом применяется раскраска / форматирование ко всей строке или столбцу. Я хотел бы установить цвет каждой ячейки на основе некоторых критериев. Когда я включаю... цветные метки в setCDKMatrixCell() Вызов этих символов устанавливается на текст ячейки, не используемый для форматирования ячейки.

Есть ли другой способ? Или какие-нибудь идеи о том, как изменить drawCDKMatrixCell, чтобы сделать это?

void drawCDKMatrixCell() {
...

if (matrix->dominant == ROW) {
    highlight = matrix->rowtitle[absolute_row][0] & A_ATTRIBUTES;
}
else if (matrix->dominant == COL) {
    highlight = matrix->coltitle[col][0] & A_ATTRIBUTES;
}

/* Draw in the cell info. */
for (x = 1; x <= matrix->colwidths[col]; x++) {
        chtype ch = (((x <= infolen) && !isHiddenDisplayType(disptype))
                     ? (CharOf(MATRIX_INFO(matrix, vrow, vcol)[x - 1]) | highlight)
                     : matrix->filler);


    (void) mvwaddch(cell, 1, x, ch | highlight);
}
...

1 ответ

Клетки нарисованы с использованием закрытой функции

static void drawCDKMatrixCell (CDKMATRIX *matrix,
                               int row,
                               int col,
                               int vrow,
                               int vcol,
                               chtype attr,
                               boolean Box)

который просто использует mvwaddch для каждого символа в ячейке. Информация для этого задается с помощью

int setCDKMatrixCell (CDKMATRIX *matrix, int row, int col, const char *value)

и хранится в матрице как char (не chtype). Если drawCDKMatrixCell функции были изменены, скажем, использовать char2Chtype чтобы построить данные, то вы могли бы делать то, что вы просите.

Другие вопросы по тегам