cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

SDL_waylandtouch.h (11227B)


      1/*
      2  Simple DirectMedia Layer
      3  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
      4
      5  This software is provided 'as-is', without any express or implied
      6  warranty.  In no event will the authors be held liable for any damages
      7  arising from the use of this software.
      8
      9  Permission is granted to anyone to use this software for any purpose,
     10  including commercial applications, and to alter it and redistribute it
     11  freely, subject to the following restrictions:
     12
     13  1. The origin of this software must not be misrepresented; you must not
     14     claim that you wrote the original software. If you use this software
     15     in a product, an acknowledgment in the product documentation would be
     16     appreciated but is not required.
     17  2. Altered source versions must be plainly marked as such, and must not be
     18     misrepresented as being the original software.
     19  3. This notice may not be removed or altered from any source distribution.
     20*/
     21
     22#include "../../SDL_internal.h"
     23
     24#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
     25
     26#ifndef _SDL_waylandtouch_h
     27#define _SDL_waylandtouch_h
     28
     29#include "SDL_waylandvideo.h"
     30#include <stdint.h>
     31#include <stddef.h>
     32#include "wayland-util.h"
     33#include "SDL_waylanddyn.h"
     34
     35
     36void Wayland_touch_create(SDL_VideoData *data, uint32_t id);
     37void Wayland_touch_destroy(SDL_VideoData *data);
     38
     39struct qt_touch_extension;
     40
     41/* Autogenerated QT headers */
     42
     43/*
     44 Support for Wayland with QmlCompositor as Server
     45================================================
     46
     47The Wayland video driver has support for some additional features when
     48using QtWayland's "qmlcompositor" as Wayland server. This is needed for touch
     49input when running SDL applications under a qmlcompositor Wayland server.
     50
     51The files following headers have been
     52generated from the Wayland XML Protocol Definition in QtWayland as follows:
     53
     54Clone QtWayland from Git:
     55    http://qt.gitorious.org/qt/qtwayland/
     56
     57Generate headers and glue code:
     58    for extension in touch-extension surface-extension windowmanager; do
     59        wayland-scanner client-header < src/extensions/$extension.xml > wayland-qt-$extension.h
     60        wayland-scanner code < src/extensions/$extension.xml > wayland-qt-$extension.c
     61    done
     62
     63*/
     64
     65/* wayland-qt-surface-extension.h */
     66
     67struct wl_client;
     68struct wl_resource;
     69
     70struct qt_surface_extension;
     71struct qt_extended_surface;
     72
     73extern const struct wl_interface qt_surface_extension_interface;
     74extern const struct wl_interface qt_extended_surface_interface;
     75
     76#define QT_SURFACE_EXTENSION_GET_EXTENDED_SURFACE   0
     77
     78static inline void
     79qt_surface_extension_set_user_data(struct qt_surface_extension *qt_surface_extension, void *user_data)
     80{
     81    wl_proxy_set_user_data((struct wl_proxy *) qt_surface_extension, user_data);
     82}
     83
     84static inline void *
     85qt_surface_extension_get_user_data(struct qt_surface_extension *qt_surface_extension)
     86{
     87    return wl_proxy_get_user_data((struct wl_proxy *) qt_surface_extension);
     88}
     89
     90static inline void
     91qt_surface_extension_destroy(struct qt_surface_extension *qt_surface_extension)
     92{
     93    WAYLAND_wl_proxy_destroy((struct wl_proxy *) qt_surface_extension);
     94}
     95
     96static inline struct qt_extended_surface *
     97qt_surface_extension_get_extended_surface(struct qt_surface_extension *qt_surface_extension, struct wl_surface *surface)
     98{
     99    struct wl_proxy *id;
    100
    101    id = wl_proxy_create((struct wl_proxy *) qt_surface_extension,
    102                 &qt_extended_surface_interface);
    103    if (!id)
    104        return NULL;
    105
    106    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_surface_extension,
    107             QT_SURFACE_EXTENSION_GET_EXTENDED_SURFACE, id, surface);
    108
    109    return (struct qt_extended_surface *) id;
    110}
    111
    112#ifndef QT_EXTENDED_SURFACE_ORIENTATION_ENUM
    113#define QT_EXTENDED_SURFACE_ORIENTATION_ENUM
    114enum qt_extended_surface_orientation {
    115    QT_EXTENDED_SURFACE_ORIENTATION_PRIMARYORIENTATION = 0,
    116    QT_EXTENDED_SURFACE_ORIENTATION_PORTRAITORIENTATION = 1,
    117    QT_EXTENDED_SURFACE_ORIENTATION_LANDSCAPEORIENTATION = 2,
    118    QT_EXTENDED_SURFACE_ORIENTATION_INVERTEDPORTRAITORIENTATION = 4,
    119    QT_EXTENDED_SURFACE_ORIENTATION_INVERTEDLANDSCAPEORIENTATION = 8,
    120};
    121#endif /* QT_EXTENDED_SURFACE_ORIENTATION_ENUM */
    122
    123#ifndef QT_EXTENDED_SURFACE_WINDOWFLAG_ENUM
    124#define QT_EXTENDED_SURFACE_WINDOWFLAG_ENUM
    125enum qt_extended_surface_windowflag {
    126    QT_EXTENDED_SURFACE_WINDOWFLAG_OVERRIDESSYSTEMGESTURES = 1,
    127    QT_EXTENDED_SURFACE_WINDOWFLAG_STAYSONTOP = 2,
    128};
    129#endif /* QT_EXTENDED_SURFACE_WINDOWFLAG_ENUM */
    130
    131struct qt_extended_surface_listener {
    132    /**
    133     * onscreen_visibility - (none)
    134     * @visible: (none)
    135     */
    136    void (*onscreen_visibility)(void *data,
    137                    struct qt_extended_surface *qt_extended_surface,
    138                    int32_t visible);
    139    /**
    140     * set_generic_property - (none)
    141     * @name: (none)
    142     * @value: (none)
    143     */
    144    void (*set_generic_property)(void *data,
    145                     struct qt_extended_surface *qt_extended_surface,
    146                     const char *name,
    147                     struct wl_array *value);
    148    /**
    149     * close - (none)
    150     */
    151    void (*close)(void *data,
    152              struct qt_extended_surface *qt_extended_surface);
    153};
    154
    155static inline int
    156qt_extended_surface_add_listener(struct qt_extended_surface *qt_extended_surface,
    157                 const struct qt_extended_surface_listener *listener, void *data)
    158{
    159    return wl_proxy_add_listener((struct wl_proxy *) qt_extended_surface,
    160                     (void (**)(void)) listener, data);
    161}
    162
    163#define QT_EXTENDED_SURFACE_UPDATE_GENERIC_PROPERTY 0
    164#define QT_EXTENDED_SURFACE_SET_CONTENT_ORIENTATION 1
    165#define QT_EXTENDED_SURFACE_SET_WINDOW_FLAGS    2
    166
    167static inline void
    168qt_extended_surface_set_user_data(struct qt_extended_surface *qt_extended_surface, void *user_data)
    169{
    170    WAYLAND_wl_proxy_set_user_data((struct wl_proxy *) qt_extended_surface, user_data);
    171}
    172
    173static inline void *
    174qt_extended_surface_get_user_data(struct qt_extended_surface *qt_extended_surface)
    175{
    176    return WAYLAND_wl_proxy_get_user_data((struct wl_proxy *) qt_extended_surface);
    177}
    178
    179static inline void
    180qt_extended_surface_destroy(struct qt_extended_surface *qt_extended_surface)
    181{
    182    WAYLAND_wl_proxy_destroy((struct wl_proxy *) qt_extended_surface);
    183}
    184
    185static inline void
    186qt_extended_surface_update_generic_property(struct qt_extended_surface *qt_extended_surface, const char *name, struct wl_array *value)
    187{
    188    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_extended_surface,
    189             QT_EXTENDED_SURFACE_UPDATE_GENERIC_PROPERTY, name, value);
    190}
    191
    192static inline void
    193qt_extended_surface_set_content_orientation(struct qt_extended_surface *qt_extended_surface, int32_t orientation)
    194{
    195    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_extended_surface,
    196             QT_EXTENDED_SURFACE_SET_CONTENT_ORIENTATION, orientation);
    197}
    198
    199static inline void
    200qt_extended_surface_set_window_flags(struct qt_extended_surface *qt_extended_surface, int32_t flags)
    201{
    202    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_extended_surface,
    203             QT_EXTENDED_SURFACE_SET_WINDOW_FLAGS, flags);
    204}
    205
    206/* wayland-qt-touch-extension.h */
    207
    208extern const struct wl_interface qt_touch_extension_interface;
    209
    210#ifndef QT_TOUCH_EXTENSION_FLAGS_ENUM
    211#define QT_TOUCH_EXTENSION_FLAGS_ENUM
    212enum qt_touch_extension_flags {
    213    QT_TOUCH_EXTENSION_FLAGS_MOUSE_FROM_TOUCH = 0x1,
    214};
    215#endif /* QT_TOUCH_EXTENSION_FLAGS_ENUM */
    216
    217struct qt_touch_extension_listener {
    218    /**
    219     * touch - (none)
    220     * @time: (none)
    221     * @id: (none)
    222     * @state: (none)
    223     * @x: (none)
    224     * @y: (none)
    225     * @normalized_x: (none)
    226     * @normalized_y: (none)
    227     * @width: (none)
    228     * @height: (none)
    229     * @pressure: (none)
    230     * @velocity_x: (none)
    231     * @velocity_y: (none)
    232     * @flags: (none)
    233     * @rawdata: (none)
    234     */
    235    void (*touch)(void *data,
    236              struct qt_touch_extension *qt_touch_extension,
    237              uint32_t time,
    238              uint32_t id,
    239              uint32_t state,
    240              int32_t x,
    241              int32_t y,
    242              int32_t normalized_x,
    243              int32_t normalized_y,
    244              int32_t width,
    245              int32_t height,
    246              uint32_t pressure,
    247              int32_t velocity_x,
    248              int32_t velocity_y,
    249              uint32_t flags,
    250              struct wl_array *rawdata);
    251    /**
    252     * configure - (none)
    253     * @flags: (none)
    254     */
    255    void (*configure)(void *data,
    256              struct qt_touch_extension *qt_touch_extension,
    257              uint32_t flags);
    258};
    259
    260static inline int
    261qt_touch_extension_add_listener(struct qt_touch_extension *qt_touch_extension,
    262                const struct qt_touch_extension_listener *listener, void *data)
    263{
    264    return wl_proxy_add_listener((struct wl_proxy *) qt_touch_extension,
    265                     (void (**)(void)) listener, data);
    266}
    267
    268#define QT_TOUCH_EXTENSION_DUMMY    0
    269
    270static inline void
    271qt_touch_extension_set_user_data(struct qt_touch_extension *qt_touch_extension, void *user_data)
    272{
    273    WAYLAND_wl_proxy_set_user_data((struct wl_proxy *) qt_touch_extension, user_data);
    274}
    275
    276static inline void *
    277qt_touch_extension_get_user_data(struct qt_touch_extension *qt_touch_extension)
    278{
    279    return WAYLAND_wl_proxy_get_user_data((struct wl_proxy *) qt_touch_extension);
    280}
    281
    282static inline void
    283qt_touch_extension_destroy(struct qt_touch_extension *qt_touch_extension)
    284{
    285    WAYLAND_wl_proxy_destroy((struct wl_proxy *) qt_touch_extension);
    286}
    287
    288static inline void
    289qt_touch_extension_dummy(struct qt_touch_extension *qt_touch_extension)
    290{
    291    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_touch_extension,
    292             QT_TOUCH_EXTENSION_DUMMY);
    293}
    294
    295
    296/* wayland-qt-windowmanager.h */
    297
    298extern const struct wl_interface qt_windowmanager_interface;
    299
    300struct qt_windowmanager_listener {
    301    /**
    302     * hints - (none)
    303     * @show_is_fullscreen: (none)
    304     */
    305    void (*hints)(void *data,
    306              struct qt_windowmanager *qt_windowmanager,
    307              int32_t show_is_fullscreen);
    308    /**
    309     * quit - (none)
    310     */
    311    void (*quit)(void *data,
    312             struct qt_windowmanager *qt_windowmanager);
    313};
    314
    315static inline int
    316qt_windowmanager_add_listener(struct qt_windowmanager *qt_windowmanager,
    317                  const struct qt_windowmanager_listener *listener, void *data)
    318{
    319    return wl_proxy_add_listener((struct wl_proxy *) qt_windowmanager,
    320                     (void (**)(void)) listener, data);
    321}
    322
    323#define QT_WINDOWMANAGER_OPEN_URL   0
    324
    325static inline void
    326qt_windowmanager_set_user_data(struct qt_windowmanager *qt_windowmanager, void *user_data)
    327{
    328    WAYLAND_wl_proxy_set_user_data((struct wl_proxy *) qt_windowmanager, user_data);
    329}
    330
    331static inline void *
    332qt_windowmanager_get_user_data(struct qt_windowmanager *qt_windowmanager)
    333{
    334    return WAYLAND_wl_proxy_get_user_data((struct wl_proxy *) qt_windowmanager);
    335}
    336
    337static inline void
    338qt_windowmanager_destroy(struct qt_windowmanager *qt_windowmanager)
    339{
    340    WAYLAND_wl_proxy_destroy((struct wl_proxy *) qt_windowmanager);
    341}
    342
    343static inline void
    344qt_windowmanager_open_url(struct qt_windowmanager *qt_windowmanager, uint32_t remaining, const char *url)
    345{
    346    WAYLAND_wl_proxy_marshal((struct wl_proxy *) qt_windowmanager,
    347             QT_WINDOWMANAGER_OPEN_URL, remaining, url);
    348}
    349
    350#endif /* _SDL_waylandtouch_h */
    351
    352#endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */