xref: /haiku/src/servers/app/EventStream.h (revision 057c8708f216514c6874b7c49f6ca170760b3cf0)
1 /*
2  * Copyright 2005, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Axel Dörfler, axeld@pinc-software.de
7  */
8 #ifndef EVENT_STREAM_H
9 #define EVENT_STREAM_H
10 
11 
12 #include <LinkReceiver.h>
13 #include <MessageQueue.h>
14 #include <Messenger.h>
15 
16 
17 struct shared_cursor;
18 
19 
20 class EventStream {
21 	public:
22 		EventStream();
23 		virtual ~EventStream();
24 
25 		virtual bool IsValid() = 0;
26 		virtual void SendQuit() = 0;
27 
28 		virtual bool SupportsCursorThread() const;
29 
30 		virtual void UpdateScreenBounds(BRect bounds) = 0;
31 
32 		virtual bool GetNextEvent(BMessage** _event) = 0;
33 		virtual status_t GetNextCursorPosition(BPoint& where,
34 				bigtime_t timeout = B_INFINITE_TIMEOUT);
35 
36 		virtual status_t InsertEvent(BMessage* event) = 0;
37 
38 		virtual BMessage* PeekLatestMouseMoved() = 0;
39 };
40 
41 
42 class InputServerStream : public EventStream {
43 	public:
44 		InputServerStream(BMessenger& inputServerMessenger);
45 #if TEST_MODE
46 		InputServerStream();
47 #endif
48 
49 		virtual ~InputServerStream();
50 
51 		virtual bool IsValid();
52 		virtual void SendQuit();
53 
SupportsCursorThread()54 		virtual bool SupportsCursorThread() const { return fCursorSemaphore >= B_OK; }
55 
56 		virtual void UpdateScreenBounds(BRect bounds);
57 
58 		virtual bool GetNextEvent(BMessage** _event);
59 		virtual status_t GetNextCursorPosition(BPoint& where,
60 				bigtime_t timeout = B_INFINITE_TIMEOUT);
61 
62 		virtual status_t InsertEvent(BMessage* event);
63 
64 		virtual BMessage* PeekLatestMouseMoved();
65 
66 	private:
67 		status_t _MessageFromPort(BMessage** _message,
68 			bigtime_t timeout = B_INFINITE_TIMEOUT);
69 
70 		BMessenger fInputServer;
71 		BMessageQueue fEvents;
72 		port_id	fPort;
73 		bool	fQuitting;
74 		sem_id	fCursorSemaphore;
75 		area_id	fCursorArea;
76 		shared_cursor* fCursorBuffer;
77 		BMessage* fLatestMouseMoved;
78 };
79 
80 #endif	/* EVENT_STREAM_H */
81