]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.1444: not using double line characters for popup border v8.1.1444
authorBram Moolenaar <Bram@vim.org>
Sat, 1 Jun 2019 18:45:21 +0000 (20:45 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 1 Jun 2019 18:45:21 +0000 (20:45 +0200)
Problem:    Not using double line characters for popup border.
Solution:   Use double line characters if using utf-8.

src/screen.c
src/testdir/dumps/Test_popupwin_21.dump [new file with mode: 0644]
src/testdir/test_popupwin.vim
src/version.c

index bff4926ff6f2d2fa48364f4b48e64394e064dd75..66c3a39b452d4d4ad4d03a7f94ecc3795d440d58 100644 (file)
@@ -1031,6 +1031,12 @@ update_popups(void)
     int            total_height;
     int            popup_attr;
     int            row;
+    int            tl_corner_char = '+';
+    char    *tr_corner_str = "+";
+    int            bl_corner_char = '+';
+    char    *br_corner_str = "+";
+    int            hor_line_char = '-';
+    char    *ver_line_str = "|";
 
     // Find the window with the lowest zindex that hasn't been updated yet,
     // so that the window with a higher zindex is drawn later, thus goes on
@@ -1062,16 +1068,27 @@ update_popups(void)
                + wp->w_height + wp->w_popup_padding[2] + wp->w_popup_border[2];
        popup_attr = get_wcr_attr(wp);
 
+       if (enc_utf8)
+       {
+           tl_corner_char = 0x2554;
+           tr_corner_str = "\xe2\x95\x97";
+           bl_corner_char = 0x255a;
+           br_corner_str = "\xe2\x95\x9d";
+           hor_line_char = 0x2550;
+           ver_line_str = "\xe2\x95\x91";
+       }
+
        if (wp->w_popup_border[0] > 0)
        {
            // top border
            screen_fill(wp->w_winrow, wp->w_winrow + 1,
                    wp->w_wincol,
                    wp->w_wincol + total_width,
-                   wp->w_popup_border[3] != 0 ? '+' : '-',
-                   '-', popup_attr);
+                   wp->w_popup_border[3] != 0
+                                            ? tl_corner_char : hor_line_char,
+                   hor_line_char, popup_attr);
            if (wp->w_popup_border[1] > 0)
-               screen_puts((char_u *)"+", wp->w_winrow,
+               screen_puts((char_u *)tr_corner_str, wp->w_winrow,
                        wp->w_wincol + total_width - 1, popup_attr);
        }
 
@@ -1091,14 +1108,14 @@ update_popups(void)
        {
            // left border
            if (wp->w_popup_border[3] > 0)
-               screen_puts((char_u *)"|", row, wp->w_wincol, popup_attr);
+               screen_puts((char_u *)ver_line_str, row, wp->w_wincol, popup_attr);
            // left padding
            if (wp->w_popup_padding[3] > 0)
                screen_puts(get_spaces(wp->w_popup_padding[3]), row,
                        wp->w_wincol + wp->w_popup_border[3], popup_attr);
            // right border
            if (wp->w_popup_border[1] > 0)
-               screen_puts((char_u *)"|", row,
+               screen_puts((char_u *)ver_line_str, row,
                        wp->w_wincol + total_width - 1, popup_attr);
            // right padding
            if (wp->w_popup_padding[1] > 0)
@@ -1125,10 +1142,10 @@ update_popups(void)
            screen_fill(row , row + 1,
                    wp->w_wincol,
                    wp->w_wincol + total_width,
-                   wp->w_popup_border[3] != 0 ? '+' : '-',
-                   '-', popup_attr);
+                   wp->w_popup_border[3] != 0 ? bl_corner_char : hor_line_char,
+                   hor_line_char, popup_attr);
            if (wp->w_popup_border[1] > 0)
-               screen_puts((char_u *)"+", row,
+               screen_puts((char_u *)br_corner_str, row,
                        wp->w_wincol + total_width - 1, popup_attr);
        }
     }
diff --git a/src/testdir/dumps/Test_popupwin_21.dump b/src/testdir/dumps/Test_popupwin_21.dump
new file mode 100644 (file)
index 0000000..836abe4
--- /dev/null
@@ -0,0 +1,15 @@
+>1+0&#ffffff0| @73
+|2| |╔+0#0000001#ffd7ff255|═@11|╗| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|╔+0#0000001#ffd7ff255|═@11|╗| +0#0000000#ffffff0@18
+|3| |║+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r|║| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4|║+0#0000001#ffd7ff255| @11|║| +0#0000000#ffffff0@18
+|4| |╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|║+0#0000001#ffd7ff255| |h|e|l@1|o| |b|o|t|h| |║| +0#0000000#ffffff0@18
+|5| @40|║+0#0000001#ffd7ff255| @11|║| +0#0000000#ffffff0@18
+|6| |╔+0#0000001#ffd7ff255|═@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@18
+|7| |║+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @2| +0#0000000#ffffff0@37
+|8| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@37
+|9| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@37
+|1|0| @72
+|1@1| @72
+|1|2| @72
+|1|3| @72
+|1|4| @72
+@57|1|,|1| @10|T|o|p| 
index 795a1befaf4016d88545ba156d48f065d9b1acc5..523bd592a9b5985ed786ce595698680c3c1e74f8 100644 (file)
@@ -60,20 +60,22 @@ func Test_popup_with_border_and_padding()
   if !CanRunVimInTerminal()
     return
   endif
-  call writefile([
-       \ "call setline(1, range(1, 100))",
-       \ "call popup_create('hello border', {'line': 2, 'col': 3, 'border': []})",
-       \ "call popup_create('hello padding', {'line': 2, 'col': 23, 'padding': []})",
-       \ "call popup_create('hello both', {'line': 2, 'col': 43, 'border': [], 'padding': []})",
-       \ "call popup_create('border TL', {'line': 6, 'col': 3, 'border': [1, 0, 0, 4]})",
-       \ "call popup_create('paddings', {'line': 6, 'col': 23, 'padding': [1, 3, 2, 4]})",
-       \], 'XtestPopupBorder')
-  let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 15})
-  call VerifyScreenDump(buf, 'Test_popupwin_20', {})
 
-  " clean up
-  call StopVimInTerminal(buf)
-  call delete('XtestPopupBorder')
+  for iter in range(0, 1)
+    call writefile([iter == 1 ? '' : 'set enc=latin1',
+         \ "call setline(1, range(1, 100))",
+         \ "call popup_create('hello border', {'line': 2, 'col': 3, 'border': []})",
+         \ "call popup_create('hello padding', {'line': 2, 'col': 23, 'padding': []})",
+         \ "call popup_create('hello both', {'line': 2, 'col': 43, 'border': [], 'padding': []})",
+         \ "call popup_create('border TL', {'line': 6, 'col': 3, 'border': [1, 0, 0, 4]})",
+         \ "call popup_create('paddings', {'line': 6, 'col': 23, 'padding': [1, 3, 2, 4]})",
+         \], 'XtestPopupBorder')
+    let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 15})
+    call VerifyScreenDump(buf, 'Test_popupwin_2' .. iter, {})
+
+    call StopVimInTerminal(buf)
+    call delete('XtestPopupBorder')
+  endfor
 
   let with_border_or_padding = {
        \ 'line': 2,
index 51dcae8280b218ae494b89e5de588f1d0bcb32c0..a82e6e9633fa91b69a31718bcf723a8ae413312e 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1444,
 /**/
     1443,
 /**/