emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/dispnew.c


From: Kim F. Storm
Subject: [Emacs-diffs] Changes to emacs/src/dispnew.c
Date: Sat, 24 May 2003 17:57:06 -0400

Index: emacs/src/dispnew.c
diff -c emacs/src/dispnew.c:1.315 emacs/src/dispnew.c:1.316
*** emacs/src/dispnew.c:1.315   Mon Apr 14 12:29:18 2003
--- emacs/src/dispnew.c Sat May 24 17:57:05 2003
***************
*** 428,435 ****
  
  #else /* GLYPH_DEBUG == 0 */
  
! #define WINDOW_TO_FRAME_VPOS(W, VPOS) ((VPOS) + XFASTINT ((W)->top))
! #define WINDOW_TO_FRAME_HPOS(W, HPOS) ((HPOS) + XFASTINT ((W)->left))
  
  #endif /* GLYPH_DEBUG == 0 */
  
--- 428,435 ----
  
  #else /* GLYPH_DEBUG == 0 */
  
! #define WINDOW_TO_FRAME_VPOS(W, VPOS) ((VPOS) + WINDOW_TOP_EDGE_LINE (W))
! #define WINDOW_TO_FRAME_HPOS(W, HPOS) ((HPOS) + WINDOW_LEFT_EDGE_COL (W))
  
  #endif /* GLYPH_DEBUG == 0 */
  
