Home | History | Annotate | Download | only in wayland
      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 (at) 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 
     36 namespace tcu
     37 {
     38 namespace lnx
     39 {
     40 namespace wayland
     41 {
     42 
     43 class Display
     44 {
     45 public:
     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 
     55 protected:
     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 
     62 private:
     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 
     72 class Window
     73 {
     74 public:
     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 
     88 protected:
     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 
     96 private:
     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