1/*
2	Copyright 2007, Francois Revol.   All Rights Reserved.
3	This file may be used under the terms of the Be Sample Code License.
4*/
5#ifndef _PEN_INPUT_LOOPER_H
6#define _PEN_INPUT_LOOPER_H
7
8#include <MessageRunner.h>
9#include <Messenger.h>
10#include <Looper.h>
11
12/* internal messages */
13
14#define MSG_METHOD_ACTIVATED 'IMAc'
15#define MSGF_ACTIVE "active" /* bool */
16
17#define MSG_BEGIN_INK 'InkB'
18#define MSG_END_INK 'InkE'
19
20#define MSG_SHOW_WIN 'ShoW'
21#define MSG_HIDE_WIN 'HidW'
22
23#define MSG_CHECK_PEN_DOWN 'ChkP'
24
25/* menu messages */
26
27#define MSG_SET_BACKEND 'SetB'
28#define MSGF_BACKEND "backend" /* string */
29
30#define MSG_SHOW_INK 'InkS' /* toggle */
31
32
33class BMenu;
34class BWindow;
35class PenInputServerMethod;
36class PenInputInkWindow;
37class PenInputBackend;
38
39class PenInputLooper : public BLooper
40{
41public:
42	PenInputLooper(PenInputServerMethod *method);
43	virtual void	Quit();
44	void			DispatchMessage(BMessage *message, BHandler *handler);
45	void			MessageReceived(BMessage *message);
46	void			EnqueueMessage(BMessage *message);
47	status_t		InitCheck();
48
49//	virtual ~PenInputLooper();
50	void MethodActivated(bool active);
51
52private:
53	friend class PenInputInkWindow;
54	void			HandleMethodActivated(bool active);
55	PenInputServerMethod *fOwner;
56	PenInputInkWindow *fInkWindow;
57	PenInputBackend *fBackend;
58	BMenu *fDeskbarMenu;
59	BMessenger fInkWindowMsgr;
60	bool fMouseDown;
61	bool fStroking;
62	BMessageRunner *fThresholdRunner;
63	BMessage *fCachedMouseDown;
64	/* config */
65	bool fShowInk;
66	bigtime_t fMouseDownThreshold;
67};
68
69#endif /* _PEN_INPUT_LOOPER_H */
70