notepad-plus-plus-legacy/scintilla
Udo Hoffmann d55350b4b5
Fix mouse cursor flicker while hovering
The reason, why the flicker occurs, is the following: There are two Windows messages sent by Windows to Scintilla, when the mouse is moved: WM_MOUSEMOVE and WM_SETCURSOR.

WM_MOUSEMOVE informs Scintilla, that the mouse has been moved inside its window.
WM_SETCURSOR informs Scintilla, that the mouse cursor has been moved. Anywhere, not necessarily in its window.
Scintilla calls the Windows function SetCursor (, which sets the mouse cursor shape, not the position), while processing both messages. Unfortunately, Scintilla uses different ways to calculate the desired cursor shape. So, whenever the mouse cursor is moved, two SetCursor calls are applied, sometimes with two different cursor shapes.

On WM_MOUSEMOVE, Scintilla calls ButtonMoveWithModifiers, which sets the correct cursor shape.
On WM_SETCURSOR, Scintilla calls SetCursor directly, sometimes with the wrong cursor shape.

This PR shows how to eliminate this effect in the modified Scintilla version used by Notepad++. This may be the fastest way to get results without introducing new effects.

The current original Scintilla version (Version 4.4.4, downloaded 2020-07-30, 5d134721c303ceecbdcb28ec82b28f0cbbdb4a55) has the same effect and can be fixed in the same way, although the WM_SETCURSOR code has been changed a little. Before updating to a new Scintilla version, we should try to get it fixed in the original Scintilla.

Fix #8588, fix #8647, close #8641
2020-08-01 15:41:04 +02:00
..
bin Upgrade Scintilla - integrate boost's PCRE in 64 build 2019-05-08 10:43:30 +02:00
boostregex Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
cocoa Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
doc Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
gtk Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
include Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
lexers Fix minor coding error & remove unused variables 2020-05-10 05:19:08 +02:00
lexlib Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
qt Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
scripts Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
src Fix mouse cursor flicker while hovering 2020-08-01 15:41:04 +02:00
test Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
win32 Fix mouse cursor flicker while hovering 2020-08-01 15:41:04 +02:00
CONTRIBUTING Upgrade Scintilla from v3.56 to v4.14 2019-05-04 21:14:48 +03:00
delbin.bat Upgrade Scintilla from v3.56 to v4.14 2019-05-04 21:14:48 +03:00
License.txt Upgrade Scintilla from v3.56 to v4.14 2019-05-04 21:14:48 +03:00
README Upgrade Scintilla from v3.56 to v4.14 2019-05-04 21:14:48 +03:00
tgzsrc Moved scintilla in trunk remotely 2009-04-24 23:35:41 +00:00
version.txt Upgrade Scintilla from 4.1.4 to 4.2.0 2019-07-22 13:08:41 +02:00
zipsrc.bat Moved scintilla in trunk remotely 2009-04-24 23:35:41 +00:00

README for building of Scintilla and SciTE

Scintilla can be built by itself.
To build SciTE, Scintilla must first be built.


*** GTK+/Linux version ***

You must first have GTK+ 2.24 or later and GCC (7.1 or better) installed.
Clang may be used by adding CLANG=1 to the make command line.
Other C++ compilers may work but may require tweaking the make file.
Either GTK+ 2.x or 3.x may be used with 2.x the default and 3.x
chosen with the make argument GTK3=1.

To build Scintilla, use the makefile located in the scintilla/gtk directory
	cd scintilla/gtk
	make
	cd ../..

To build and install SciTE, use the makefile located in the scite/gtk directory
	cd scite/gtk
	make
	sudo make install

This installs SciTE into $prefix/bin. The value of $prefix is determined from
the location of Gnome if it is installed. This is usually /usr if installed
with Linux or /usr/local if built from source. If Gnome is not installed
/usr/bin is used as the prefix. The prefix can be overridden on the command
line like "make prefix=/opt" but the same value should be used for both make
and make install as this location is compiled into the executable. The global
properties file is installed at $prefix/share/scite/SciTEGlobal.properties.
The language specific properties files are also installed into this directory.

To remove SciTE
	sudo make uninstall

To clean the object files which may be needed to change $prefix
	make clean

The current make file only supports static linking between SciTE and Scintilla.


*** Windows version ***

A C++ 17 compiler is required.
Visual Studio 2017 is the development system used for most development
although Mingw-w64 7.1 is also supported.

To build Scintilla, make in the scintilla/win32 directory
		cd scintilla\win32
GCC:		mingw32-make
Visual C++:	nmake -f scintilla.mak
		cd ..\..

To build SciTE, use the makefiles located in the scite/win32 directory
		cd scite\win32
GCC:		mingw32-make
Visual C++: 	nmake -f scite.mak

An executable SciTE will now be in scite/bin.

*** GTK+/Windows version ***

Mingw-w64 is known to work. Other compilers will probably not work.

Only Scintilla will build with GTK+ on Windows. SciTE will not work.

To build Scintilla, make in the scintilla/gtk directory
	cd scintilla\gtk
	mingw32-make

*** macOS Cocoa version ***

Xcode 9.2 or later may be used to build Scintilla on macOS.

There is no open source version of SciTE for macOS but there is a commercial
version available through the App Store.

To build Scintilla, run xcodebuild in the scintilla/cocoa/ScintillaFramework directory
        cd cocoa/ScintillaFramework
	xcodebuild

*** Qt version ***

See the qt/README file to build Scintilla with Qt.