Loading ...
Sorry, an error occurred while loading the content.

Patch 5.6.059 (extra)

Expand Messages
  • Bram Moolenaar
    Patch 5.6.059 (extra) Problem: When moving the cursor over italic text and the characters spill over to the cell on the right, that spill-over is deleted.
    Message 1 of 1 , Apr 5, 2000
    • 0 Attachment
      Patch 5.6.059 (extra)
      Problem: When moving the cursor over italic text and the characters spill
      over to the cell on the right, that spill-over is deleted.
      Noticed in the Win32 GUI, can happen on other systems too.
      Solution: Redraw italic text starting from a blank, like this is already
      done for bold text. (Vince Negri)
      Files: src/gui.c, src/gui.h, src/gui_w32.c


      *** ../vim-5.6.58/src/gui.c Sat Mar 25 18:42:55 2000
      --- src/gui.c Wed Apr 5 15:38:02 2000
      ***************
      *** 1453,1462 ****
      --- 1453,1465 ----
      gui_mch_set_font(font);
      #endif

      + draw_flags = 0;
      +
      /* Set the color */
      bg_color = gui.back_pixel;
      if ((flags & GUI_MON_IS_CURSOR) && gui.in_focus)
      {
      + draw_flags |= DRAW_CURSOR;
      fg_color = fg;
      bg_color = bg;
      }
      ***************
      *** 1499,1511 ****
      if (!(flags & GUI_MON_NOCLEAR))
      clip_may_clear_selection(gui.row, gui.row);

      - draw_flags = 0;

      /* If there's no bold font, then fake it */
      if ((highlight_mask & (HL_BOLD | HL_STANDOUT)) &&
      (gui.bold_font == 0 || (aep != NULL && aep->ae_u.gui.font != 0)))
      - {
      draw_flags |= DRAW_BOLD;
      s -= back;
      len += back;
      col -= back;
      --- 1502,1520 ----
      if (!(flags & GUI_MON_NOCLEAR))
      clip_may_clear_selection(gui.row, gui.row);


      /* If there's no bold font, then fake it */
      if ((highlight_mask & (HL_BOLD | HL_STANDOUT)) &&
      (gui.bold_font == 0 || (aep != NULL && aep->ae_u.gui.font != 0)))
      draw_flags |= DRAW_BOLD;
      +
      + /*
      + * When drawing bold or italic characters the spill-over from the left
      + * neighbor may be destroyed. Backup to start redrawing just after a
      + * blank.
      + */
      + if ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC))
      + {
      s -= back;
      len += back;
      col -= back;
      *** ../vim-5.6.58/src/gui.h Tue Jul 20 11:17:36 1999
      --- src/gui.h Wed Apr 5 15:31:53 2000
      ***************
      *** 139,144 ****
      --- 139,145 ----
      #ifdef RISCOS
      # define DRAW_ITALIC 0x08 /* draw italic text */
      #endif
      + #define DRAW_CURSOR 0x10 /* drawing block cursor (win32) */

      /* For our own tearoff menu item */
      #define TEAR_STRING "-->Detach"
      *** ../vim-5.6.58/src/gui_w32.c Wed Apr 5 10:05:34 2000
      --- src/gui_w32.c Wed Apr 5 15:34:59 2000
      ***************
      *** 3394,3399 ****
      --- 3394,3401 ----
      {
      static int *padding = NULL;
      static int pad_size = 0;
      + const RECT *pcliprect = NULL;
      + UINT foptions = 0;
      #ifdef MULTI_BYTE
      static WCHAR *unicodebuf = NULL;
      #endif
      ***************
      *** 3448,3453 ****
      --- 3450,3465 ----
      DeleteBrush(hbr);

      SetBkMode(s_hdc, TRANSPARENT);
      +
      + /*
      + * When drawing block cursor, prevent inverted character spilling
      + * over character cell (can happen with bold/italic)
      + */
      + if (flags & DRAW_CURSOR)
      + {
      + pcliprect = &rc;
      + foptions = ETO_CLIPPED;
      + }
      }
      #else
      /*
      ***************
      *** 3484,3494 ****
      /* draw an incomplete composition character (korean) */
      if (OrgLen == 1 && blink_state == BLINK_ON
      && (szComp = ImeGetTempComposition()) != NULL) // hangul
      ! HanExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row), 0, NULL, szComp,
      ! 2, padding, TRUE);
      else
      ! HanExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row), 0, NULL, (char *)s,
      ! len, padding, FALSE);
      }
      else
      #endif
      --- 3496,3506 ----
      /* draw an incomplete composition character (korean) */
      if (OrgLen == 1 && blink_state == BLINK_ON
      && (szComp = ImeGetTempComposition()) != NULL) // hangul
      ! HanExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row),
      ! foptions, pcliprect, szComp, 2, padding, TRUE);
      else
      ! HanExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row),
      ! foptions, pcliprect, (char *)s, len, padding, FALSE);
      }
      else
      #endif
      ***************
      *** 3507,3520 ****
      MB_PRECOMPOSED,
      (char *)s, len,
      (LPWSTR)unicodebuf, UNIBUFSIZE)))
      ! ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row), 0, NULL,
      ! unicodebuf, len, NULL);
      }
      }
      else
      #endif
      ! ExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row), 0, NULL,
      ! (char *)s, len, padding);
      }

      if (flags & DRAW_UNDERL)
      --- 3519,3532 ----
      MB_PRECOMPOSED,
      (char *)s, len,
      (LPWSTR)unicodebuf, UNIBUFSIZE)))
      ! ExtTextOutW(s_hdc, TEXT_X(col), TEXT_Y(row),
      ! foptions, pcliprect, unicodebuf, len, NULL);
      }
      }
      else
      #endif
      ! ExtTextOut(s_hdc, TEXT_X(col), TEXT_Y(row),
      ! foptions, pcliprect, (char *)s, len, padding);
      }

      if (flags & DRAW_UNDERL)
      *** ../vim-5.6.58/src/version.c Wed Apr 5 14:42:03 2000
      --- src/version.c Wed Apr 5 16:25:37 2000
      ***************
      *** 420,421 ****
      --- 420,423 ----
      { /* Add new patch number below this line */
      + /**/
      + 59,
      /**/

      --
      Clothes make the man. Naked people have little or no influence on society.

      /-/-- Bram Moolenaar --- Bram@... --- http://www.moolenaar.net --\-\
      \-\-- Vim: http://www.vim.org ---- ICCF Holland: http://www.vim.org/iccf --/-/
    Your message has been successfully submitted and would be delivered to recipients shortly.