***************
*** 576,582 ****
  
    if (NUMBERP (margin))
      {
!       int width = XFASTINT (w->width);
        double d = max (0, XFLOATINT (margin));
        d = min (width / 2 - 1, d);
        n = (int) ((double) total_glyphs / width * d);
--- 576,582 ----
  
    if (NUMBERP (margin))
      {
!       int width = XFASTINT (w->total_cols);
        double d = max (0, XFLOATINT (margin));
        d = min (width / 2 - 1, d);
        n = (int) ((double) total_glyphs / width * d);
***************
*** 623,629 ****
    int header_line_changed_p = 0;
    int header_line_p = 0;
    int left = -1, right = -1;
!   int window_x, window_y, window_width = -1, window_height;
  
    /* See if W had a header line that has disappeared now, or vice versa.  */
    if (w)
--- 623,629 ----
    int header_line_changed_p = 0;
    int header_line_p = 0;
    int left = -1, right = -1;
!   int window_width = -1, window_height;
  
    /* See if W had a header line that has disappeared now, or vice versa.  */
    if (w)
***************
*** 638,646 ****
       the matrix means preventing redisplay.  */
    if (matrix->pool == NULL)
      {
!       window_box (w, -1, &window_x, &window_y, &window_width, &window_height);
!       left = margin_glyphs_to_reserve (w, dim.width, w->left_margin_width);
!       right = margin_glyphs_to_reserve (w, dim.width, w->right_margin_width);
        xassert (left >= 0 && right >= 0);
        marginal_areas_changed_p = (left != matrix->left_margin_glyphs
                                  || right != matrix->right_margin_glyphs);
--- 638,646 ----
       the matrix means preventing redisplay.  */
    if (matrix->pool == NULL)
      {
!       window_box (w, -1, 0, 0, &window_width, &window_height);
!       left = margin_glyphs_to_reserve (w, dim.width, w->left_margin_cols);
!       right = margin_glyphs_to_reserve (w, dim.width, w->right_margin_cols);
        xassert (left >= 0 && right >= 0);
        marginal_areas_changed_p = (left != matrix->left_margin_glyphs
                                  || right != matrix->right_margin_glyphs);
***************
*** 648,655 ****
        if (!marginal_areas_changed_p
          && !fonts_changed_p
          && !header_line_changed_p
!         && matrix->window_left_x == XFASTINT (w->left)
!         && matrix->window_top_y == XFASTINT (w->top)
          && matrix->window_height == window_height
          && matrix->window_vscroll == w->vscroll
          && matrix->window_width == window_width)
--- 648,655 ----
        if (!marginal_areas_changed_p
          && !fonts_changed_p
          && !header_line_changed_p
!         && matrix->window_left_col == WINDOW_LEFT_EDGE_COL (w)
!         && matrix->window_top_line == WINDOW_TOP_EDGE_LINE (w)
          && matrix->window_height == window_height
          && matrix->window_vscroll == w->vscroll
          && matrix->window_width == window_width)
***************
*** 679,687 ****
        if (w)
        {
          left = margin_glyphs_to_reserve (w, dim.width,
!                                          w->left_margin_width);
          right = margin_glyphs_to_reserve (w, dim.width,
!                                           w->right_margin_width);
        }
        else
        left = right = 0;
--- 679,687 ----
        if (w)
        {
          left = margin_glyphs_to_reserve (w, dim.width,
!                                          w->left_margin_cols);
          right = margin_glyphs_to_reserve (w, dim.width,
!                                           w->right_margin_cols);
        }
        else
        left = right = 0;
***************
*** 790,797 ****
              && !header_line_changed_p
              && new_rows == 0
              && dim.width == matrix->matrix_w
!             && matrix->window_left_x == XFASTINT (w->left)
!             && matrix->window_top_y == XFASTINT (w->top)
              && matrix->window_width == window_width)
            {
              /* Find the last row in the window.  */
--- 790,797 ----
              && !header_line_changed_p
              && new_rows == 0
              && dim.width == matrix->matrix_w
!             && matrix->window_left_col == WINDOW_LEFT_EDGE_COL (w)
!             && matrix->window_top_line == WINDOW_TOP_EDGE_LINE (w)
              && matrix->window_width == window_width)
            {
              /* Find the last row in the window.  */
***************
*** 839,846 ****
       was last adjusted.  This is used to optimize redisplay above.  */
    if (w)
      {
!       matrix->window_left_x = XFASTINT (w->left);
!       matrix->window_top_y = XFASTINT (w->top);
        matrix->window_height = window_height;
        matrix->window_width = window_width;
        matrix->window_vscroll = w->vscroll;
--- 839,846 ----
       was last adjusted.  This is used to optimize redisplay above.  */
    if (w)
      {
!       matrix->window_left_col = WINDOW_LEFT_EDGE_COL (w);
!       matrix->window_top_line = WINDOW_TOP_EDGE_LINE (w);
        matrix->window_height = window_height;
        matrix->window_width = window_width;
        matrix->window_vscroll = w->vscroll;
***************
*** 983,990 ****
    xassert (start >= 0 && start < matrix->nrows);
    xassert (end >= 0 && end <= matrix->nrows);
  
!   min_y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w);
!   max_y = WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE (w);
  
    for (; start < end; ++start)
      {
--- 983,990 ----
    xassert (start >= 0 && start < matrix->nrows);
    xassert (end >= 0 && end <= matrix->nrows);
  
!   min_y = WINDOW_HEADER_LINE_HEIGHT (w);
!   max_y = WINDOW_BOX_HEIGHT_NO_MODE_LINE (w);
  
    for (; start < end; ++start)
      {
***************
*** 1143,1155 ****
  {
    int min_y, max_y;
  
!   min_y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w);
!   max_y = WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE (w);
  
    clear_glyph_row (row);
    row->y = y;
    row->ascent = row->phys_ascent = 0;
!   row->height = row->phys_height = CANON_Y_UNIT (XFRAME (w->frame));
    row->visible_height = row->height;
  
    if (row->y < min_y)
--- 1143,1155 ----
  {
    int min_y, max_y;
  
!   min_y = WINDOW_HEADER_LINE_HEIGHT (w);
!   max_y = WINDOW_BOX_HEIGHT_NO_MODE_LINE (w);
  
    clear_glyph_row (row);
    row->y = y;
    row->ascent = row->phys_ascent = 0;
!   row->height = row->phys_height = FRAME_LINE_HEIGHT (XFRAME (w->frame));
    row->visible_height = row->height;
  
    if (row->y < min_y)
***************
*** 1905,1914 ****
              || dim.width != w->desired_matrix->matrix_w
              || dim.height != w->desired_matrix->matrix_h
              || (margin_glyphs_to_reserve (w, dim.width,
!                                           w->right_margin_width)
                  != w->desired_matrix->left_margin_glyphs)
              || (margin_glyphs_to_reserve (w, dim.width,
!                                           w->left_margin_width)
                  != w->desired_matrix->right_margin_glyphs))
            *window_change_flags |= CHANGED_LEAF_MATRIX;
  
--- 1905,1914 ----
              || dim.width != w->desired_matrix->matrix_w
              || dim.height != w->desired_matrix->matrix_h
              || (margin_glyphs_to_reserve (w, dim.width,
!                                           w->right_margin_cols)
                  != w->desired_matrix->left_margin_glyphs)
              || (margin_glyphs_to_reserve (w, dim.width,
!                                           w->left_margin_cols)
                  != w->desired_matrix->right_margin_glyphs))
            *window_change_flags |= CHANGED_LEAF_MATRIX;
  
***************
*** 1985,1991 ****
      }
  #endif /* HAVE_WINDOW_SYSTEM */
  
!   return XINT (w->height);
  }
  
  
--- 1985,1991 ----
      }
  #endif /* HAVE_WINDOW_SYSTEM */
  
!   return WINDOW_TOTAL_LINES (w);
  }
  
  
***************
*** 2000,2006 ****
    if (FRAME_WINDOW_P (f))
      {
        int ch_width = FRAME_SMALLEST_CHAR_WIDTH (f);
!       int window_pixel_width = XFLOATINT (w->width) * CANON_X_UNIT (f);
  
        /* Compute number of glyphs needed in a glyph row.  */
        return (((window_pixel_width + ch_width - 1)
--- 2000,2006 ----
    if (FRAME_WINDOW_P (f))
      {
        int ch_width = FRAME_SMALLEST_CHAR_WIDTH (f);
!       int window_pixel_width = WINDOW_TOTAL_WIDTH (w);
  
        /* Compute number of glyphs needed in a glyph row.  */
        return (((window_pixel_width + ch_width - 1)
***************
*** 2013,2019 ****
      }
  #endif /* HAVE_WINDOW_SYSTEM */
  
!   return XINT (w->width);
  }
  
  
--- 2013,2019 ----
      }
  #endif /* HAVE_WINDOW_SYSTEM */
  
!   return XINT (w->total_cols);
  }
  
  
***************
*** 2098,2115 ****
    struct frame *sf = SELECTED_FRAME ();
    struct window *root = XWINDOW (sf->root_window);
    struct window *mini = XWINDOW (root->next);
!   int frame_height = FRAME_HEIGHT (sf);
!   int frame_width = FRAME_WIDTH (sf);
    int top_margin = FRAME_TOP_MARGIN (sf);
  
    /* Do it for the root window.  */
!   XSETFASTINT (root->top, top_margin);
!   XSETFASTINT (root->width, frame_width);
!   set_window_height (sf->root_window, frame_height - 1 - top_margin, 0);
  
    /* Do it for the mini-buffer window.  */
!   XSETFASTINT (mini->top, frame_height - 1);
!   XSETFASTINT (mini->width, frame_width);
    set_window_height (root->next, 1, 0);
  
    adjust_frame_glyphs (sf);
--- 2098,2115 ----
    struct frame *sf = SELECTED_FRAME ();
    struct window *root = XWINDOW (sf->root_window);
    struct window *mini = XWINDOW (root->next);
!   int frame_lines = FRAME_LINES (sf);
!   int frame_cols = FRAME_COLS (sf);
    int top_margin = FRAME_TOP_MARGIN (sf);
  
    /* Do it for the root window.  */
!   XSETFASTINT (root->top_line, top_margin);
!   XSETFASTINT (root->total_cols, frame_cols);
!   set_window_height (sf->root_window, frame_lines - 1 - top_margin, 0);
  
    /* Do it for the mini-buffer window.  */
!   XSETFASTINT (mini->top_line, frame_lines - 1);
!   XSETFASTINT (mini->total_cols, frame_cols);
    set_window_height (root->next, 1, 0);
  
    adjust_frame_glyphs (sf);
***************
*** 2161,2173 ****
          struct glyph_matrix *m = w->current_matrix;
          struct glyph_matrix *fm = f->current_matrix;
  
!         xassert (m->matrix_h == XFASTINT (w->height));
!         xassert (m->matrix_w == XFASTINT (w->width));
  
          for (i = 0; i < m->matrix_h; ++i)
            {
              struct glyph_row *r = m->rows + i;
!             struct glyph_row *fr = fm->rows + i + XFASTINT (w->top);
  
              xassert (r->glyphs[TEXT_AREA] >= fr->glyphs[TEXT_AREA]
                       && r->glyphs[LAST_AREA] <= fr->glyphs[LAST_AREA]);
--- 2161,2173 ----
          struct glyph_matrix *m = w->current_matrix;
          struct glyph_matrix *fm = f->current_matrix;
  
!         xassert (m->matrix_h == WINDOW_TOTAL_LINES (w));
!         xassert (m->matrix_w == WINDOW_TOTAL_COLS (w));
  
          for (i = 0; i < m->matrix_h; ++i)
            {
              struct glyph_row *r = m->rows + i;
!             struct glyph_row *fr = fm->rows + i + WINDOW_TOP_EDGE_LINE (w);
  
              xassert (r->glyphs[TEXT_AREA] >= fr->glyphs[TEXT_AREA]
                       && r->glyphs[LAST_AREA] <= fr->glyphs[LAST_AREA]);
***************
*** 2313,2320 ****
        /* Size of frame matrices must equal size of frame.  Note
         that we are called for X frames with window widths NOT equal
         to the frame width (from CHANGE_FRAME_SIZE_1).  */
!       xassert (matrix_dim.width == FRAME_WIDTH (f)
!              && matrix_dim.height == FRAME_HEIGHT (f));
  
        /* Pointers to glyph memory in glyph rows are exchanged during
         the update phase of redisplay, which means in general that a
--- 2313,2320 ----
        /* Size of frame matrices must equal size of frame.  Note
         that we are called for X frames with window widths NOT equal
         to the frame width (from CHANGE_FRAME_SIZE_1).  */
!       xassert (matrix_dim.width == FRAME_COLS (f)
!              && matrix_dim.height == FRAME_LINES (f));
  
        /* Pointers to glyph memory in glyph rows are exchanged during
         the update phase of redisplay, which means in general that a
***************
*** 2386,2395 ****
  
      /* Set window dimensions to frame dimensions and allocate or
         adjust glyph matrices of W.  */
!     XSETFASTINT (w->top, 0);
!     XSETFASTINT (w->left, 0);
!     XSETFASTINT (w->height, FRAME_MENU_BAR_LINES (f));
!     XSETFASTINT (w->width, FRAME_WINDOW_WIDTH (f));
      allocate_matrices_for_window_redisplay (w);
    }
  #endif /* not USE_X_TOOLKIT */
--- 2386,2395 ----
  
      /* Set window dimensions to frame dimensions and allocate or
         adjust glyph matrices of W.  */
!     XSETFASTINT (w->top_line, 0);
!     XSETFASTINT (w->left_col, 0);
!     XSETFASTINT (w->total_lines, FRAME_MENU_BAR_LINES (f));
!     XSETFASTINT (w->total_cols, FRAME_TOTAL_COLS (f));
      allocate_matrices_for_window_redisplay (w);
    }
  #endif /* not USE_X_TOOLKIT */
***************
*** 2407,2416 ****
    else
      w = XWINDOW (f->tool_bar_window);
  
!   XSETFASTINT (w->top, FRAME_MENU_BAR_LINES (f));
!   XSETFASTINT (w->left, 0);
!   XSETFASTINT (w->height, FRAME_TOOL_BAR_LINES (f));
!   XSETFASTINT (w->width, FRAME_WINDOW_WIDTH (f));
    allocate_matrices_for_window_redisplay (w);
  #endif
  }
--- 2407,2416 ----
    else
      w = XWINDOW (f->tool_bar_window);
  
!   XSETFASTINT (w->top_line, FRAME_MENU_BAR_LINES (f));
!   XSETFASTINT (w->left_col, 0);
!   XSETFASTINT (w->total_lines, FRAME_TOOL_BAR_LINES (f));
!   XSETFASTINT (w->total_cols, FRAME_TOTAL_COLS (f));
    allocate_matrices_for_window_redisplay (w);
  #endif
  }
***************
*** 3022,3035 ****
    xassert (NILP (w->hchild) && NILP (w->vchild));
    xassert (!FRAME_WINDOW_P (f));
  
!   left = margin_glyphs_to_reserve (w, 1, w->left_margin_width);
!   right = margin_glyphs_to_reserve (w, 1, w->right_margin_width);
    x = w->current_matrix->matrix_x;
    width = w->current_matrix->matrix_w;
  
    window_row = w->current_matrix->rows;
    window_row_end = window_row + w->current_matrix->nrows;
!   frame_row = f->current_matrix->rows + XFASTINT (w->top);
  
    for (; window_row < window_row_end; ++window_row, ++frame_row)
      {
--- 3022,3035 ----
    xassert (NILP (w->hchild) && NILP (w->vchild));
    xassert (!FRAME_WINDOW_P (f));
  
!   left = margin_glyphs_to_reserve (w, 1, w->left_margin_cols);
!   right = margin_glyphs_to_reserve (w, 1, w->right_margin_cols);
    x = w->current_matrix->matrix_x;
    width = w->current_matrix->matrix_w;
  
    window_row = w->current_matrix->rows;
    window_row_end = window_row + w->current_matrix->nrows;
!   frame_row = f->current_matrix->rows + WINDOW_TOP_EDGE_LINE (w);
  
    for (; window_row < window_row_end; ++window_row, ++frame_row)
      {
***************
*** 3061,3068 ****
        found = frame_row_to_window (XWINDOW (w->hchild), row);
        else if (!NILP (w->vchild))
        found = frame_row_to_window (XWINDOW (w->vchild), row);
!       else if (row >= XFASTINT (w->top)
!              && row < XFASTINT (w->top) + XFASTINT (w->height))
        found = w;
  
        w = NILP (w->next) ? 0 : XWINDOW (w->next);
--- 3061,3068 ----
        found = frame_row_to_window (XWINDOW (w->hchild), row);
        else if (!NILP (w->vchild))
        found = frame_row_to_window (XWINDOW (w->vchild), row);
!       else if (row >= WINDOW_TOP_EDGE_LINE (w)
!              && row < WINDOW_BOTTOM_EDGE_LINE (w))
        found = w;
  
        w = NILP (w->next) ? 0 : XWINDOW (w->next);
***************
*** 3267,3274 ****
  
    xassert (!FRAME_WINDOW_P (f));
    xassert (vpos >= 0 && vpos <= w->desired_matrix->nrows);
!   vpos += XFASTINT (w->top);
!   xassert (vpos >= 0 && vpos <= FRAME_HEIGHT (f));
    return vpos;
  }
  
--- 3267,3274 ----
  
    xassert (!FRAME_WINDOW_P (f));
    xassert (vpos >= 0 && vpos <= w->desired_matrix->nrows);
!   vpos += WINDOW_TOP_EDGE_LINE (w);
!   xassert (vpos >= 0 && vpos <= FRAME_LINES (f));
    return vpos;
  }
  
***************
*** 3284,3290 ****
    struct frame *f = XFRAME (w->frame);
  
    xassert (!FRAME_WINDOW_P (f));
!   hpos += XFASTINT (w->left);
    return hpos;
  }
  
--- 3284,3290 ----
    struct frame *f = XFRAME (w->frame);
  
    xassert (!FRAME_WINDOW_P (f));
!   hpos += WINDOW_LEFT_EDGE_COL (w);
    return hpos;
  }
  
