File: DeferredMotionDelta.h

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (56 lines) | stat: -rw-r--r-- 859 bytes parent folder | download | duplicates (6)
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
46
47
48
49
50
51
52
53
54
55
56
#pragma once

#include <functional>

#include "event/SingleIdleCallback.h"

namespace wxutil
{

/**
 * A class accumulating mouse motion delta calls. When GTK is idle, 
 * the attached function object is called with the stored x,y delta values.
 */
class DeferredMotionDelta :
	private wxutil::SingleIdleCallback
{
public:
	typedef std::function<void(int, int)> MotionDeltaFunction;

private:
	int _deltaX;
	int _deltaY;

	MotionDeltaFunction _function;

public:
	DeferredMotionDelta(const MotionDeltaFunction& function) : 
		_deltaX(0), 
		_deltaY(0),
		_function(function)
	{}

	void flush()
	{
		flushIdleCallback();
	}

	void onMouseMotionDelta(int x, int y, unsigned int state)
	{
		_deltaX += x;
		_deltaY += y;

		requestIdleCallback();
	}

private:
	void onIdle()
	{
		_function(_deltaX, _deltaY);

		_deltaX = 0;
		_deltaY = 0;
	}
};

} // namespace