예제 #1
0
파일: overlay.c 프로젝트: ryoon/eCos
int copywin(const WINDOW *src_w, WINDOW *dst_w, int src_tr, int src_tc,
            int dst_tr, int dst_tc, int dst_br, int dst_bc, int overlay)
{
    int src_end_x, src_end_y;
    int src_rows, src_cols, dst_rows, dst_cols;
    int min_rows, min_cols;

    PDC_LOG(("copywin() - called\n"));

    if (!src_w || !dst_w || dst_w == curscr || dst_br > dst_w->_maxy
        || dst_bc > dst_w->_maxx || dst_tr < 0 || dst_tc < 0)
        return ERR;

    src_rows = src_w->_maxy - src_tr;
    src_cols = src_w->_maxx - src_tc;
    dst_rows = dst_br - dst_tr + 1;
    dst_cols = dst_bc - dst_tc + 1;

    min_rows = min(src_rows, dst_rows);
    min_cols = min(src_cols, dst_cols);

    src_end_y = src_tr + min_rows;
    src_end_x = src_tc + min_cols;

    return _copy_win(src_w, dst_w, src_tr, src_tc, src_end_y, src_end_x,
                     dst_tr, dst_tc, overlay);
}
예제 #2
0
파일: overlay.cpp 프로젝트: chenbk85/QOR
//------------------------------------------------------------------------------
int copywin( const WINDOW* src_w, WINDOW* dst_w, int src_tr, int src_tc, int dst_tr, int dst_tc, int dst_br, int dst_bc, int overlay )
{
	__QCS_FCONTEXT( "copywin" );

	int src_end_x, src_end_y;
    int src_rows, src_cols, dst_rows, dst_cols;
    int min_rows, min_cols;

    if( !src_w || !dst_w || dst_w == curscr || dst_br > dst_w->_maxy || dst_bc > dst_w->_maxx || dst_tr < 0 || dst_tc < 0 )
	{
        return ERR;
	}
    src_rows = src_w->_maxy - src_tr;
    src_cols = src_w->_maxx - src_tc;
    dst_rows = dst_br - dst_tr + 1;
    dst_cols = dst_bc - dst_tc + 1;

    min_rows = min( src_rows, dst_rows );
    min_cols = min( src_cols, dst_cols );

    src_end_y = src_tr + min_rows;
    src_end_x = src_tc + min_cols;

    return _copy_win( src_w, dst_w, src_tr, src_tc, src_end_y, src_end_x, dst_tr, dst_tc, overlay ) ? true : false;
}
예제 #3
0
파일: overlay.cpp 프로젝트: chenbk85/QOR
//------------------------------------------------------------------------------
int overwrite( const WINDOW* src_w, WINDOW* dst_w )
{
	__QCS_FCONTEXT( "overwrite" );

	int first_line, first_col, last_line, last_col;
    int src_start_x, src_start_y, dst_start_x, dst_start_y;
    int xdiff, ydiff;

    if( !src_w || !dst_w )
	{
        return ERR;
	}

    first_col = max( dst_w->_begx, src_w->_begx );
    first_line = max( dst_w->_begy, src_w->_begy );

    last_col = min( src_w->_begx + src_w->_maxx, dst_w->_begx + dst_w->_maxx );
    last_line = min( src_w->_begy + src_w->_maxy, dst_w->_begy + dst_w->_maxy );

    // determine the overlapping region of the two windows in real coordinates

    // if no overlapping region, do nothing

    if( ( last_col < first_col ) || ( last_line < first_line ) )
	{
        return 0;
	}

    // size of overlapping region

    xdiff = last_col - first_col;
    ydiff = last_line - first_line;

    if( src_w->_begx <= dst_w->_begx )
    {
        src_start_x = dst_w->_begx - src_w->_begx;
        dst_start_x = 0;
    }
    else
    {
        dst_start_x = src_w->_begx - dst_w->_begx;
        src_start_x = 0;
    }

    if( src_w->_begy <= dst_w->_begy )
    {
        src_start_y = dst_w->_begy - src_w->_begy;
        dst_start_y = 0;
    }
    else
    {
        dst_start_y = src_w->_begy - dst_w->_begy;
        src_start_y = 0;
    }

    return _copy_win( src_w, dst_w, src_start_y, src_start_x, src_start_y + ydiff, src_start_x + xdiff, dst_start_y, dst_start_x, FALSE );
}
예제 #4
0
파일: overlay.c 프로젝트: ryoon/eCos
int overwrite(const WINDOW *src_w, WINDOW *dst_w)
{
    int first_line, first_col, last_line, last_col;
    int src_start_x, src_start_y, dst_start_x, dst_start_y;
    int xdiff, ydiff;

    PDC_LOG(("overwrite() - called\n"));

    if (!src_w || !dst_w)
        return ERR;

    first_col = max(dst_w->_begx, src_w->_begx);
    first_line = max(dst_w->_begy, src_w->_begy);

    last_col = min(src_w->_begx + src_w->_maxx, dst_w->_begx + dst_w->_maxx);
    last_line = min(src_w->_begy + src_w->_maxy, dst_w->_begy + dst_w->_maxy);

    /* determine the overlapping region of the two windows in real 
       coordinates */

    /* if no overlapping region, do nothing */

    if ((last_col < first_col) || (last_line < first_line))
        return OK;

    /* size of overlapping region */

    xdiff = last_col - first_col;
    ydiff = last_line - first_line;

    if (src_w->_begx <= dst_w->_begx)
    {
        src_start_x = dst_w->_begx - src_w->_begx;
        dst_start_x = 0;
    }
    else
    {
        dst_start_x = src_w->_begx - dst_w->_begx;
        src_start_x = 0;
    }

    if (src_w->_begy <= dst_w->_begy)
    {
        src_start_y = dst_w->_begy - src_w->_begy;
        dst_start_y = 0;
    }
    else
    {
        dst_start_y = src_w->_begy - dst_w->_begy;
        src_start_y = 0;
    }

    return _copy_win(src_w, dst_w, src_start_y, src_start_x,
                     src_start_y + ydiff, src_start_x + xdiff,
                     dst_start_y, dst_start_x, FALSE);
}