***************
*** 3644,3651 ****
      {
        int x, y;
        x = (WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos)
!          + (INTEGERP (w->left_margin_width)
!             ? XFASTINT (w->left_margin_width)
              : 0));
        y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
        cursor_to (y, x);
--- 3644,3651 ----
      {
        int x, y;
        x = (WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos)
!          + (INTEGERP (w->left_margin_cols)
!             ? XFASTINT (w->left_margin_cols)
              : 0));
        y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
        cursor_to (y, x);
***************
*** 3739,3746 ****
      {
        int x, y;
        x = (WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos)
!          + (INTEGERP (w->left_margin_width)
!             ? XFASTINT (w->left_margin_width)
              : 0));
        y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
        cursor_to (y, x);
--- 3739,3746 ----
      {
        int x, y;
        x = (WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos)
!          + (INTEGERP (w->left_margin_cols)
!             ? XFASTINT (w->left_margin_cols)
              : 0));
        y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
        cursor_to (y, x);
***************
*** 4480,4486 ****
  
        /* Update display of the left margin area, if there is one.  */
        if (!desired_row->full_width_p
!         && !NILP (w->left_margin_width))
        {
          changed_p = 1;
          update_marginal_area (w, LEFT_MARGIN_AREA, vpos);
--- 4480,4486 ----
  
        /* Update display of the left margin area, if there is one.  */
        if (!desired_row->full_width_p
!         && !NILP (w->left_margin_cols))
        {
          changed_p = 1;
          update_marginal_area (w, LEFT_MARGIN_AREA, vpos);
***************
*** 4496,4502 ****
  
        /* Update display of the right margin area, if there is one.  */
        if (!desired_row->full_width_p
!         && !NILP (w->right_margin_width))
        {
          changed_p = 1;
          update_marginal_area (w, RIGHT_MARGIN_AREA, vpos);
--- 4496,4502 ----
  
        /* Update display of the right margin area, if there is one.  */
        if (!desired_row->full_width_p
!         && !NILP (w->right_margin_cols))
        {
          changed_p = 1;
          update_marginal_area (w, RIGHT_MARGIN_AREA, vpos);
***************
*** 5126,5132 ****
        }
      }
  
!   pause = (i < FRAME_HEIGHT (f) - 1) ? i : 0;
  
    /* Now just clean up termcap drivers and set cursor, etc.  */
    if (!pause)
--- 5126,5132 ----
        }
      }
  
