Patch 8.1.1450
Problem:    Popup window positioning wrong when using padding or borders.
Solution:   Fix computing the position.
Files:      src/popupwin.c, src/testdir/test_popupwin.vim,
            src/testdir/dumps/Test_popupwin_corners.dump


*** ../vim-8.1.1449/src/popupwin.c      2019-06-02 14:49:52.368891150 +0200
--- src/popupwin.c      2019-06-02 15:27:07.476956587 +0200
***************
*** 382,387 ****
--- 382,393 ----
      int               center_vert = FALSE;
      int               center_hor = FALSE;
      int               allow_adjust_left = !wp->w_popup_fixed;
+     int               top_extra = wp->w_popup_border[0] + 
wp->w_popup_padding[0];
+     int               right_extra = wp->w_popup_border[1] + 
wp->w_popup_padding[1];
+     int               bot_extra = wp->w_popup_border[2] + 
wp->w_popup_padding[2];
+     int               left_extra = wp->w_popup_border[3] + 
wp->w_popup_padding[3];
+     int               extra_height = top_extra + bot_extra;
+     int               extra_width = left_extra + right_extra;
  
      wp->w_winrow = 0;
      wp->w_wincol = 0;
***************
*** 474,481 ****
      {
        // Right aligned: move to the right if needed.
        // No truncation, because that would change the height.
!       if (wp->w_width < wp->w_wantcol)
!           wp->w_wincol = wp->w_wantcol - wp->w_width;
      }
  
      if (wp->w_height <= 1)
--- 480,487 ----
      {
        // Right aligned: move to the right if needed.
        // No truncation, because that would change the height.
!       if (wp->w_width + extra_width < wp->w_wantcol)
!           wp->w_wincol = wp->w_wantcol - (wp->w_width + extra_width);
      }
  
      if (wp->w_height <= 1)
***************
*** 492,500 ****
      else if (wp->w_popup_pos == POPPOS_BOTRIGHT
            || wp->w_popup_pos == POPPOS_BOTLEFT)
      {
!       if (wp->w_height <= wp->w_wantline)
            // bottom aligned: may move down
!           wp->w_winrow = wp->w_wantline - wp->w_height;
        else
            // not enough space, make top aligned
            wp->w_winrow = wp->w_wantline + 1;
--- 498,506 ----
      else if (wp->w_popup_pos == POPPOS_BOTRIGHT
            || wp->w_popup_pos == POPPOS_BOTLEFT)
      {
!       if ((wp->w_height + extra_height) <= wp->w_wantline)
            // bottom aligned: may move down
!           wp->w_winrow = wp->w_wantline - (wp->w_height + extra_height);
        else
            // not enough space, make top aligned
            wp->w_winrow = wp->w_wantline + 1;
*** ../vim-8.1.1449/src/testdir/test_popupwin.vim       2019-06-02 
14:49:52.372891128 +0200
--- src/testdir/test_popupwin.vim       2019-06-02 15:27:28.196847514 +0200
***************
*** 175,180 ****
--- 175,229 ----
    call delete('XtestPopup')
  endfunc
  
+ func Test_popup_all_corners()
+   if !CanRunVimInTerminal()
+     return
+   endif
+   let lines =<< trim END
+       call setline(1, repeat([repeat('-', 60)], 15))
+       set so=0
+       normal 2G3|r#
+       let winid1 = popup_create(['first', 'second'], {
+             \ 'line': 'cursor+1',
+             \ 'col': 'cursor',
+             \ 'pos': 'topleft',
+             \ 'border': [],
+             \ 'padding': [],
+             \ })
+       normal 25|r@
+       let winid1 = popup_create(['First', 'SeconD'], {
+             \ 'line': 'cursor+1',
+             \ 'col': 'cursor',
+             \ 'pos': 'topright',
+             \ 'border': [],
+             \ 'padding': [],
+             \ })
+       normal 9G29|r%
+       let winid1 = popup_create(['fiRSt', 'seCOnd'], {
+             \ 'line': 'cursor-1',
+             \ 'col': 'cursor',
+             \ 'pos': 'botleft',
+             \ 'border': [],
+             \ 'padding': [],
+             \ })
+       normal 51|r&
+       let winid1 = popup_create(['FIrsT', 'SEcoND'], {
+             \ 'line': 'cursor-1',
+             \ 'col': 'cursor',
+             \ 'pos': 'botright',
+             \ 'border': [],
+             \ 'padding': [],
+             \ })
+   END
+   call writefile(lines, 'XtestPopupCorners')
+   let buf = RunVimInTerminal('-S XtestPopupCorners', {'rows': 12})
+   call VerifyScreenDump(buf, 'Test_popupwin_corners', {})
+ 
+   " clean up
+   call StopVimInTerminal(buf)
+   call delete('XtestPopupCorners')
+ endfunc
+ 
  func Test_win_execute_closing_curwin()
    split
    let winid = popup_create('some text', {})
*** ../vim-8.1.1449/src/testdir/dumps/Test_popupwin_corners.dump        
2019-06-02 15:33:19.878990668 +0200
--- src/testdir/dumps/Test_popupwin_corners.dump        2019-06-02 
15:24:00.245939605 +0200
***************
*** 0 ****
--- 1,12 ----
+ |-+0&#ffffff0@59| @14
+ |-@1|#|-@20|@|-@34| @14
+ 
|-@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@8|
 @14
+ |-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| 
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| 
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8| 
@14
+ |-@1|║+0#0000001#ffd7ff255| |f|i|r|s|t| 
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|i|r|s|t| 
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |f|i|R|S|t| 
@1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|I|r|s|T| 
@1|║|-+0#0000000#ffffff0@8| @14
+ |-@1|║+0#0000001#ffd7ff255| |s|e|c|o|n|d| 
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|e|c|o|n|D| 
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |s|e|C|O|n|d| 
|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|E|c|o|N|D| 
|║|-+0#0000000#ffffff0@8| @14
+ |-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| 
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| 
@7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8| 
@14
+ 
|-@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@8|
 @14
+ |-@27|%|-@20>&|-@8| @14
+ |-@59| @14
+ |-@59| @14
+ @57|9|,|5|1| @9|T|o|p| 
*** ../vim-8.1.1449/src/version.c       2019-06-02 14:49:52.372891128 +0200
--- src/version.c       2019-06-02 15:33:07.663055316 +0200
***************
*** 769,770 ****
--- 769,772 ----
  {   /* Add new patch number below this line */
+ /**/
+     1450,
  /**/

-- 
>From "know your smileys":
 :^[/   mean-smiley-with-cigarette

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201906021335.x52DZKZh028868%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui