2021-01-15 09:30:03 +00:00
|
|
|
/*
|
|
|
|
Looking Glass - KVM FrameRelay (KVMFR) Client
|
|
|
|
Copyright (C) 2017-2021 Geoffrey McRae <geoff@hostfission.com>
|
|
|
|
https://looking-glass.hostfission.com
|
|
|
|
|
|
|
|
This program 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.
|
|
|
|
|
|
|
|
This program 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
|
|
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
|
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _H_I_DISPLAYSERVER_
|
|
|
|
#define _H_I_DISPLAYSERVER_
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
2021-01-26 10:46:30 +00:00
|
|
|
#include <EGL/egl.h>
|
2021-01-15 09:30:03 +00:00
|
|
|
|
|
|
|
typedef enum LG_ClipboardData
|
|
|
|
{
|
|
|
|
LG_CLIPBOARD_DATA_TEXT = 0,
|
|
|
|
LG_CLIPBOARD_DATA_PNG,
|
|
|
|
LG_CLIPBOARD_DATA_BMP,
|
|
|
|
LG_CLIPBOARD_DATA_TIFF,
|
|
|
|
LG_CLIPBOARD_DATA_JPEG,
|
|
|
|
|
|
|
|
LG_CLIPBOARD_DATA_NONE // enum max, not a data type
|
|
|
|
}
|
|
|
|
LG_ClipboardData;
|
|
|
|
|
|
|
|
typedef enum LG_DSProperty
|
|
|
|
{
|
2021-01-16 10:17:35 +00:00
|
|
|
/**
|
|
|
|
* returns the maximum number of samples supported
|
|
|
|
* if not implemented LG assumes no multisample support
|
|
|
|
* return data type: int
|
|
|
|
*/
|
|
|
|
LG_DS_MAX_MULTISAMPLE,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* returns if the platform is warp capable
|
|
|
|
* if not implemented LG assumes that the platform is warp capable
|
|
|
|
* return data type: bool
|
|
|
|
*/
|
|
|
|
LG_DS_WARP_SUPPORT,
|
2021-01-15 09:30:03 +00:00
|
|
|
}
|
|
|
|
LG_DSProperty;
|
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
typedef struct LG_DSInitParams
|
|
|
|
{
|
|
|
|
const char * title;
|
|
|
|
int x, y, w, h;
|
|
|
|
bool center;
|
|
|
|
bool fullscreen;
|
|
|
|
bool resizable;
|
|
|
|
bool borderless;
|
|
|
|
bool maximize;
|
|
|
|
bool minimizeOnFocusLoss;
|
|
|
|
}
|
|
|
|
LG_DSInitParams;
|
|
|
|
|
2021-01-15 09:30:03 +00:00
|
|
|
typedef void (* LG_ClipboardReplyFn)(void * opaque, const LG_ClipboardData type,
|
|
|
|
uint8_t * data, uint32_t size);
|
|
|
|
|
|
|
|
struct LG_DisplayServerOps
|
|
|
|
{
|
2021-01-26 10:46:30 +00:00
|
|
|
/* return true if the selected ds is valid for the current platform */
|
|
|
|
bool (*probe)(void);
|
2021-01-15 09:30:03 +00:00
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
/* called before anything has been initialized */
|
2021-01-16 09:29:54 +00:00
|
|
|
bool (*earlyInit)(void);
|
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
/* called when it's time to create and show the application window */
|
|
|
|
bool (*init)(const LG_DSInitParams params);
|
2021-01-15 09:30:03 +00:00
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
/* called at startup after window creation, renderer and SPICE is ready */
|
2021-01-15 09:30:03 +00:00
|
|
|
void (*startup)();
|
|
|
|
|
|
|
|
/* called just before final window destruction, before final free */
|
|
|
|
void (*shutdown)();
|
|
|
|
|
|
|
|
/* final free */
|
|
|
|
void (*free)();
|
|
|
|
|
2021-01-16 10:17:35 +00:00
|
|
|
/*
|
|
|
|
* return a system specific property, returns false if unsupported or failure
|
|
|
|
* if the platform does not support/implement the requested property the value
|
|
|
|
* of `ret` must not be altered.
|
|
|
|
*/
|
2021-01-15 09:30:03 +00:00
|
|
|
bool (*getProp)(LG_DSProperty prop, void * ret);
|
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
#ifdef ENABLE_EGL
|
|
|
|
/* EGL support */
|
|
|
|
EGLDisplay (*getEGLDisplay)(void);
|
|
|
|
EGLNativeWindowType (*getEGLNativeWindow)(void);
|
2021-01-26 23:59:10 +00:00
|
|
|
void (*eglSwapBuffers)(EGLDisplay display, EGLSurface surface);
|
2021-01-26 10:46:30 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* opengl platform specific methods */
|
|
|
|
void (*glSwapBuffers)(void);
|
2021-01-15 09:30:03 +00:00
|
|
|
|
|
|
|
/* dm specific cursor implementations */
|
2021-01-25 09:32:02 +00:00
|
|
|
void (*showPointer)(bool show);
|
2021-01-15 09:30:03 +00:00
|
|
|
void (*grabPointer)();
|
|
|
|
void (*ungrabPointer)();
|
|
|
|
void (*grabKeyboard)();
|
|
|
|
void (*ungrabKeyboard)();
|
|
|
|
|
2021-01-17 01:53:55 +00:00
|
|
|
/* exiting = true if the warp is to leave the window */
|
2021-01-16 18:10:52 +00:00
|
|
|
void (*warpPointer)(int x, int y, bool exiting);
|
2021-01-15 09:30:03 +00:00
|
|
|
|
2021-01-17 01:53:55 +00:00
|
|
|
/* called when the client needs to realign the pointer. This should simply
|
|
|
|
* call the appropriate app_handleMouse* method for the platform with zero
|
|
|
|
* deltas */
|
|
|
|
void (*realignPointer)();
|
|
|
|
|
2021-01-25 09:32:02 +00:00
|
|
|
/* returns true if the position specified is actually valid */
|
|
|
|
bool (*isValidPointerPos)(int x, int y);
|
|
|
|
|
2021-01-18 21:08:38 +00:00
|
|
|
/* called to disable/enable the screensaver */
|
|
|
|
void (*inhibitIdle)();
|
|
|
|
void (*uninhibitIdle)();
|
|
|
|
|
2021-01-26 10:46:30 +00:00
|
|
|
/* wait for the specified time without blocking UI processing/event loops */
|
|
|
|
void (*wait)(unsigned int time);
|
|
|
|
|
2021-01-27 00:11:53 +00:00
|
|
|
/* get/set the window dimensions */
|
2021-01-26 10:46:30 +00:00
|
|
|
void (*setWindowSize)(int x, int y);
|
2021-01-27 00:11:53 +00:00
|
|
|
bool (*getFullscreen)(void);
|
2021-01-26 10:46:30 +00:00
|
|
|
void (*setFullscreen)(bool fs);
|
|
|
|
|
2021-01-15 09:30:03 +00:00
|
|
|
/* clipboard support */
|
2021-01-25 08:58:36 +00:00
|
|
|
bool (*cbInit)(void);
|
|
|
|
void (*cbNotice)(LG_ClipboardData type);
|
|
|
|
void (*cbRelease)(void);
|
|
|
|
void (*cbRequest)(LG_ClipboardData type);
|
2021-01-15 09:30:03 +00:00
|
|
|
};
|
|
|
|
|
2021-01-26 23:41:11 +00:00
|
|
|
#define IS_LG_DS_VALID(x) \
|
|
|
|
((x)->probe && \
|
|
|
|
(x)->earlyInit && \
|
|
|
|
(x)->init && \
|
|
|
|
(x)->startup && \
|
|
|
|
(x)->shutdown && \
|
|
|
|
(x)->free && \
|
|
|
|
(x)->getProp && \
|
|
|
|
(x)->getEGLDisplay && \
|
|
|
|
(x)->getEGLNativeWindow && \
|
2021-01-26 23:59:10 +00:00
|
|
|
(x)->eglSwapBuffers && \
|
2021-01-26 23:41:11 +00:00
|
|
|
(x)->glSwapBuffers && \
|
|
|
|
(x)->showPointer && \
|
|
|
|
(x)->grabPointer && \
|
|
|
|
(x)->ungrabPointer && \
|
|
|
|
(x)->warpPointer && \
|
|
|
|
(x)->realignPointer && \
|
|
|
|
(x)->isValidPointerPos && \
|
|
|
|
(x)->inhibitIdle && \
|
|
|
|
(x)->uninhibitIdle && \
|
|
|
|
(x)->wait && \
|
|
|
|
(x)->setWindowSize && \
|
2021-01-27 00:11:53 +00:00
|
|
|
(x)->setFullscreen && \
|
|
|
|
(x)->getFullscreen)
|
2021-01-15 09:30:03 +00:00
|
|
|
#endif
|