!   pause = (i < FRAME_LINES (f) - 1) ? i : 0;
  
    /* Now just clean up termcap drivers and set cursor, etc.  */
    if (!pause)
***************
*** 5143,5149 ****
          && FRAME_HAS_MINIBUF_P (f)
          && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window))
        {
!         int top = XINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top);
          int row, col;
  
          if (cursor_in_echo_area < 0)
--- 5143,5149 ----
          && FRAME_HAS_MINIBUF_P (f)
          && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window))
        {
!         int top = WINDOW_TOP_EDGE_LINE (XWINDOW (FRAME_MINIBUF_WINDOW (f)));
          int row, col;
  
          if (cursor_in_echo_area < 0)
***************
*** 5159,5165 ****
                 cursor at the end of the prompt.  If the mini-buffer
                 is several lines high, find the last line that has
                 any text on it.  */
!             row = FRAME_HEIGHT (f);
              do
                {
                  --row;
--- 5159,5165 ----
                 cursor at the end of the prompt.  If the mini-buffer
                 is several lines high, find the last line that has
                 any text on it.  */
!             row = FRAME_LINES (f);
              do
                {
                  --row;
***************
*** 5187,5195 ****
              if (col >= FRAME_CURSOR_X_LIMIT (f))
                {
                  /* If we have another row, advance cursor into it.  */
!                 if (row < FRAME_HEIGHT (f) - 1)
                    {
!                     col = FRAME_LEFT_SCROLL_BAR_WIDTH (f);
                      row++;
                    }
                  /* Otherwise move it back in range.  */
--- 5187,5195 ----
              if (col >= FRAME_CURSOR_X_LIMIT (f))
                {
                  /* If we have another row, advance cursor into it.  */
!                 if (row < FRAME_LINES (f) - 1)
                    {
!                     col = FRAME_LEFT_SCROLL_BAR_COLS (f);
                      row++;
                    }
                  /* Otherwise move it back in range.  */
***************
*** 5211,5225 ****
                 with the cursor in the lower half of it.  The window
                 is split, and a message causes a redisplay before
                 a new cursor position has been computed.  */
!             && w->cursor.vpos < XFASTINT (w->height))
            {
              int x = WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos);
              int y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
  
!             if (INTEGERP (w->left_margin_width))
!               x += XFASTINT (w->left_margin_width);
  
!             /* x = max (min (x, FRAME_WINDOW_WIDTH (f) - 1), 0); */
              cursor_to (y, x);
            }
        }
--- 5211,5225 ----
                 with the cursor in the lower half of it.  The window
                 is split, and a message causes a redisplay before
                 a new cursor position has been computed.  */
!             && w->cursor.vpos < WINDOW_TOTAL_LINES (w))
            {
              int x = WINDOW_TO_FRAME_HPOS (w, w->cursor.hpos);
              int y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
  
!             if (INTEGERP (w->left_margin_cols))
!               x += XFASTINT (w->left_margin_cols);
  
!             /* x = max (min (x, FRAME_TOTAL_COLS (f) - 1), 0); */
              cursor_to (y, x);
            }
        }
