1#ifndef _TCUWAYLAND_HPP 2#define _TCUWAYLAND_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 "deMutex.hpp" 32 33#include <wayland-client.h> 34#include <wayland-egl.h> 35 36namespace tcu 37{ 38namespace wayland 39{ 40 41enum 42{ 43 DEFAULT_WINDOW_WIDTH = 400, 44 DEFAULT_WINDOW_HEIGHT = 300 45}; 46 47class EventState 48{ 49public: 50 EventState (void); 51 virtual ~EventState (void); 52 53 void setQuitFlag (bool quit); 54 bool getQuitFlag (void); 55 56protected: 57 de::Mutex m_mutex; 58 bool m_quit; 59 60private: 61 EventState (const EventState&); 62 EventState& operator= (const EventState&); 63}; 64 65class Display 66{ 67public: 68 Display (EventState& platform, const char* name); 69 virtual ~Display (void); 70 71 struct wl_display* getDisplay (void) { return m_display; } 72 struct wl_compositor* getCompositor (void) { return m_compositor; } 73 struct wl_shell* getShell (void) { return m_shell; } 74 75 void processEvents (void); 76 77protected: 78 EventState& m_eventState; 79 struct wl_display* m_display; 80 struct wl_registry* m_registry; 81 struct wl_compositor* m_compositor; 82 struct wl_shell* m_shell; 83 84private: 85 Display (const Display&); 86 Display& operator= (const Display&); 87 88 static const struct wl_registry_listener s_registryListener; 89 90 static void handleGlobal (void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version); 91 static void handleGlobalRemove (void* data, struct wl_registry* registry, uint32_t name); 92}; 93 94class Window 95{ 96public: 97 Window (Display& display, int width, int height); 98 ~Window (void); 99 100 void setVisibility (bool visible); 101 102 void processEvents (void); 103 Display& getDisplay (void) { return m_display; } 104 void* getSurface (void) { return m_surface; } 105 void* getWindow (void) { return m_window; } 106 107 void getDimensions (int* width, int* height) const; 108 void setDimensions (int width, int height); 109 110protected: 111 112 Display& m_display; 113 struct wl_egl_window* m_window; 114 struct wl_surface* m_surface; 115 struct wl_shell_surface* m_shellSurface; 116 bool m_visible; 117 118private: 119 Window (const Window&); 120 Window& operator= (const Window&); 121 122 static const struct wl_shell_surface_listener s_shellSurfaceListener; 123 124 static void handlePing (void* data, struct wl_shell_surface* shellSurface, uint32_t serial); 125 static void handleConfigure (void* data, struct wl_shell_surface* shellSurface, uint32_t edges, int32_t width, int32_t height); 126 static void handlePopupDone (void* data, struct wl_shell_surface* shellSurface); 127}; 128 129} // wayland 130} // tcu 131 132#endif // _TCUWAYLAND_HPP 133