summaryrefslogtreecommitdiff
path: root/platform/haiku/haiku_direct_window.h
blob: c985cdc5d6f24478209be9dddfef70fa582d7ff4 (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
46
47
48
49
#ifndef HAIKU_DIRECT_WINDOW_H
#define HAIKU_DIRECT_WINDOW_H

#include <kernel/image.h> // needed for image_id
#include <DirectWindow.h>

#include "os/input.h"
#include "haiku_gl_view.h"

#define REDRAW_MSG 'rdrw'

class HaikuDirectWindow : public BDirectWindow 
{
private:
	unsigned int event_id;
	Point2i last_mouse_position;
	bool last_mouse_pos_valid;
	uint32 last_buttons_state;
	int last_button_mask;

	MainLoop* main_loop;
	InputDefault* input;
	HaikuGLView* view;
	BMessageRunner* update_runner;

	void DispatchMouseButton(BMessage* message);
	void DispatchMouseMoved(BMessage* message);
	inline InputModifierState GetKeyModifierState(uint32 p_state);
	inline int GetMouseButtonState(uint32 p_state);

public:
	HaikuDirectWindow(BRect p_frame);
	~HaikuDirectWindow();

	void SetHaikuGLView(HaikuGLView* p_view);
	void StartMessageRunner();
	void StopMessageRunner();
	void SetInput(InputDefault* p_input);
	void SetMainLoop(MainLoop* p_main_loop);
	virtual bool QuitRequested();
	virtual void DirectConnected(direct_buffer_info* info);
	virtual void MessageReceived(BMessage* message);
	virtual void DispatchMessage(BMessage* message, BHandler* handler);

	inline Point2i GetLastMousePosition() { return last_mouse_position; };
	inline int GetLastButtonMask() { return last_button_mask; };
};

#endif