***************
*** 5241,5252 ****
    int unchanged_at_top, unchanged_at_bottom;
    int window_size;
    int changed_lines;
!   int *old_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
!   int *new_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
!   int *draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
!   int *old_draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
    register int i;
!   int free_at_end_vpos = FRAME_HEIGHT (frame);
    struct glyph_matrix *current_matrix = frame->current_matrix;
    struct glyph_matrix *desired_matrix = frame->desired_matrix;
  
--- 5241,5252 ----
    int unchanged_at_top, unchanged_at_bottom;
    int window_size;
    int changed_lines;
!   int *old_hash = (int *) alloca (FRAME_LINES (frame) * sizeof (int));
!   int *new_hash = (int *) alloca (FRAME_LINES (frame) * sizeof (int));
!   int *draw_cost = (int *) alloca (FRAME_LINES (frame) * sizeof (int));
!   int *old_draw_cost = (int *) alloca (FRAME_LINES (frame) * sizeof (int));
    register int i;
!   int free_at_end_vpos = FRAME_LINES (frame);
    struct glyph_matrix *current_matrix = frame->current_matrix;
    struct glyph_matrix *desired_matrix = frame->desired_matrix;
  
***************
*** 5258,5265 ****
       number of unchanged lines at the end.  */
    changed_lines = 0;
    unchanged_at_top = 0;
