-
-
-
-extern uint8_t draw_scroll_hint(struct Frame * frame, uint16_t pos,
- uint32_t dist, char dir)
-{
- /* Decide on alignment (vertical/horizontal?), thereby scroll hint text. */
- char * more = "more";
- char * unit_cols = "columns";
- char * unit_rows = "lines";
- uint16_t dsc_space = frame->size.x;
- char * unit = unit_rows;
- if ('<' == dir || '>' == dir)
- {
- dsc_space = frame->size.y;
- unit = unit_cols;
- }
- char * scrolldsc = malloc((4 * sizeof(char)) + strlen(more) + strlen(unit)
- + 10); /* 10 = uint32 max strlen */
- if (NULL == scrolldsc)
- {
- return 1;
- }
- sprintf(scrolldsc, " %d %s %s ", dist, more, unit);
-
- /* Decide on offset of the description text inside the scroll hint line. */
- char offset = 1, q;
- if (dsc_space > strlen(scrolldsc) + 1)
- {
- offset = (dsc_space - strlen(scrolldsc)) / 2;
- }
-
- /* Draw scroll hint line as dir symbols bracketing description text. */
- chtype symbol;
- for (q = 0; q < dsc_space; q++)
- {
- if (q >= offset && q < strlen(scrolldsc) + offset)
- {
- symbol = scrolldsc[q - offset] | A_REVERSE;
- }
- else
- {
- symbol = dir | A_REVERSE;
- }
- if ('<' == dir || '>' == dir)
- {
- mvwaddch(frame->curses_win, q, pos, symbol);
- }
- else
- {
- mvwaddch(frame->curses_win, pos, q, symbol);
- }
- }
-
- free(scrolldsc);
- return 0;
-}