0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.4965: GUI: testing mouse move event depends on screen cell size

Problem:    GUI: testing mouse move event depends on screen cell size.
Solution:   Multiply the row and column with the screen cell size.
This commit is contained in:
Bram Moolenaar
2022-05-16 15:27:46 +01:00
parent 3b675c276c
commit 7add8d3731
4 changed files with 38 additions and 20 deletions

View File

@@ -154,9 +154,12 @@ test_gui_event({event}, {args})
move: Optional; if used and TRUE then a mouse move move: Optional; if used and TRUE then a mouse move
event can be generated. event can be generated.
Only {args} row: and col: are used and Only {args} row: and col: are used and
required; they are interpreted as pixels. required; they are interpreted as pixels or
screen cells, depending on "cell".
Only results in an event when 'mousemoveevent' Only results in an event when 'mousemoveevent'
is set or a popup uses mouse move events. is set or a popup uses mouse move events.
cell: Optional: when present and TRUE then "move"
uses screen cells instead of pixel positions
"scrollbar": "scrollbar":
Set or drag the left, right or horizontal scrollbar. Only Set or drag the left, right or horizontal scrollbar. Only

View File

@@ -1209,66 +1209,71 @@ func PrepareForMouseEvent(args)
endif endif
endfunc endfunc
func MouseWasMoved()
let pos = getmousepos()
call add(g:eventlist, #{row: pos.screenrow, col: pos.screencol})
endfunc
func Test_gui_mouse_move_event() func Test_gui_mouse_move_event()
let args = #{move: 1, button: 0, multiclick: 0, modifiers: 0} let args = #{move: 1, button: 0, multiclick: 0, modifiers: 0}
" default, do not generate mouse move events " by default, does not generate mouse move events
set mousemev& set mousemev&
call assert_false(&mousemev) call assert_false(&mousemev)
let g:n_event = 0 let g:eventlist = []
nnoremap <special> <MouseMove> :let g:n_event += 1<CR> nnoremap <special> <silent> <MouseMove> :call MouseWasMoved()<CR>
" start at mouse pos (1,1), clear counter " start at mouse pos (1,1), clear counter
call PrepareForMouseEvent(args) call PrepareForMouseEvent(args)
let g:n_event = 0 let g:eventlist = []
call extend(args, #{row: 30, col: 300}) call extend(args, #{row: 3, col: 30, cell: v:true})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call extend(args, #{row: 100, col: 300}) call extend(args, #{row: 10, col: 30, cell: v:true})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
" no events since mousemev off " no events since mousemev off
call assert_equal(0, g:n_event) call assert_equal([], g:eventlist)
" turn on mouse events and try the same thing " turn on mouse events and try the same thing
set mousemev set mousemev
call PrepareForMouseEvent(args) call PrepareForMouseEvent(args)
let g:n_event = 0 let g:eventlist = []
call extend(args, #{row: 30, col: 300}) call extend(args, #{row: 3, col: 30, cell: v:true})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call extend(args, #{row: 100, col: 300}) call extend(args, #{row: 10, col: 30, cell: v:true})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call assert_equal(2, g:n_event) call assert_equal([#{row: 4, col: 31}, #{row: 11, col: 31}], g:eventlist)
" wiggle the mouse around, shouldn't get events " wiggle the mouse around within a screen cell, shouldn't trigger events
call extend(args, #{cell: v:false})
call PrepareForMouseEvent(args) call PrepareForMouseEvent(args)
let g:n_event = 0 let g:eventlist = []
call extend(args, #{row: 1, col: 2}) call extend(args, #{row: 1, col: 2, cell: v:false})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call extend(args, #{row: 2, col: 2}) call extend(args, #{row: 2, col: 2, cell: v:false})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call extend(args, #{row: 2, col: 1}) call extend(args, #{row: 2, col: 1, cell: v:false})
call test_gui_event('mouse', args) call test_gui_event('mouse', args)
call feedkeys('', 'Lx!') call feedkeys('', 'Lx!')
call PrepareForMouseEvent(args) call assert_equal([], g:eventlist)
call assert_equal(0, g:n_event)
unlet g:n_event unlet g:eventlist
unmap <MouseMove> unmap <MouseMove>
set mousemev& set mousemev&
endfunc endfunc

View File

@@ -1386,7 +1386,15 @@ test_gui_mouse_event(dict_T *args)
col = (int)dict_get_number(args, (char_u *)"col"); col = (int)dict_get_number(args, (char_u *)"col");
if (move) if (move)
{
if (dict_get_bool(args, (char_u *)"cell", FALSE))
{
// click in the middle of the character cell
row = row * gui.char_height + gui.char_height / 2;
col = col * gui.char_width + gui.char_width / 2;
}
gui_mouse_moved(col, row); gui_mouse_moved(col, row);
}
else else
{ {
button = (int)dict_get_number(args, (char_u *)"button"); button = (int)dict_get_number(args, (char_u *)"button");

View File

@@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4965,
/**/ /**/
4964, 4964,
/**/ /**/