!   unchanged_at_bottom = FRAME_HEIGHT (frame);
!   for (i = 0; i < FRAME_HEIGHT (frame); i++)
      {
        /* Give up on this scrolling if some old lines are not enabled.  */
        if (!MATRIX_ROW_ENABLED_P (current_matrix, i))
--- 5258,5265 ----
       number of unchanged lines at the end.  */
    changed_lines = 0;
    unchanged_at_top = 0;
!   unchanged_at_bottom = FRAME_LINES (frame);
!   for (i = 0; i < FRAME_LINES (frame); i++)
      {
        /* Give up on this scrolling if some old lines are not enabled.  */
        if (!MATRIX_ROW_ENABLED_P (current_matrix, i))
***************
*** 5281,5287 ****
        if (old_hash[i] != new_hash[i])
        {
          changed_lines++;
!         unchanged_at_bottom = FRAME_HEIGHT (frame) - i - 1;
        }
        else if (i == unchanged_at_top)
        unchanged_at_top++;
--- 5281,5287 ----
        if (old_hash[i] != new_hash[i])
        {
          changed_lines++;
!         unchanged_at_bottom = FRAME_LINES (frame) - i - 1;
        }
        else if (i == unchanged_at_top)
        unchanged_at_top++;
***************
*** 5290,5299 ****
  
    /* If changed lines are few, don't allow preemption, don't scroll.  */
    if ((!scroll_region_ok && changed_lines < baud_rate / 2400)
!       || unchanged_at_bottom == FRAME_HEIGHT (frame))
      return 1;
  
!   window_size = (FRAME_HEIGHT (frame) - unchanged_at_top
                 - unchanged_at_bottom);
  
    if (scroll_region_ok)
--- 5290,5299 ----
  
    /* If changed lines are few, don't allow preemption, don't scroll.  */
    if ((!scroll_region_ok && changed_lines < baud_rate / 2400)
!       || unchanged_at_bottom == FRAME_LINES (frame))
      return 1;
  
!   window_size = (FRAME_LINES (frame) - unchanged_at_top
                 - unchanged_at_bottom);
  
    if (scroll_region_ok)
***************
*** 5306,5312 ****
    if (!scroll_region_ok && window_size >= 18 && baud_rate > 2400
        && (window_size >=
          10 * scrolling_max_lines_saved (unchanged_at_top,
!                                         FRAME_HEIGHT (frame) - 
unchanged_at_bottom,
                                          old_hash, new_hash, draw_cost)))
      return 0;
  
--- 5306,5312 ----
    if (!scroll_region_ok && window_size >= 18 && baud_rate > 2400
        && (window_size >=
          10 * scrolling_max_lines_saved (unchanged_at_top,
!                                         FRAME_LINES (frame) - 
unchanged_at_bottom,
                                          old_hash, new_hash, draw_cost)))
      return 0;
  
***************
*** 5365,5371 ****
  /* Char insertion/deletion cost vector, from term.c */
  
  extern int *char_ins_del_vector;
! #define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_WINDOW_WIDTH((f))])
  
  
  /* Perform a frame-based update on line VPOS in frame FRAME.  */
--- 5365,5371 ----
  /* Char insertion/deletion cost vector, from term.c */
  
  extern int *char_ins_del_vector;
! #define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_TOTAL_COLS((f))])
  
  
  /* Perform a frame-based update on line VPOS in frame FRAME.  */
***************
*** 5441,5450 ****
        /* Don't call clear_end_of_line if we already wrote the whole
         line.  The cursor will not be at the right margin in that
         case but in the line below.  */
!       if (nlen < FRAME_WINDOW_WIDTH (f))
        {
          cursor_to (vpos, nlen);
!           clear_end_of_line (FRAME_WINDOW_WIDTH (f));
        }
        else
        /* Make sure we are in the right row, otherwise cursor movement
--- 5441,5450 ----
        /* Don't call clear_end_of_line if we already wrote the whole
         line.  The cursor will not be at the right margin in that
         case but in the line below.  */
!       if (nlen < FRAME_TOTAL_COLS (f))
        {
          cursor_to (vpos, nlen);
!           clear_end_of_line (FRAME_TOTAL_COLS (f));
        }
        else
        /* Make sure we are in the right row, otherwise cursor movement
***************
*** 5615,5621 ****
             no need to do clear-to-eol at the end of this function
             (and it would not be safe, since cursor is not going to
             be "at the margin" after the text is done).  */
!         if (nlen == FRAME_WINDOW_WIDTH (f))
            olen = 0;
  
          /* Function write_glyphs is prepared to do nothing
--- 5615,5621 ----
             no need to do clear-to-eol at the end of this function
             (and it would not be safe, since cursor is not going to
             be "at the margin" after the text is done).  */
!         if (nlen == FRAME_TOTAL_COLS (f))
            olen = 0;
  
          /* Function write_glyphs is prepared to do nothing
***************
*** 5705,5711 ****
    BYTEPOS (startp) = min (ZV_BYTE, max (BEGV_BYTE, BYTEPOS (startp)));
    start_display (&it, w, startp);
  
!   left_area_width = WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH (w);
    move_it_to (&it, -1, *x + it.first_visible_x - left_area_width, *y, -1,
              MOVE_TO_X | MOVE_TO_Y);
  
--- 5705,5711 ----
    BYTEPOS (startp) = min (ZV_BYTE, max (BEGV_BYTE, BYTEPOS (startp)));
    start_display (&it, w, startp);
  
!   left_area_width = WINDOW_LEFT_MARGIN_WIDTH (w);
    move_it_to (&it, -1, *x + it.first_visible_x - left_area_width, *y, -1,
              MOVE_TO_X | MOVE_TO_Y);
  
***************
*** 5743,5755 ****
  
    if (row->mode_line_p && row->enabled_p)
      {
-       /* The mode lines are displayed over scroll bars and fringes,
-        and X is window-relative.  Correct X by the scroll bar
-        and fringe width.  */
-       if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f))
-       x += FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f);
-       x += FRAME_LEFT_FRINGE_WIDTH (f);
- 
        /* Find the glyph under X.  If we find one with a string object,
           it's the one we were looking for.  */
        glyph = row->glyphs[TEXT_AREA];
