1#ifndef _TCULNXWAYLAND_HPP
2#define _TCULNXWAYLAND_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program Tester Core
5 * ----------------------------------------
6 *
7 * Copyright (c) 2014 The Android Open Source Project
8 * Copyright (c) 2016 The Khronos Group Inc.
9 * Copyright (c) 2016 Mun Gwan-gyeong <elongbug@gmail.com>
10 *
11 * Licensed under the Apache License, Version 2.0 (the "License");
12 * you may not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
14 *
15 *      http://www.apache.org/licenses/LICENSE-2.0
16 *
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS,
19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
22 *
23 *//*!
24 * \file
25 * \brief wayland utilities.
26 *//*--------------------------------------------------------------------*/
27
28#include "tcuDefs.hpp"
29#include "gluRenderConfig.hpp"
30#include "gluPlatform.hpp"
31#include "tcuLnx.hpp"
32
33#include <wayland-client.h>
34#include <wayland-egl.h>
35
36namespace tcu
37{
38namespace lnx
39{
40namespace wayland
41{
42
43class Display
44{
45public:
46							Display					(EventState& platform, const char* name);
47	virtual					~Display				(void);
48
49	struct wl_display*		getDisplay				(void) { return m_display;		}
50	struct wl_compositor*	getCompositor			(void) { return m_compositor;	}
51	struct wl_shell*		getShell				(void) { return m_shell;		}
52
53	void					processEvents			(void);
54
55protected:
56	EventState&				m_eventState;
57	struct wl_display*		m_display;
58	struct wl_registry*		m_registry;
59	struct wl_compositor*	m_compositor;
60	struct wl_shell*		m_shell;
61
62private:
63							Display					(const Display&);
64	Display&				operator=				(const Display&);
65
66	static const struct wl_registry_listener		s_registryListener;
67
68	static void				handleGlobal			(void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version);
69	static void				handleGlobalRemove		(void* data, struct wl_registry* registry, uint32_t name);
70};
71
72class Window
73{
74public:
75							Window					(Display& display, int width, int height);
76							~Window					(void);
77
78	void					setVisibility			(bool visible);
79
80	void					processEvents			(void);
81	Display&				getDisplay				(void) { return m_display; }
82	void*					getSurface				(void) { return m_surface; }
83	void*					getWindow				(void) { return m_window; }
84
85	void					getDimensions			(int* width, int* height) const;
86	void					setDimensions			(int width, int height);
87
88protected:
89
90	Display&					m_display;
91	struct wl_egl_window*		m_window;
92	struct wl_surface*			m_surface;
93	struct wl_shell_surface*	m_shellSurface;
94	bool						m_visible;
95
96private:
97							Window					(const Window&);
98	Window&					operator=				(const Window&);
99
100	static const struct wl_shell_surface_listener	s_shellSurfaceListener;
101
102	static void				handlePing				(void* data, struct wl_shell_surface* shellSurface, uint32_t serial);
103	static void				handleConfigure			(void* data, struct wl_shell_surface* shellSurface, uint32_t edges, int32_t width, int32_t height);
104	static void				handlePopupDone			(void* data, struct wl_shell_surface* shellSurface);
105};
106
107} // wayland
108} // lnx
109} // tcu
110
111#endif // _TCULNXWAYLAND_HPP
112