/* this scrolls the text so that cursor is on the screen */ void edit_scroll_screen_over_cursor (WEdit * edit) { int p; int outby; int b_extreme, t_extreme, l_extreme, r_extreme; if (edit->num_widget_lines <= 0 || edit->num_widget_columns <= 0) return; r_extreme = EDIT_RIGHT_EXTREME; l_extreme = EDIT_LEFT_EXTREME; b_extreme = EDIT_BOTTOM_EXTREME; t_extreme = EDIT_TOP_EXTREME; if (edit->found_len) { b_extreme = max (edit->num_widget_lines / 4, b_extreme); t_extreme = max (edit->num_widget_lines / 4, t_extreme); } if (b_extreme + t_extreme + 1 > edit->num_widget_lines) { int n; n = b_extreme + t_extreme; b_extreme = (b_extreme * (edit->num_widget_lines - 1)) / n; t_extreme = (t_extreme * (edit->num_widget_lines - 1)) / n; } if (l_extreme + r_extreme + 1 > edit->num_widget_columns) { int n; n = l_extreme + t_extreme; l_extreme = (l_extreme * (edit->num_widget_columns - 1)) / n; r_extreme = (r_extreme * (edit->num_widget_columns - 1)) / n; } p = edit_get_col (edit); edit_update_curs_row (edit); outby = p + edit->start_col - edit->num_widget_columns + 1 + (r_extreme + edit->found_len); if (outby > 0) edit_scroll_right (edit, outby); outby = l_extreme - p - edit->start_col; if (outby > 0) edit_scroll_left (edit, outby); p = edit->curs_row; outby = p - edit->num_widget_lines + 1 + b_extreme; if (outby > 0) edit_scroll_downward (edit, outby); outby = t_extreme - p; if (outby > 0) edit_scroll_upward (edit, outby); edit_update_curs_row (edit); }
/** this scrolls the text so that cursor is on the screen */ void edit_scroll_screen_over_cursor (WEdit * edit) { int p; int outby; int b_extreme, t_extreme, l_extreme, r_extreme; if (edit->widget.lines <= 0 || edit->widget.cols <= 0) return; edit->widget.cols -= EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width; edit->widget.lines -= EDIT_TEXT_VERTICAL_OFFSET; r_extreme = EDIT_RIGHT_EXTREME; l_extreme = EDIT_LEFT_EXTREME; b_extreme = EDIT_BOTTOM_EXTREME; t_extreme = EDIT_TOP_EXTREME; if (edit->found_len) { b_extreme = max (edit->widget.lines / 4, b_extreme); t_extreme = max (edit->widget.lines / 4, t_extreme); } if (b_extreme + t_extreme + 1 > edit->widget.lines) { int n; n = b_extreme + t_extreme; if (n == 0) n = 1; b_extreme = (b_extreme * (edit->widget.lines - 1)) / n; t_extreme = (t_extreme * (edit->widget.lines - 1)) / n; } if (l_extreme + r_extreme + 1 > edit->widget.cols) { int n; n = l_extreme + t_extreme; if (n == 0) n = 1; l_extreme = (l_extreme * (edit->widget.cols - 1)) / n; r_extreme = (r_extreme * (edit->widget.cols - 1)) / n; } p = edit_get_col (edit) + edit->over_col; edit_update_curs_row (edit); outby = p + edit->start_col - edit->widget.cols + 1 + (r_extreme + edit->found_len); if (outby > 0) edit_scroll_right (edit, outby); outby = l_extreme - p - edit->start_col; if (outby > 0) edit_scroll_left (edit, outby); p = edit->curs_row; outby = p - edit->widget.lines + 1 + b_extreme; if (outby > 0) edit_scroll_downward (edit, outby); outby = t_extreme - p; if (outby > 0) edit_scroll_upward (edit, outby); edit_update_curs_row (edit); edit->widget.lines += EDIT_TEXT_VERTICAL_OFFSET; edit->widget.cols += EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width; }
/** this scrolls the text so that cursor is on the screen */ void edit_scroll_screen_over_cursor (WEdit * edit) { Widget *w = WIDGET (edit); long p; long outby; int b_extreme, t_extreme, l_extreme, r_extreme; if (w->lines <= 0 || w->cols <= 0) return; w->lines -= EDIT_TEXT_VERTICAL_OFFSET; w->cols -= EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width; if (!edit->fullscreen) { w->x++; w->cols -= 2; w->y++; w->lines -= 2; } r_extreme = EDIT_RIGHT_EXTREME; l_extreme = EDIT_LEFT_EXTREME; b_extreme = EDIT_BOTTOM_EXTREME; t_extreme = EDIT_TOP_EXTREME; if (edit->found_len != 0) { b_extreme = max (w->lines / 4, b_extreme); t_extreme = max (w->lines / 4, t_extreme); } if (b_extreme + t_extreme + 1 > w->lines) { int n; n = b_extreme + t_extreme; if (n == 0) n = 1; b_extreme = (b_extreme * (w->lines - 1)) / n; t_extreme = (t_extreme * (w->lines - 1)) / n; } if (l_extreme + r_extreme + 1 > w->cols) { int n; n = l_extreme + t_extreme; if (n == 0) n = 1; l_extreme = (l_extreme * (w->cols - 1)) / n; r_extreme = (r_extreme * (w->cols - 1)) / n; } p = edit_get_col (edit) + edit->over_col; edit_update_curs_row (edit); outby = p + edit->start_col - w->cols + 1 + (r_extreme + edit->found_len); if (outby > 0) edit_scroll_right (edit, outby); outby = l_extreme - p - edit->start_col; if (outby > 0) edit_scroll_left (edit, outby); p = edit->curs_row; outby = p - w->lines + 1 + b_extreme; if (outby > 0) edit_scroll_downward (edit, outby); outby = t_extreme - p; if (outby > 0) edit_scroll_upward (edit, outby); edit_update_curs_row (edit); w->lines += EDIT_TEXT_VERTICAL_OFFSET; w->cols += EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width; if (!edit->fullscreen) { w->x--; w->cols += 2; w->y--; w->lines += 2; } }