--- 5743,5748 ----
***************
*** 5801,5811 ****
         it's the one we were looking for.  */
        glyph = row->glyphs[area];
        end = glyph + row->used[area];
        if (area == RIGHT_MARGIN_AREA)
!       x0 = (window_box_width (w, TEXT_AREA)
!             + window_box_width (w, LEFT_MARGIN_AREA));
        else
!       x0 = 0;
        for (; glyph < end; x0 += glyph->pixel_width, ++glyph)
        if (x >= x0 && x < x0 + glyph->pixel_width)
          {
--- 5794,5811 ----
         it's the one we were looking for.  */
        glyph = row->glyphs[area];
        end = glyph + row->used[area];
+ 
        if (area == RIGHT_MARGIN_AREA)
!       x0 = ((WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
!              ? WINDOW_LEFT_FRINGE_WIDTH (w) 
!              : WINDOW_TOTAL_FRINGE_WIDTH (w))
!             + window_box_width (w, LEFT_MARGIN_AREA)
!             + window_box_width (w, TEXT_AREA));
        else
!       x0 = (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
!             ? WINDOW_LEFT_FRINGE_WIDTH (w) 
!             : 0);
! 
        for (; glyph < end; x0 += glyph->pixel_width, ++glyph)
        if (x >= x0 && x < x0 + glyph->pixel_width)
          {
***************
*** 5885,5895 ****
        {
          struct frame *f = XFRAME (frame);
  
!         int height = FRAME_NEW_HEIGHT (f);
!         int width = FRAME_NEW_WIDTH (f);
! 
!         if (height != 0 || width != 0)
!           change_frame_size (f, height, width, 0, 0, safe);
        }
      }
  }
--- 5885,5893 ----
        {
          struct frame *f = XFRAME (frame);
  
!         if (f->new_text_lines != 0 || f->new_text_cols != 0)
!           change_frame_size (f, f->new_text_lines, f->new_text_cols,
!                              0, 0, safe);
        }
      }
  }
