1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Added horizontal scroll for resized windows

Signed-off-by: James Booth <boothj5@gmail.com>
This commit is contained in:
Immae 2014-06-19 15:48:02 +02:00 committed by James Booth
parent d668d15081
commit 5e841febd0
3 changed files with 36 additions and 3 deletions

View File

@ -2048,10 +2048,14 @@ _win_handle_page(const wint_t * const ch)
{ {
ProfWin *current = wins_get_current(); ProfWin *current = wins_get_current();
int rows = getmaxy(stdscr); int rows = getmaxy(stdscr);
int cols = getmaxx(stdscr);
int x = getmaxx(current->win);
int y = getcury(current->win); int y = getcury(current->win);
int page_space = rows - 4; int page_space = rows - 4;
int horiz_page_space = cols;
int *page_start = &(current->y_pos); int *page_start = &(current->y_pos);
int *horiz_page_start = &(current->x_pos);
if (prefs_get_boolean(PREF_MOUSE)) { if (prefs_get_boolean(PREF_MOUSE)) {
MEVENT mouse_event; MEVENT mouse_event;
@ -2090,8 +2094,34 @@ _win_handle_page(const wint_t * const ch)
} }
} }
// ctrl+P
if (*ch == 16) {
*horiz_page_start -= horiz_page_space;
// went past beginning, show first page
if (*horiz_page_start < 0)
*horiz_page_start = 0;
current->paged = 1;
win_update_virtual(current);
// ctrl+N
} else if (*ch == 14) {
*horiz_page_start += horiz_page_space;
// only got half a screen, show full screen
if ((x - (*horiz_page_start)) < horiz_page_space)
*horiz_page_start = x - horiz_page_space;
// went past end, show full screen
else if (*horiz_page_start >= x)
*horiz_page_start = x - horiz_page_space;
current->paged = 1;
win_update_virtual(current);
// page up // page up
if (*ch == KEY_PPAGE) { } else if (*ch == KEY_PPAGE) {
*page_start -= page_space; *page_start -= page_space;
// went past beginning, show first page // went past beginning, show first page
@ -2118,7 +2148,7 @@ _win_handle_page(const wint_t * const ch)
} }
// switch off page if last line visible // switch off page if last line visible
if ((y-1) - *page_start == page_space) { if ((y-1) - *page_start == page_space && *horiz_page_start == 0) {
current->paged = 0; current->paged = 0;
} }
} }

View File

@ -48,6 +48,7 @@ win_create(const char * const title, int cols, win_type_t type)
new_win->win = newpad(PAD_SIZE, cols); new_win->win = newpad(PAD_SIZE, cols);
wbkgd(new_win->win, COLOUR_TEXT); wbkgd(new_win->win, COLOUR_TEXT);
new_win->y_pos = 0; new_win->y_pos = 0;
new_win->x_pos = 0;
new_win->paged = 0; new_win->paged = 0;
new_win->unread = 0; new_win->unread = 0;
new_win->history_shown = 0; new_win->history_shown = 0;
@ -118,7 +119,7 @@ win_update_virtual(ProfWin *window)
{ {
int rows, cols; int rows, cols;
getmaxyx(stdscr, rows, cols); getmaxyx(stdscr, rows, cols);
pnoutrefresh(window->win, window->y_pos, 0, 1, 0, rows-3, cols-1); pnoutrefresh(window->win, window->y_pos, window->x_pos, 1, 0, rows-3, cols-1);
} }
void void
@ -131,6 +132,7 @@ win_move_to_end(ProfWin *window)
int size = rows - 3; int size = rows - 3;
window->y_pos = y - (size - 1); window->y_pos = y - (size - 1);
window->x_pos = 0;
if (window->y_pos < 0) { if (window->y_pos < 0) {
window->y_pos = 0; window->y_pos = 0;
} }

View File

@ -51,6 +51,7 @@ typedef struct prof_win_t {
win_type_t type; win_type_t type;
gboolean is_otr; gboolean is_otr;
gboolean is_trusted; gboolean is_trusted;
int x_pos;
int y_pos; int y_pos;
int paged; int paged;
int unread; int unread;