Back to index

tetex-bin  3.0
Defines | Functions | Variables
resizeterm.c File Reference
#include <curses.priv.h>
#include <term.h>

Go to the source code of this file.

Defines

#define stolen_lines   (screen_lines - SP->_lines_avail)

Functions

 is_term_resized (int ToLines, int ToCols)
static int child_depth (WINDOW *cmp)
static int parent_depth (WINDOW *cmp)
static int adjust_window (WINDOW *win, int ToLines, int ToCols, int stolen)
static int decrease_size (int ToLines, int ToCols, int stolen)
static int increase_size (int ToLines, int ToCols, int stolen)
 resize_term (int ToLines, int ToCols)
 resizeterm (int ToLines, int ToCols)

Variables

static int current_lines
static int current_cols

Define Documentation

#define stolen_lines   (screen_lines - SP->_lines_avail)

Definition at line 46 of file resizeterm.c.


Function Documentation

static int adjust_window ( WINDOW win,
int  ToLines,
int  ToCols,
int  stolen 
) [static]

Definition at line 124 of file resizeterm.c.

{
    int result;
    int bottom = current_lines + SP->_topstolen - stolen;
    int myLines = win->_maxy + 1;
    int myCols = win->_maxx + 1;

    T((T_CALLED("adjust_window(%p,%d,%d) currently %dx%d at %d,%d"),
       win, ToLines, ToCols,
       getmaxy(win), getmaxx(win),
       getbegy(win), getbegx(win)));

    if (win->_begy >= bottom) {
       win->_begy += (ToLines - current_lines);
    } else {
       if (myLines == current_lines - stolen
           && ToLines != current_lines)
           myLines = ToLines - stolen;
       else if (myLines == current_lines
               && ToLines != current_lines)
           myLines = ToLines;
    }

    if (myLines > ToLines)
       myLines = ToLines;

    if (myCols > ToCols)
       myCols = ToCols;

    if (myLines == current_lines
       && ToLines != current_lines)
       myLines = ToLines;

    if (myCols == current_cols
       && ToCols != current_cols)
       myCols = ToCols;

    result = wresize(win, myLines, myCols);
    returnCode(result);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int child_depth ( WINDOW cmp) [static]

Definition at line 84 of file resizeterm.c.

{
    int depth = 0;

    if (cmp != 0) {
       WINDOWLIST *wp;

       for (wp = _nc_windows; wp != 0; wp = wp->next) {
           WINDOW *tst = &(wp->win);
           if (tst->_parent == cmp) {
              depth = 1 + child_depth(tst);
              break;
           }
       }
    }
    return depth;
}

Here is the caller graph for this function:

static int decrease_size ( int  ToLines,
int  ToCols,
int  stolen 
) [static]

Definition at line 170 of file resizeterm.c.

{
    bool found;
    int depth = 0;
    WINDOWLIST *wp;

    T((T_CALLED("decrease_size(%d, %d)"), ToLines, ToCols));

    do {
       found = FALSE;
       TR(TRACE_UPDATE, ("decreasing size of windows to %dx%d, depth=%d",
                       ToLines, ToCols, depth));
       for (wp = _nc_windows; wp != 0; wp = wp->next) {
           WINDOW *win = &(wp->win);

           if (!(win->_flags & _ISPAD)) {
              if (child_depth(win) == depth) {
                  found = TRUE;
                  if (adjust_window(win, ToLines, ToCols, stolen) != OK)
                     returnCode(ERR);
              }
           }
       }
       ++depth;
    } while (found);
    returnCode(OK);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static int increase_size ( int  ToLines,
int  ToCols,
int  stolen 
) [static]

Definition at line 203 of file resizeterm.c.

{
    bool found;
    int depth = 0;
    WINDOWLIST *wp;

    T((T_CALLED("increase_size(%d, %d)"), ToLines, ToCols));

    do {
       found = FALSE;
       TR(TRACE_UPDATE, ("increasing size of windows to %dx%d, depth=%d",
                       ToLines, ToCols, depth));
       for (wp = _nc_windows; wp != 0; wp = wp->next) {
           WINDOW *win = &(wp->win);

           if (!(win->_flags & _ISPAD)) {
              if (parent_depth(win) == depth) {
                  found = TRUE;
                  if (adjust_window(win, ToLines, ToCols, stolen) != OK)
                     returnCode(ERR);
              }
           }
       }
       ++depth;
    } while (found);
    returnCode(OK);
}

Here is the call graph for this function:

Here is the caller graph for this function:

is_term_resized ( int  ToLines,
int  ToCols 
)

Definition at line 71 of file resizeterm.c.

{
    T((T_CALLED("is_term_resized(%d, %d)"), ToLines, ToCols));
    returnCode(ToLines > 0
              && ToCols > 0
              && (ToLines != screen_lines
                 || ToCols != screen_columns));
}

Here is the caller graph for this function:

static int parent_depth ( WINDOW cmp) [static]

Definition at line 106 of file resizeterm.c.

{
    int depth = 0;

    if (cmp != 0) {
       WINDOW *tst;
       while ((tst = cmp->_parent) != 0) {
           ++depth;
           cmp = tst;
       }
    }
    return depth;
}

Here is the caller graph for this function:

resize_term ( int  ToLines,
int  ToCols 
)

Definition at line 236 of file resizeterm.c.

{
    int result = OK;
    int was_stolen = (screen_lines - SP->_lines_avail);

    T((T_CALLED("resize_term(%d,%d) old(%d,%d)"),
       ToLines, ToCols,
       screen_lines, screen_columns));

    if (is_term_resized(ToLines, ToCols)) {
       int myLines = current_lines = screen_lines;
       int myCols = current_cols = screen_columns;

#ifdef TRACE
       if (_nc_tracing & TRACE_UPDATE)
           show_window_sizes("before");
#endif
       if (ToLines > screen_lines) {
           increase_size(myLines = ToLines, myCols, was_stolen);
           current_lines = myLines;
           current_cols = myCols;
       }

       if (ToCols > screen_columns) {
           increase_size(myLines, myCols = ToCols, was_stolen);
           current_lines = myLines;
           current_cols = myCols;
       }

       if (ToLines < myLines ||
           ToCols < myCols) {
           decrease_size(ToLines, ToCols, was_stolen);
       }

       screen_lines = lines = ToLines;
       screen_columns = columns = ToCols;

       SP->_lines_avail = lines - was_stolen;

       if (SP->oldhash) {
           FreeAndNull(SP->oldhash);
       }
       if (SP->newhash) {
           FreeAndNull(SP->newhash);
       }
#ifdef TRACE
       if (_nc_tracing & TRACE_UPDATE) {
           LINES = ToLines - was_stolen;
           COLS = ToCols;
           show_window_sizes("after");
       }
#endif
    }

    /*
     * Always update LINES, to allow for call from lib_doupdate.c which
     * needs to have the count adjusted by the stolen (ripped off) lines.
     */
    LINES = ToLines - was_stolen;
    COLS = ToCols;

    returnCode(result);
}

Here is the call graph for this function:

Here is the caller graph for this function:

resizeterm ( int  ToLines,
int  ToCols 
)

Definition at line 309 of file resizeterm.c.

{
    int result = OK;

    SP->_sig_winch = FALSE;

    T((T_CALLED("resizeterm(%d,%d) old(%d,%d)"),
       ToLines, ToCols,
       screen_lines, screen_columns));

    if (is_term_resized(ToLines, ToCols)) {

#if USE_SIGWINCH
       ungetch(KEY_RESIZE); /* so application can know this */
       clearok(curscr, TRUE);      /* screen contents are unknown */
#endif

       result = resize_term(ToLines, ToCols);
    }

    returnCode(result);
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

int current_cols [static]

Definition at line 49 of file resizeterm.c.

int current_lines [static]

Definition at line 48 of file resizeterm.c.