***************
*** 5931,5968 ****
       register struct frame *f;
       int newheight, newwidth, pretend, delay, safe;
  {
!   int new_frame_window_width;
    int count = SPECPDL_INDEX ();
  
    /* If we can't deal with the change now, queue it for later.  */
    if (delay || (redisplaying_p && !safe))
      {
!       FRAME_NEW_HEIGHT (f) = newheight;
!       FRAME_NEW_WIDTH (f) = newwidth;
        delayed_size_change = 1;
        return;
      }
  
    /* This size-change overrides any pending one for this frame.  */
!   FRAME_NEW_HEIGHT (f) = 0;
!   FRAME_NEW_WIDTH  (f) = 0;
  
    /* If an argument is zero, set it to the current value.  */
    if (newheight == 0)
!     newheight = FRAME_HEIGHT (f);
    if (newwidth == 0)
!     newwidth  = FRAME_WIDTH  (f);
  
    /* Compute width of windows in F.
       This is the width of the frame without vertical scroll bars.  */
!   new_frame_window_width = FRAME_WINDOW_WIDTH_ARG (f, newwidth);
  
    /* Round up to the smallest acceptable size.  */
    check_frame_size (f, &newheight, &newwidth);
  
    /* If we're not changing the frame size, quit now.  */
!   if (newheight == FRAME_HEIGHT (f)
!       && new_frame_window_width == FRAME_WINDOW_WIDTH (f))
      return;
  
    BLOCK_INPUT;
--- 5929,5966 ----
       register struct frame *f;
       int newheight, newwidth, pretend, delay, safe;
  {
!   int new_frame_total_cols;
    int count = SPECPDL_INDEX ();
  
    /* If we can't deal with the change now, queue it for later.  */
    if (delay || (redisplaying_p && !safe))
      {
!       f->new_text_lines = newheight;
!       f->new_text_cols = newwidth;
        delayed_size_change = 1;
        return;
      }
  
    /* This size-change overrides any pending one for this frame.  */
!   f->new_text_lines = 0;
!   f->new_text_cols = 0;
  
    /* If an argument is zero, set it to the current value.  */
    if (newheight == 0)
!     newheight = FRAME_LINES (f);
    if (newwidth == 0)
!     newwidth  = FRAME_COLS  (f);
  
    /* Compute width of windows in F.
       This is the width of the frame without vertical scroll bars.  */
!   new_frame_total_cols = FRAME_TOTAL_COLS_ARG (f, newwidth);
  
    /* Round up to the smallest acceptable size.  */
    check_frame_size (f, &newheight, &newwidth);
  
    /* If we're not changing the frame size, quit now.  */
!   if (newheight == FRAME_LINES (f)
!       && new_frame_total_cols == FRAME_TOTAL_COLS (f))
      return;
  
    BLOCK_INPUT;
***************
*** 5974,5992 ****
    dos_set_window_size (&newheight, &newwidth);
  #endif
  
!   if (newheight != FRAME_HEIGHT (f))
      {
        if (FRAME_HAS_MINIBUF_P (f) && !FRAME_MINIBUF_ONLY_P (f))
        {
          /* Frame has both root and mini-buffer.  */
!         XSETFASTINT (XWINDOW (FRAME_ROOT_WINDOW (f))->top,
                       FRAME_TOP_MARGIN (f));
          set_window_height (FRAME_ROOT_WINDOW (f),
                             (newheight
                              - 1
                              - FRAME_TOP_MARGIN (f)),
                              0);
!         XSETFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top,
                       newheight - 1);
          set_window_height (FRAME_MINIBUF_WINDOW (f), 1, 0);
        }
--- 5972,5990 ----
    dos_set_window_size (&newheight, &newwidth);
  #endif
  
!   if (newheight != FRAME_LINES (f))
      {
        if (FRAME_HAS_MINIBUF_P (f) && !FRAME_MINIBUF_ONLY_P (f))
        {
          /* Frame has both root and mini-buffer.  */
!         XSETFASTINT (XWINDOW (FRAME_ROOT_WINDOW (f))->top_line,
                       FRAME_TOP_MARGIN (f));
          set_window_height (FRAME_ROOT_WINDOW (f),
                             (newheight
                              - 1
                              - FRAME_TOP_MARGIN (f)),
                              0);
!         XSETFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top_line,
                       newheight - 1);
          set_window_height (FRAME_MINIBUF_WINDOW (f), 1, 0);
        }
***************
*** 5999,6019 ****
        FrameRows = newheight;
      }
  
!   if (new_frame_window_width  != FRAME_WINDOW_WIDTH (f))
      {
!       set_window_width (FRAME_ROOT_WINDOW (f), new_frame_window_width, 0);
        if (FRAME_HAS_MINIBUF_P (f))
!       set_window_width (FRAME_MINIBUF_WINDOW (f), new_frame_window_width, 0);
  
        if (FRAME_TERMCAP_P (f) && !pretend)
        FrameCols = newwidth;
  
        if (WINDOWP (f->tool_bar_window))
!       XSETFASTINT (XWINDOW (f->tool_bar_window)->width, newwidth);
      }
  
!   FRAME_HEIGHT (f) = newheight;
!   SET_FRAME_WIDTH (f, newwidth);
  
    {
      struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
--- 5997,6017 ----
        FrameRows = newheight;
      }
  
!   if (new_frame_total_cols != FRAME_TOTAL_COLS (f))
      {
!       set_window_width (FRAME_ROOT_WINDOW (f), new_frame_total_cols, 0);
        if (FRAME_HAS_MINIBUF_P (f))
!       set_window_width (FRAME_MINIBUF_WINDOW (f), new_frame_total_cols, 0);
  
        if (FRAME_TERMCAP_P (f) && !pretend)
        FrameCols = newwidth;
  
        if (WINDOWP (f->tool_bar_window))
!       XSETFASTINT (XWINDOW (f->tool_bar_window)->total_cols, newwidth);
      }
  
!   FRAME_LINES (f) = newheight;
!   SET_FRAME_COLS (f, newwidth);
  
    {
      struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
***************
*** 6038,6044 ****
  
    /* This isn't quite a no-op: it runs window-configuration-change-hook.  */
    Fset_window_buffer (FRAME_SELECTED_WINDOW (f),
!                     XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer);
  
    unbind_to (count, Qnil);
  }
--- 6036,6042 ----
  
    /* This isn't quite a no-op: it runs window-configuration-change-hook.  */
    Fset_window_buffer (FRAME_SELECTED_WINDOW (f),
!                     XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer, Qt);
  
    unbind_to (count, Qnil);
  }
***************
*** 6537,6544 ****
  
    {
      struct frame *sf = SELECTED_FRAME ();
!     int width = FRAME_WINDOW_WIDTH (sf);
!     int height = FRAME_HEIGHT (sf);
  
      unsigned int total_glyphs = height * (width + 2) * sizeof (struct glyph);
  
--- 6535,6542 ----
  
    {
      struct frame *sf = SELECTED_FRAME ();
!     int width = FRAME_TOTAL_COLS (sf);
!     int height = FRAME_LINES (sf);
  
      unsigned int total_glyphs = height * (width + 2) * sizeof (struct glyph);
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]