summaryrefslogtreecommitdiffstats
path: root/video/out/wayland_common.h
diff options
context:
space:
mode:
authorAlexander Preisinger <alexander.preisinger@gmail.com>2013-02-28 19:55:02 +0100
committerAlexander Preisinger <alexander.preisinger@gmail.com>2013-02-28 20:01:33 +0100
commitbf9b9c3bd0d0fe9d9116cbe287559bad5efe00fc (patch)
tree94b1ee6efdf220a5d671528726e46f10e258d5d2 /video/out/wayland_common.h
parentf143eec611356acd9e694a1bf8dfcdf5b729a685 (diff)
downloadmpv-bf9b9c3bd0d0fe9d9116cbe287559bad5efe00fc.tar.bz2
mpv-bf9b9c3bd0d0fe9d9116cbe287559bad5efe00fc.tar.xz
wayland: add wayland support
All wayland only specific routines are placed in wayland_common. This makes it easier to write other video outputs. The EGL specific parts, as well as opengl context creation, are in gl_common. This backend works for: * opengl-old * opengl * opengl-hq To use it just specify the opengl backend --vo=opengl:backend=wayland or disable the x11 build. Don't forget to set EGL_PLATFORM to wayland. Co-Author: Scott Moreau (Sorry I lost the old commit history due to the file structure changes)
Diffstat (limited to 'video/out/wayland_common.h')
-rw-r--r--video/out/wayland_common.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/video/out/wayland_common.h b/video/out/wayland_common.h
new file mode 100644
index 0000000000..1a6791a766
--- /dev/null
+++ b/video/out/wayland_common.h
@@ -0,0 +1,153 @@
+/*
+ * This file is part of MPlayer.
+ * Copyright © 2012-2013 Scott Moreau <oreaus@gmail.com>
+ * Copyright © 2012-2013 Alexander Preisinger <alexander.preisinger@gmail.com>
+ *
+ * MPlayer is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPLAYER_WAYLAND_COMMON_H
+#define MPLAYER_WAYLAND_COMMON_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <wayland-client.h>
+#include <wayland-cursor.h>
+#include <xkbcommon/xkbcommon.h>
+
+#include "config.h"
+
+enum vo_wayland_window_type {
+ TYPE_TOPLEVEL,
+ TYPE_FULLSCREEN
+};
+
+struct vo;
+struct vo_wayland_state;
+
+struct vo_wayland_task {
+ void (*run)(struct vo_wayland_task *task,
+ uint32_t events,
+ struct vo_wayland_state *wl);
+
+ struct wl_list link;
+};
+
+struct vo_wayland_output {
+ uint32_t id; /* unique name */
+ struct wl_output *output;
+ uint32_t flags;
+ int32_t width;
+ int32_t height;
+ struct wl_list link;
+};
+
+struct vo_wayland_display {
+ struct wl_output *output;
+ struct wl_display *display;
+ struct wl_registry *registry;
+ struct wl_compositor *compositor;
+ struct wl_shell *shell;
+
+ struct {
+ struct wl_shm *shm;
+ struct wl_cursor *default_cursor;
+ struct wl_cursor_theme *theme;
+ struct wl_surface *surface;
+
+ /* save timer and pointer for fading out */
+ struct wl_pointer *pointer;
+ uint32_t serial;
+ int timer_fd;
+ struct vo_wayland_task task;
+ } cursor;
+
+ int display_fd, epoll_fd;
+ struct vo_wayland_task display_task;
+
+ struct wl_list output_list;
+ struct wl_output *fs_output; /* fullscreen output */
+ int output_mode_received;
+
+ uint32_t formats;
+ uint32_t mask;
+};
+
+struct vo_wayland_window {
+ int32_t width;
+ int32_t height;
+ int32_t p_width;
+ int32_t p_height;
+
+ int32_t pending_width;
+ int32_t pending_height;
+ uint32_t edges;
+ int resize_needed;
+
+ struct wl_surface *surface;
+ struct wl_shell_surface *shell_surface;
+ struct wl_buffer *buffer;
+ struct wl_callback *callback;
+
+ int events; /* mplayer events */
+
+ enum vo_wayland_window_type type; /* is fullscreen */
+};
+
+struct vo_wayland_input {
+ struct wl_seat *seat;
+ struct wl_keyboard *keyboard;
+ struct wl_pointer *pointer;
+
+ struct {
+ struct xkb_context *context;
+ struct xkb_keymap *keymap;
+ struct xkb_state *state;
+ xkb_mod_mask_t shift_mask;
+ xkb_mod_mask_t control_mask;
+ xkb_mod_mask_t alt_mask;
+ } xkb;
+
+ int modifiers;
+ int events;
+
+ struct {
+ uint32_t sym;
+ uint32_t key;
+ uint32_t time;
+ int timer_fd;
+ struct vo_wayland_task task;
+ } repeat;
+};
+
+struct vo_wayland_state {
+ struct vo *vo;
+
+ struct vo_wayland_display *display;
+ struct vo_wayland_window *window;
+ struct vo_wayland_input *input;
+};
+
+int vo_wayland_init(struct vo *vo);
+void vo_wayland_uninit(struct vo *vo);
+void vo_wayland_ontop(struct vo *vo);
+void vo_wayland_border(struct vo *vo);
+void vo_wayland_fullscreen(struct vo *vo);
+void vo_wayland_update_screeninfo(struct vo *vo);
+int vo_wayland_check_events(struct vo *vo);
+void vo_wayland_update_window_title(struct vo *vo);
+
+#endif /* MPLAYER_WAYLAND_COMMON_H */
+