| #ifndef _TCUWAYLAND_HPP |
| #define _TCUWAYLAND_HPP |
| /*------------------------------------------------------------------------- |
| * drawElements Quality Program Tester Core |
| * ---------------------------------------- |
| * |
| * Copyright (c) 2014 The Android Open Source Project |
| * Copyright (c) 2016 The Khronos Group Inc. |
| * Copyright (c) 2016 Mun Gwan-gyeong <elongbug@gmail.com> |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief wayland utilities. |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "tcuDefs.hpp" |
| #include "gluRenderConfig.hpp" |
| #include "gluPlatform.hpp" |
| #include "deMutex.hpp" |
| |
| #include <wayland-client.h> |
| #include <wayland-egl.h> |
| |
| namespace tcu |
| { |
| namespace wayland |
| { |
| |
| enum |
| { |
| DEFAULT_WINDOW_WIDTH = 400, |
| DEFAULT_WINDOW_HEIGHT = 300 |
| }; |
| |
| class EventState |
| { |
| public: |
| EventState (void); |
| virtual ~EventState (void); |
| |
| void setQuitFlag (bool quit); |
| bool getQuitFlag (void); |
| |
| protected: |
| de::Mutex m_mutex; |
| bool m_quit; |
| |
| private: |
| EventState (const EventState&); |
| EventState& operator= (const EventState&); |
| }; |
| |
| class Display |
| { |
| public: |
| Display (EventState& platform, const char* name); |
| virtual ~Display (void); |
| |
| struct wl_display* getDisplay (void) { return m_display; } |
| struct wl_compositor* getCompositor (void) { return m_compositor; } |
| struct wl_shell* getShell (void) { return m_shell; } |
| |
| void processEvents (void); |
| |
| protected: |
| EventState& m_eventState; |
| struct wl_display* m_display; |
| struct wl_registry* m_registry; |
| struct wl_compositor* m_compositor; |
| struct wl_shell* m_shell; |
| |
| private: |
| Display (const Display&); |
| Display& operator= (const Display&); |
| |
| static const struct wl_registry_listener s_registryListener; |
| |
| static void handleGlobal (void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version); |
| static void handleGlobalRemove (void* data, struct wl_registry* registry, uint32_t name); |
| }; |
| |
| class Window |
| { |
| public: |
| Window (Display& display, int width, int height); |
| ~Window (void); |
| |
| void setVisibility (bool visible); |
| |
| void processEvents (void); |
| Display& getDisplay (void) { return m_display; } |
| void* getSurface (void) { return m_surface; } |
| void* getWindow (void) { return m_window; } |
| |
| void getDimensions (int* width, int* height) const; |
| void setDimensions (int width, int height); |
| |
| protected: |
| |
| Display& m_display; |
| struct wl_egl_window* m_window; |
| struct wl_surface* m_surface; |
| struct wl_shell_surface* m_shellSurface; |
| bool m_visible; |
| |
| private: |
| Window (const Window&); |
| Window& operator= (const Window&); |
| |
| static const struct wl_shell_surface_listener s_shellSurfaceListener; |
| |
| static void handlePing (void* data, struct wl_shell_surface* shellSurface, uint32_t serial); |
| static void handleConfigure (void* data, struct wl_shell_surface* shellSurface, uint32_t edges, int32_t width, int32_t height); |
| static void handlePopupDone (void* data, struct wl_shell_surface* shellSurface); |
| }; |
| |
| } // wayland |
| } // tcu |
| |
| #endif // _TCUWAYLAND_HPP |