summaryrefslogtreecommitdiff
path: root/components/IMouseArea.qml
blob: e817bca2da76a7e1c56ab4c4ad1e11594c4ada97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/// NOTE: This is not zero cost, there's performance penalty, only use this instead of mousearea if hover is strictly required to be still
/// Such as when the component may appear where the mouse is already is

import QtQuick

MouseArea {
	hoverEnabled: true

	property real gx: Number.MAX_VALUE
	property real gy: Number.MAX_VALUE

	property bool hovered: false

	signal entered_
	signal positionChanged_(var mouse)

	onPositionChanged: mouse => {
		let gpos = mapToItem(null, mouse.x, mouse.y);

		if (gx === Number.MAX_VALUE && gy === Number.MAX_VALUE) {
			gx = gpos.x;
			gy = gpos.y;
			return;
		}

		if (gpos.x === gx && gpos.y === gy)
			return;

		gx = gpos.x;
		gy = gpos.y;

		if (!hovered) {
			hovered = true;
			entered_();
		}

		positionChanged_(mouse);
	}

	onExited: {
		hovered = false;
		gx = Number.MAX_VALUE;
		gy = Number.MAX_VALUE;
	}
}