mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.1.0805: too many #ifdefs
Problem: Too many #ifdefs. Solution: Graduate FEAT_MBYTE, part 1.
This commit is contained in:
105
src/gui.c
105
src/gui.c
@@ -13,7 +13,7 @@
|
||||
/* Structure containing all the GUI information */
|
||||
gui_T gui;
|
||||
|
||||
#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
|
||||
#if !defined(FEAT_GUI_GTK)
|
||||
static void set_guifontwide(char_u *font_name);
|
||||
#endif
|
||||
static void gui_check_pos(void);
|
||||
@@ -397,13 +397,11 @@ gui_init_check(void)
|
||||
gui.fontset = NOFONTSET;
|
||||
# endif
|
||||
#endif
|
||||
#ifdef FEAT_MBYTE
|
||||
gui.wide_font = NOFONT;
|
||||
# ifndef FEAT_GUI_GTK
|
||||
#ifndef FEAT_GUI_GTK
|
||||
gui.wide_bold_font = NOFONT;
|
||||
gui.wide_ital_font = NOFONT;
|
||||
gui.wide_boldital_font = NOFONT;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MENU
|
||||
@@ -652,10 +650,8 @@ gui_init(void)
|
||||
emsg(_("E665: Cannot start GUI, no valid font found"));
|
||||
goto error2;
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
if (gui_get_wide_font() == FAIL)
|
||||
emsg(_("E231: 'guifontwide' invalid"));
|
||||
#endif
|
||||
|
||||
gui.num_cols = Columns;
|
||||
gui.num_rows = Rows;
|
||||
@@ -874,7 +870,7 @@ gui_init_font(char_u *font_list, int fontset UNUSED)
|
||||
* longer be used! */
|
||||
if (gui_mch_init_font(font_name, FALSE) == OK)
|
||||
{
|
||||
#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
|
||||
#if !defined(FEAT_GUI_GTK)
|
||||
/* If it's a Unicode font, try setting 'guifontwide' to a
|
||||
* similar double-width font. */
|
||||
if ((p_guifontwide == NULL || *p_guifontwide == NUL)
|
||||
@@ -916,8 +912,7 @@ gui_init_font(char_u *font_list, int fontset UNUSED)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if defined(FEAT_MBYTE) || defined(PROTO)
|
||||
# ifndef FEAT_GUI_GTK
|
||||
#ifndef FEAT_GUI_GTK
|
||||
/*
|
||||
* Try setting 'guifontwide' to a font twice as wide as "name".
|
||||
*/
|
||||
@@ -964,7 +959,7 @@ set_guifontwide(char_u *name)
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif /* !FEAT_GUI_GTK */
|
||||
#endif /* !FEAT_GUI_GTK */
|
||||
|
||||
/*
|
||||
* Get the font for 'guifontwide'.
|
||||
@@ -995,7 +990,7 @@ gui_get_wide_font(void)
|
||||
}
|
||||
|
||||
gui_mch_free_font(gui.wide_font);
|
||||
# ifdef FEAT_GUI_GTK
|
||||
#ifdef FEAT_GUI_GTK
|
||||
/* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
|
||||
if (font != NOFONT && gui.norm_font != NOFONT
|
||||
&& pango_font_description_equal(font, gui.norm_font))
|
||||
@@ -1004,19 +999,18 @@ gui_get_wide_font(void)
|
||||
gui_mch_free_font(font);
|
||||
}
|
||||
else
|
||||
# endif
|
||||
#endif
|
||||
gui.wide_font = font;
|
||||
# ifdef FEAT_GUI_MSWIN
|
||||
#ifdef FEAT_GUI_MSWIN
|
||||
gui_mch_wide_font_changed();
|
||||
# else
|
||||
#else
|
||||
/*
|
||||
* TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to
|
||||
* support those fonts for 'guifontwide'.
|
||||
*/
|
||||
# endif
|
||||
#endif
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
gui_set_cursor(int row, int col)
|
||||
@@ -1258,7 +1252,7 @@ gui_update_cursor(
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
|
||||
#if defined(FEAT_RIGHTLEFT)
|
||||
int col_off = FALSE;
|
||||
#endif
|
||||
/*
|
||||
@@ -1275,14 +1269,13 @@ gui_update_cursor(
|
||||
cur_height = (gui.char_height * shape->percentage + 99) / 100;
|
||||
cur_width = gui.char_width;
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col,
|
||||
LineOffset[gui.row] + screen_Columns) > 1)
|
||||
{
|
||||
/* Double wide character. */
|
||||
if (shape->shape != SHAPE_VER)
|
||||
cur_width += gui.char_width;
|
||||
# ifdef FEAT_RIGHTLEFT
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
if (CURSOR_BAR_RIGHT)
|
||||
{
|
||||
/* gui.col points to the left halve of the character but
|
||||
@@ -1292,11 +1285,10 @@ gui_update_cursor(
|
||||
col_off = TRUE;
|
||||
++gui.col;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
gui_mch_draw_part_cursor(cur_width, cur_height, cbg);
|
||||
#if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
|
||||
#if defined(FEAT_RIGHTLEFT)
|
||||
if (col_off)
|
||||
--gui.col;
|
||||
#endif
|
||||
@@ -2023,9 +2015,7 @@ gui_may_flush(void)
|
||||
gui_outstr(char_u *s, int len)
|
||||
{
|
||||
int this_len;
|
||||
#ifdef FEAT_MBYTE
|
||||
int cells;
|
||||
#endif
|
||||
|
||||
if (len == 0)
|
||||
return;
|
||||
@@ -2035,7 +2025,6 @@ gui_outstr(char_u *s, int len)
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
#ifdef FEAT_MBYTE
|
||||
if (has_mbyte)
|
||||
{
|
||||
/* Find out how many chars fit in the current line. */
|
||||
@@ -2051,7 +2040,6 @@ gui_outstr(char_u *s, int len)
|
||||
this_len = len; /* don't include following composing char */
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (gui.col + len > Columns)
|
||||
this_len = Columns - gui.col;
|
||||
else
|
||||
@@ -2061,12 +2049,10 @@ gui_outstr(char_u *s, int len)
|
||||
0, (guicolor_T)0, (guicolor_T)0, 0);
|
||||
s += this_len;
|
||||
len -= this_len;
|
||||
#ifdef FEAT_MBYTE
|
||||
/* fill up for a double-width char that doesn't fit. */
|
||||
if (len > 0 && gui.col < Columns)
|
||||
(void)gui_outstr_nowrap((char_u *)" ", 1,
|
||||
0, (guicolor_T)0, (guicolor_T)0, 0);
|
||||
#endif
|
||||
/* The cursor may wrap to the next line. */
|
||||
if (gui.col >= Columns)
|
||||
{
|
||||
@@ -2089,7 +2075,6 @@ gui_screenchar(
|
||||
guicolor_T bg, /* colors for cursor */
|
||||
int back) /* backup this many chars when using bold trick */
|
||||
{
|
||||
#ifdef FEAT_MBYTE
|
||||
char_u buf[MB_MAXBYTES + 1];
|
||||
|
||||
/* Don't draw right halve of a double-width UTF-8 char. "cannot happen" */
|
||||
@@ -2112,9 +2097,6 @@ gui_screenchar(
|
||||
return gui_outstr_nowrap(ScreenLines + off,
|
||||
enc_dbcs ? (*mb_ptr2len)(ScreenLines + off) : 1,
|
||||
flags, fg, bg, back);
|
||||
#else
|
||||
return gui_outstr_nowrap(ScreenLines + off, 1, flags, fg, bg, back);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_GUI_GTK
|
||||
@@ -2223,9 +2205,7 @@ gui_outstr_nowrap(
|
||||
guicolor_T sp_color;
|
||||
#if !defined(FEAT_GUI_GTK)
|
||||
GuiFont font = NOFONT;
|
||||
# ifdef FEAT_MBYTE
|
||||
GuiFont wide_font = NOFONT;
|
||||
# endif
|
||||
# ifdef FEAT_XFONTSET
|
||||
GuiFontset fontset = NOFONTSET;
|
||||
# endif
|
||||
@@ -2316,7 +2296,6 @@ gui_outstr_nowrap(
|
||||
else
|
||||
font = gui.norm_font;
|
||||
|
||||
# ifdef FEAT_MBYTE
|
||||
/*
|
||||
* Choose correct wide_font by font. wide_font should be set with font
|
||||
* at same time in above block. But it will make many "ifdef" nasty
|
||||
@@ -2330,8 +2309,6 @@ gui_outstr_nowrap(
|
||||
wide_font = gui.wide_ital_font;
|
||||
else if (font == gui.norm_font && gui.wide_font)
|
||||
wide_font = gui.wide_font;
|
||||
# endif
|
||||
|
||||
}
|
||||
# ifdef FEAT_XFONTSET
|
||||
if (fontset != NOFONTSET)
|
||||
@@ -2441,7 +2418,6 @@ gui_outstr_nowrap(
|
||||
/* The value returned is the length in display cells */
|
||||
len = gui_gtk2_draw_string(gui.row, col, s, len, draw_flags);
|
||||
#else
|
||||
# ifdef FEAT_MBYTE
|
||||
if (enc_utf8)
|
||||
{
|
||||
int start; /* index of bytes to be drawn */
|
||||
@@ -2456,11 +2432,11 @@ gui_outstr_nowrap(
|
||||
int curr_wide = FALSE; /* use 'guifontwide' */
|
||||
int prev_wide = FALSE;
|
||||
int wide_changed;
|
||||
# ifdef WIN3264
|
||||
# ifdef WIN3264
|
||||
int sep_comp = FALSE; /* Don't separate composing chars. */
|
||||
# else
|
||||
# else
|
||||
int sep_comp = TRUE; /* Separate composing chars. */
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* Break the string at a composing character, it has to be drawn on
|
||||
* top of the previous character. */
|
||||
@@ -2476,9 +2452,9 @@ gui_outstr_nowrap(
|
||||
if (!comping || sep_comp)
|
||||
{
|
||||
if (cn > 1
|
||||
# ifdef FEAT_XFONTSET
|
||||
# ifdef FEAT_XFONTSET
|
||||
&& fontset == NOFONTSET
|
||||
# endif
|
||||
# endif
|
||||
&& wide_font != NOFONT)
|
||||
curr_wide = TRUE;
|
||||
else
|
||||
@@ -2494,15 +2470,15 @@ gui_outstr_nowrap(
|
||||
* a composing character. */
|
||||
if (i + cl >= len || (comping && sep_comp && i > start)
|
||||
|| wide_changed
|
||||
# if defined(FEAT_GUI_X11)
|
||||
# if defined(FEAT_GUI_X11)
|
||||
|| (cn > 1
|
||||
# ifdef FEAT_XFONTSET
|
||||
# ifdef FEAT_XFONTSET
|
||||
/* No fontset: At least draw char after wide char at
|
||||
* right position. */
|
||||
&& fontset == NOFONTSET
|
||||
# endif
|
||||
)
|
||||
# endif
|
||||
)
|
||||
# endif
|
||||
)
|
||||
{
|
||||
if ((comping && sep_comp) || wide_changed)
|
||||
@@ -2529,29 +2505,29 @@ gui_outstr_nowrap(
|
||||
cl = 0;
|
||||
}
|
||||
|
||||
# if defined(FEAT_GUI_X11)
|
||||
# if defined(FEAT_GUI_X11)
|
||||
/* No fontset: draw a space to fill the gap after a wide char
|
||||
* */
|
||||
if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0
|
||||
# ifdef FEAT_XFONTSET
|
||||
# ifdef FEAT_XFONTSET
|
||||
&& fontset == NOFONTSET
|
||||
# endif
|
||||
# endif
|
||||
&& !wide_changed)
|
||||
gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
|
||||
1, draw_flags);
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
/* Draw a composing char on top of the previous char. */
|
||||
if (comping && sep_comp)
|
||||
{
|
||||
# if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON
|
||||
# if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON
|
||||
/* Carbon ATSUI autodraws composing char over previous char */
|
||||
gui_mch_draw_string(gui.row, scol, s + i, cl,
|
||||
draw_flags | DRAW_TRANSP);
|
||||
# else
|
||||
# else
|
||||
gui_mch_draw_string(gui.row, scol - cn, s + i, cl,
|
||||
draw_flags | DRAW_TRANSP);
|
||||
# endif
|
||||
# endif
|
||||
start = i + cl;
|
||||
}
|
||||
prev_wide = curr_wide;
|
||||
@@ -2560,17 +2536,14 @@ gui_outstr_nowrap(
|
||||
len = scol - col;
|
||||
}
|
||||
else
|
||||
# endif
|
||||
{
|
||||
gui_mch_draw_string(gui.row, col, s, len, draw_flags);
|
||||
# ifdef FEAT_MBYTE
|
||||
if (enc_dbcs == DBCS_JPNU)
|
||||
{
|
||||
/* Get the length in display cells, this can be different from the
|
||||
* number of bytes for "euc-jp". */
|
||||
len = mb_string2cells(s, len);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
#endif /* !FEAT_GUI_GTK */
|
||||
|
||||
@@ -2697,9 +2670,7 @@ gui_redraw_block(
|
||||
int idx, len;
|
||||
int back, nback;
|
||||
int retval = FALSE;
|
||||
#ifdef FEAT_MBYTE
|
||||
int orig_col1, orig_col2;
|
||||
#endif
|
||||
|
||||
/* Don't try to update when ScreenLines is not valid */
|
||||
if (!screen_cleared || ScreenLines == NULL)
|
||||
@@ -2716,14 +2687,11 @@ gui_redraw_block(
|
||||
old_row = gui.row;
|
||||
old_col = gui.col;
|
||||
old_hl_mask = gui.highlight_mask;
|
||||
#ifdef FEAT_MBYTE
|
||||
orig_col1 = col1;
|
||||
orig_col2 = col2;
|
||||
#endif
|
||||
|
||||
for (gui.row = row1; gui.row <= row2; gui.row++)
|
||||
{
|
||||
#ifdef FEAT_MBYTE
|
||||
/* When only half of a double-wide character is in the block, include
|
||||
* the other half. */
|
||||
col1 = orig_col1;
|
||||
@@ -2753,12 +2721,11 @@ gui_redraw_block(
|
||||
msg((char *)IObuff);
|
||||
}
|
||||
}
|
||||
# ifdef FEAT_GUI_GTK
|
||||
#ifdef FEAT_GUI_GTK
|
||||
if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
|
||||
++col2;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
gui.col = col1;
|
||||
off = LineOffset[gui.row] + gui.col;
|
||||
len = col2 - col1 + 1;
|
||||
@@ -2778,7 +2745,7 @@ gui_redraw_block(
|
||||
{
|
||||
first_attr = ScreenAttrs[off];
|
||||
gui.highlight_mask = first_attr;
|
||||
#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
|
||||
#if !defined(FEAT_GUI_GTK)
|
||||
if (enc_utf8 && ScreenLinesUC[off] != 0)
|
||||
{
|
||||
/* output multi-byte character separately */
|
||||
@@ -2814,7 +2781,6 @@ gui_redraw_block(
|
||||
for (idx = 0; idx < len && ScreenAttrs[off + idx] == first_attr;
|
||||
idx++)
|
||||
{
|
||||
# ifdef FEAT_MBYTE
|
||||
/* Stop at a multi-byte Unicode character. */
|
||||
if (enc_utf8 && ScreenLinesUC[off + idx] != 0)
|
||||
break;
|
||||
@@ -2827,7 +2793,6 @@ gui_redraw_block(
|
||||
+ off + idx) == 2)
|
||||
++idx; /* skip second byte of double-byte char */
|
||||
}
|
||||
# endif
|
||||
}
|
||||
nback = gui_outstr_nowrap(ScreenLines + off, idx, flags,
|
||||
(guicolor_T)0, (guicolor_T)0, back);
|
||||
@@ -3390,11 +3355,7 @@ gui_xy2colrow(int x, int y, int *colp)
|
||||
int col = check_col(X_2_COL(x));
|
||||
int row = check_row(Y_2_ROW(y));
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
*colp = mb_fix_col(col, row);
|
||||
#else
|
||||
*colp = col;
|
||||
#endif
|
||||
return row;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user