view src/testdir/popupbounce.vim @ 34815:8e38ceda0822 v9.1.0280

patch 9.1.0280: several issues with 'smoothscroll' support Commit: https://github.com/vim/vim/commit/9148ba8a46baa3934c44164989cdcdec5d01d9e3 Author: Luuk van Baal <luukvbaal@gmail.com> Date: Mon Apr 8 22:27:41 2024 +0200 patch 9.1.0280: several issues with 'smoothscroll' support Problem: Logic to make sure cursor is in visible part of the screen after scrolling the text with 'smoothscroll' is scattered, asymmetric and contains bugs. Solution: Adjust and create helper function for 'smoothscroll' cursor logic. (Luuk van Baal) closes: #14410 Signed-off-by: Luuk van Baal <luukvbaal@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Mon, 08 Apr 2024 22:45:03 +0200
parents 9606c0adc148
children
line wrap: on
line source

" Use this script to measure the redrawing performance when a popup is being
" displayed.  Usage with gcc:
"    cd src
"    # Edit Makefile to uncomment PROFILE_CFLAGS and PROFILE_LIBS
"    make reconfig
"    ./vim --clean -S testdir/popupbounce.vim main.c
"    gprof vim gmon.out | vim -

" using line continuation
set nocp

" don't switch screens when quitting, so we can read the frames/sec
set t_te=

let winid = popup_create(['line1', 'line2', 'line3', 'line4'], {
	      \   'line' : 1,
	      \   'col' : 1,
	      \   'zindex' : 101,
	      \ })
redraw

let start = reltime()
let framecount = 0

let line = 1.0
let col = 1
let downwards = 1
let col_inc = 1
let initial_speed = 0.2
let speed = initial_speed
let accel = 1.1
let time = 0.1

let countdown = 0

while 1
  if downwards
    let speed += time * accel
    let line += speed
  else
    let speed -= time * accel
    let line -= speed
  endif

  if line + 3 >= &lines
    let downwards = 0
    let speed = speed * 0.8
    let line = &lines - 3
  endif
  if !downwards && speed < 1.0
    let downwards = 1
    let speed = initial_speed
    if line + 4 > &lines && countdown == 0
      let countdown = 50
    endif
  endif

  let col += col_inc
  if col + 4 >= &columns
    let col_inc = -1
  elseif col <= 1
    let col_inc = 1
  endif

  call popup_move(winid, {'line': float2nr(line), 'col': col})
  redraw
  let framecount += 1
  if countdown > 0
    let countdown -= 1
    if countdown == 0
      break
    endif
  endif

endwhile

let elapsed = reltimefloat(reltime(start))
echomsg framecount .. ' frames in ' .. string(elapsed) .. ' seconds, ' .. string(framecount / elapsed) .. ' frames/sec'

qa