예제 #1
0
파일: editdraw.c 프로젝트: ebichu/dd-wrt
/* 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);
}
예제 #2
0
파일: editdraw.c 프로젝트: ryanlee/mc
/** 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;
}
예제 #3
0
파일: editdraw.c 프로젝트: ginggs/maemo-mc
/** 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;
    }
}