• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "xdg-shell.h"
36 
37 namespace tcu
38 {
39 namespace lnx
40 {
41 namespace wayland
42 {
43 
44 class Display
45 {
46 public:
47 							Display					(EventState& platform, const char* name);
48 	virtual					~Display				(void);
49 
getDisplay(void)50 	struct wl_display*		getDisplay				(void) { return m_display;		}
getCompositor(void)51 	struct wl_compositor*	getCompositor			(void) { return m_compositor;	}
getShell(void)52 	struct xdg_wm_base*		getShell				(void) { return m_shell;		}
53 
54 	void					processEvents			(void);
55 	static bool				hasDisplay				(const char* name);
56 
57 	enum DisplayState
58 	{
59 		DISPLAY_STATE_UNKNOWN = -1,
60 		DISPLAY_STATE_UNAVAILABLE,
61 		DISPLAY_STATE_AVAILABLE
62 	};
63 	static DisplayState		s_displayState;
64 
65 protected:
66 	EventState&				m_eventState;
67 	struct wl_display*		m_display;
68 	struct wl_registry*		m_registry;
69 	struct wl_compositor*	m_compositor;
70 	struct xdg_wm_base*		m_shell;
71 
72 private:
73 							Display					(const Display&);
74 	Display&				operator=				(const Display&);
75 
76 	static const struct wl_registry_listener		s_registryListener;
77 
78 	static void				handleGlobal			(void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version);
79 	static void				handleGlobalRemove		(void* data, struct wl_registry* registry, uint32_t name);
80 };
81 
82 class Window
83 {
84 public:
85 							Window					(Display& display, int width, int height);
86 							~Window					(void);
87 
88 	void					setVisibility			(bool visible);
89 
90 	void					processEvents			(void);
getDisplay(void)91 	Display&				getDisplay				(void) { return m_display; }
getSurface(void)92 	void*					getSurface				(void) { return m_surface; }
getWindow(void)93 	void*					getWindow				(void) { return m_window; }
94 
95 	void					getDimensions			(int* width, int* height) const;
96 	void					setDimensions			(int width, int height);
97 
98 protected:
99 
100 	Display&					m_display;
101 	struct wl_egl_window*		m_window;
102 	struct wl_surface*			m_surface;
103 	struct xdg_surface*			m_xdgSurface;
104 	struct xdg_toplevel*		m_topLevel;
105 	bool						m_configured;
106 	bool						m_visible;
107 
108 private:
109 							Window					(const Window&);
110 	Window&					operator=				(const Window&);
111 
112 	static const struct xdg_surface_listener	s_xdgSurfaceListener;
113 	static const struct xdg_wm_base_listener	s_wmBaseListener;
114 
115 	static void				handlePing				(void* data, struct xdg_wm_base* shellSurface, uint32_t serial);
116 	static void				handleConfigure			(void* data, struct xdg_surface* shellSurface, uint32_t serial);
117 
118 	static bool				s_addWMBaseListener;
119 };
120 
121 } // wayland
122 } // lnx
123 } // tcu
124 
125 #endif // _TCULNXWAYLAND_HPP
126