blob: b7c540a81e126544dbf2d6289fe777d2e94a6cf9 [file] [log] [blame]
#ifndef _TCULNXWAYLAND_HPP
#define _TCULNXWAYLAND_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 "tcuLnx.hpp"
#include <wayland-client.h>
#include <wayland-egl.h>
namespace tcu
{
namespace lnx
{
namespace wayland
{
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);
static bool hasDisplay (const char* name);
enum DisplayState
{
DISPLAY_STATE_UNKNOWN = -1,
DISPLAY_STATE_UNAVAILABLE,
DISPLAY_STATE_AVAILABLE
};
static DisplayState s_displayState;
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
} // lnx
} // tcu
#endif // _TCULNXWAYLAND_HPP