34 #include <wayland-egl.h>
40 #include <unordered_map>
41 #include <unordered_set>
43 #include <pointer-constraints-client-protocol.h>
44 #include <relative-pointer-client-protocol.h>
45 #include <wayland-cursor.h>
46 #include <xkbcommon/xkbcommon.h>
49 #include <linux/input-event-codes.h>
73 struct wl_cursor_image
image;
78 std::unordered_set<std::string>
types;
81 struct wl_data_offer *
id;
145 struct wl_shm *
shm =
nullptr;
164 wl_output_destroy(
output->output);
192 wl_pointer_destroy(input->
pointer);
201 wl_keyboard_destroy(input->
keyboard);
209 wl_seat_destroy(input->
seat);
218 wl_shm_destroy(d->
shm);
230 wl_egl_window_destroy(os_egl_window);
234 wl_surface_destroy(os_surface);
246 ::eglTerminate(eglGetDisplay(EGLNativeDisplayType(d->
display)));
250 wl_display_disconnect(d->
display);
260 if (sym >= XKB_KEY_0 && sym <= XKB_KEY_9) {
263 else if (sym >= XKB_KEY_KP_0 && sym <= XKB_KEY_KP_9) {
266 else if (sym >= XKB_KEY_A && sym <= XKB_KEY_Z) {
269 else if (sym >= XKB_KEY_a && sym <= XKB_KEY_z) {
270 gkey =
GHOST_TKey(sym - XKB_KEY_a + XKB_KEY_A);
272 else if (sym >= XKB_KEY_F1 && sym <= XKB_KEY_F24) {
277 #define GXMAP(k, x, y) \
348 << sym <<
")" << std::endl);
359 static const std::unordered_map<GHOST_TStandardCursor, std::string>
cursors = {
404 static const std::unordered_map<std::string, GHOST_TDragnDropTypes>
mime_dnd = {
421 "text/plain;charset=utf-8",
434 struct zwp_relative_pointer_v1 * ,
444 input->
x += wl_fixed_to_int(dx);
445 input->
y += wl_fixed_to_int(dy);
482 wl_data_offer_receive(data_offer->
id, mime_receive.c_str(), pipefd[1]);
492 data_offer->
in_use.store(
false);
504 struct wl_data_source * ,
511 struct wl_data_source * ,
515 const char *
const buffer =
static_cast<char *
>(
data);
522 wl_data_source_destroy(wl_data_source);
533 struct wl_data_source * )
558 struct wl_data_source * ,
574 struct wl_data_offer * ,
575 const char *mime_type)
581 struct wl_data_offer * ,
588 struct wl_data_offer * ,
601 struct wl_data_device * ,
602 struct wl_data_offer *
id)
610 struct wl_data_device * ,
612 struct wl_surface * ,
615 struct wl_data_offer *
id)
621 data_offer->
in_use.store(
true);
622 data_offer->
dnd.
x = wl_fixed_to_int(
x);
623 data_offer->
dnd.
y = wl_fixed_to_int(
y);
625 wl_data_offer_set_actions(
id,
626 WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY |
627 WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE,
628 WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY);
631 wl_data_offer_accept(
id, serial,
type.c_str());
651 struct wl_data_device * ,
669 data_offer->
types.begin(),
670 data_offer->
types.end());
672 auto read_uris = [](
input_t *
const input,
674 const std::string mime_receive) {
675 const int x = data_offer->
dnd.
x;
676 const int y = data_offer->
dnd.
y;
678 const std::string
data =
read_pipe(data_offer, mime_receive);
680 wl_data_offer_finish(data_offer->
id);
681 wl_data_offer_destroy(data_offer->
id);
684 data_offer =
nullptr;
689 static constexpr
const char *file_proto =
"file://";
690 static constexpr
const char *crlf =
"\r\n";
692 std::vector<std::string> uris;
697 const size_t start =
pos +
sizeof(file_proto) - 1;
699 const size_t end =
pos;
701 if (
pos == std::string::npos) {
704 uris.push_back(
data.substr(start, end - start));
709 flist->
count = int(uris.size());
711 for (
size_t i = 0; i < uris.size(); i++) {
714 memcpy(flist->
strings[i], uris[i].data(), uris[i].size() + 1);
730 wl_display_roundtrip(system->
display());
733 std::thread read_thread(read_uris, input, data_offer, mime_receive);
734 read_thread.detach();
738 struct wl_data_device * ,
739 struct wl_data_offer *
id)
745 if (data_offer !=
nullptr) {
746 wl_data_offer_destroy(data_offer->
id);
748 data_offer =
nullptr;
756 data_offer =
static_cast<data_offer_t *
>(wl_data_offer_get_user_data(
id));
759 std::string mime_receive;
769 const std::string mime_receive) {
770 const std::string
data =
read_pipe(data_offer, mime_receive);
774 std::thread read_thread(read_selection, input->
system, data_offer, mime_receive);
775 read_thread.detach();
791 wl_buffer_destroy(wl_buffer);
800 struct wl_pointer * ,
803 wl_fixed_t surface_x,
804 wl_fixed_t surface_y)
811 input->
x = wl_fixed_to_int(surface_x);
812 input->
y = wl_fixed_to_int(surface_y);
825 struct wl_pointer * ,
830 static_cast<input_t *
>(
data)->focus_pointer =
nullptr;
835 struct wl_pointer * ,
837 wl_fixed_t surface_x,
838 wl_fixed_t surface_y)
849 input->
x = wl_fixed_to_int(surface_x);
850 input->
y = wl_fixed_to_int(surface_y);
855 wl_fixed_to_int(surface_x),
856 wl_fixed_to_int(surface_y),
861 struct wl_pointer * ,
869 case WL_POINTER_BUTTON_STATE_RELEASED:
872 case WL_POINTER_BUTTON_STATE_PRESSED:
900 struct wl_pointer * ,
905 if (axis != WL_POINTER_AXIS_VERTICAL_SCROLL) {
928 if ((!
data) || (
format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1)) {
933 char *map_str =
static_cast<char *
>(mmap(
nullptr,
size, PROT_READ, MAP_PRIVATE, fd, 0));
934 if (map_str == MAP_FAILED) {
936 throw std::runtime_error(
"keymap mmap failed: " + std::string(std::strerror(errno)));
939 struct xkb_keymap *keymap = xkb_keymap_new_from_string(
940 input->
xkb_context, map_str, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
941 munmap(map_str,
size);
948 input->
xkb_state = xkb_state_new(keymap);
950 xkb_keymap_unref(keymap);
960 struct wl_keyboard * ,
977 struct wl_keyboard * ,
982 static_cast<input_t *
>(
data)->focus_keyboard =
nullptr;
994 xkb_state_get_keymap(xkb_state);
995 struct xkb_keymap *keymap = xkb_state_get_keymap(xkb_state);
996 struct xkb_state *xkb_state_empty = xkb_state_new(keymap);
1000 const xkb_mod_index_t mod2 = xkb_keymap_mod_get_index(keymap, XKB_MOD_NAME_NUM);
1001 const xkb_mod_index_t num = xkb_keymap_mod_get_index(keymap,
"NumLock");
1002 if (num != XKB_MOD_INVALID && mod2 != XKB_MOD_INVALID) {
1003 xkb_state_update_mask(xkb_state_empty, (1 << mod2), 0, (1 << num), 0, 0, 0);
1007 const xkb_keysym_t sym = xkb_state_key_get_one_sym(xkb_state_empty, key);
1008 xkb_state_unref(xkb_state_empty);
1013 struct wl_keyboard * ,
1023 case WL_KEYBOARD_KEY_STATE_RELEASED:
1026 case WL_KEYBOARD_KEY_STATE_PRESSED:
1033 if (sym == XKB_KEY_NoSymbol) {
1039 if (xkb_keymap_key_repeats(xkb_state_get_keymap(input->
xkb_state), key + 8) &&
1049 xkb_state_key_get_utf8(
1065 xkb_keymap_key_repeats(xkb_state_get_keymap(input->
xkb_state), key + 8) &&
1072 .key_data = key_data,
1077 task->getUserData());
1092 struct wl_keyboard * ,
1099 xkb_state_update_mask(
static_cast<input_t *
>(
data)->xkb_state,
1109 struct wl_keyboard * ,
1134 if (capabilities & WL_SEAT_CAPABILITY_POINTER) {
1135 input->
pointer = wl_seat_get_pointer(wl_seat);
1143 if (capabilities & WL_SEAT_CAPABILITY_KEYBOARD) {
1144 input->
keyboard = wl_seat_get_keyboard(wl_seat);
1151 static_cast<input_t *
>(
data)->name = std::string(name);
1160 struct wl_output * ,
1173 output->model = std::string(model);
1177 struct wl_output * ,
1214 xdg_wm_base_pong(xdg_wm_base, serial);
1222 struct wl_registry *wl_registry,
1224 const char *interface,
1228 if (!strcmp(interface, wl_compositor_interface.name)) {
1229 display->compositor =
static_cast<wl_compositor *
>(
1230 wl_registry_bind(wl_registry, name, &wl_compositor_interface, 1));
1232 else if (!strcmp(interface, xdg_wm_base_interface.name)) {
1233 display->xdg_shell =
static_cast<xdg_wm_base *
>(
1234 wl_registry_bind(wl_registry, name, &xdg_wm_base_interface, 1));
1237 else if (!strcmp(interface, wl_output_interface.name)) {
1240 output->output =
static_cast<wl_output *
>(
1241 wl_registry_bind(wl_registry, name, &wl_output_interface, 2));
1245 else if (!strcmp(interface, wl_seat_interface.name)) {
1248 input->
xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
1257 input->
seat =
static_cast<wl_seat *
>(
1258 wl_registry_bind(wl_registry, name, &wl_seat_interface, 4));
1259 display->inputs.push_back(input);
1262 else if (!strcmp(interface, wl_shm_interface.name)) {
1263 display->shm =
static_cast<wl_shm *
>(
1264 wl_registry_bind(wl_registry, name, &wl_shm_interface, 1));
1266 else if (!strcmp(interface, wl_data_device_manager_interface.name)) {
1267 display->data_device_manager =
static_cast<wl_data_device_manager *
>(
1268 wl_registry_bind(wl_registry, name, &wl_data_device_manager_interface, 1));
1270 else if (!strcmp(interface, zwp_relative_pointer_manager_v1_interface.name)) {
1271 display->relative_pointer_manager =
static_cast<zwp_relative_pointer_manager_v1 *
>(
1272 wl_registry_bind(wl_registry, name, &zwp_relative_pointer_manager_v1_interface, 1));
1274 else if (!strcmp(interface, zwp_pointer_constraints_v1_interface.name)) {
1275 display->pointer_constraints =
static_cast<zwp_pointer_constraints_v1 *
>(
1276 wl_registry_bind(wl_registry, name, &zwp_pointer_constraints_v1_interface, 1));
1310 d->
display = wl_display_connect(
nullptr);
1313 throw std::runtime_error(
"Wayland: unable to connect to display!");
1317 struct wl_registry *registry = wl_display_get_registry(d->
display);
1320 wl_display_roundtrip(d->
display);
1322 wl_display_roundtrip(d->
display);
1323 wl_registry_destroy(registry);
1327 throw std::runtime_error(
"Wayland: unable to access xdg_shell!");
1339 const char *theme = std::getenv(
"XCURSOR_THEME");
1340 const char *
size = std::getenv(
"XCURSOR_SIZE");
1346 throw std::runtime_error(
"Wayland: unable to access cursor themes!");
1360 wl_display_dispatch(d->
display);
1363 wl_display_roundtrip(d->
display);
1376 if (!d->
inputs.empty()) {
1377 static const xkb_state_component mods_all = xkb_state_component(
1378 XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED | XKB_STATE_MODS_LOCKED |
1379 XKB_STATE_MODS_EFFECTIVE);
1382 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state, XKB_MOD_NAME_SHIFT, mods_all) ==
1385 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state, XKB_MOD_NAME_SHIFT, mods_all) ==
1388 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"LAlt", mods_all) == 1);
1390 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"RAlt", mods_all) == 1);
1392 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"LControl", mods_all) == 1);
1394 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"RControl", mods_all) == 1);
1396 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"Super", mods_all) == 1);
1398 xkb_state_mod_name_is_active(d->
inputs[0]->xkb_state,
"NumLock", mods_all) == 1);
1407 if (!d->
inputs.empty()) {
1408 buttons = d->
inputs[0]->buttons;
1417 memcpy(clipboard, selection.data(), selection.size() + 1);
1435 wl_data_source_add_listener(
1443 wl_data_device_set_selection(
1455 if (!d->
inputs.empty() && (d->
inputs[0]->focus_pointer !=
nullptr)) {
1487 wl_surface *os_surface = wl_compositor_create_surface(
compositor());
1488 wl_egl_window *os_egl_window = wl_egl_window_create(os_surface,
int(1),
int(1));
1494 EGLNativeWindowType(os_egl_window),
1495 EGLNativeDisplayType(d->
display),
1496 EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
1503 if (
context->initializeDrawingContext()) {
1510 GHOST_PRINT(
"Cannot create off-screen EGL context" << std::endl);
1529 const bool exclusive,
1530 const bool is_dialog,
1579 this->selection = selection;
1595 wl_pointer_set_cursor(input->
pointer,
1608 const std::string cursor_name =
cursors.count(shape) ?
cursors.at(shape) :
1611 wl_cursor *cursor = wl_cursor_theme_get_cursor(d->
cursor_theme, cursor_name.c_str());
1614 GHOST_PRINT(
"cursor '" << cursor_name <<
"' does not exist" << std::endl);
1618 struct wl_cursor_image *image = cursor->images[0];
1619 struct wl_buffer *
buffer = wl_cursor_image_get_buffer(image);
1654 const int fd = memfd_create(
"blender-cursor-custom", MFD_CLOEXEC | MFD_ALLOW_SEALING);
1655 fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
1659 nullptr, cursor->
file_buffer->
size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
1663 wl_buffer *
buffer = wl_shm_pool_create_buffer(
1664 pool, 0, sizex, sizey,
stride, WL_SHM_FORMAT_ARGB8888);
1666 wl_shm_pool_destroy(
pool);
1671 static constexpr
uint32_t black = 0xFF000000;
1672 static constexpr
uint32_t white = 0xFFFFFFFF;
1673 static constexpr
uint32_t transparent = 0x00000000;
1678 for (
int y = 0;
y < sizey; ++
y) {
1680 for (
int x = 0;
x < sizex; ++
x) {
1686 datab =
uint8_t((datab * 0x0202020202ULL & 0x010884422010ULL) % 1023);
1687 maskb =
uint8_t((maskb * 0x0202020202ULL & 0x010884422010ULL) % 1023);
1691 *pixel++ = (datab & 0x80) ? white : black;
1694 *pixel++ = (datab & 0x80) ? white : transparent;
1758 input->
relative_pointer = zwp_relative_pointer_manager_v1_get_relative_pointer(
1760 zwp_relative_pointer_v1_add_listener(
1767 ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT);
void BLI_kdtree_nd_() free(KDTree *tree)
KDTree *BLI_kdtree_nd_() new(unsigned int maxsize)
#define GHOST_OPENGL_EGL_CONTEXT_FLAGS
#define GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY
static std::string read_pipe(data_offer_t *data_offer, const std::string mime_receive)
static void seat_capabilities(void *data, struct wl_seat *wl_seat, uint32_t capabilities)
static void data_device_drop(void *data, struct wl_data_device *)
static const struct wl_data_source_listener data_source_listener
static void data_source_action(void *, struct wl_data_source *, uint32_t)
static void data_source_dnd_drop_performed(void *, struct wl_data_source *)
static const struct wl_output_listener output_listener
static void data_source_cancelled(void *, struct wl_data_source *wl_data_source)
static const zwp_relative_pointer_v1_listener relative_pointer_listener
static void data_offer_action(void *data, struct wl_data_offer *, uint32_t dnd_action)
static const std::unordered_map< std::string, GHOST_TDragnDropTypes > mime_dnd
static const struct xdg_wm_base_listener shell_listener
static const struct wl_data_device_listener data_device_listener
static void output_done(void *, struct wl_output *)
static void dnd_events(const input_t *const input, const GHOST_TEventType event)
static void global_remove(void *, struct wl_registry *, uint32_t)
static void display_destroy(display_t *d)
static void keyboard_repeat_info(void *data, struct wl_keyboard *, int32_t rate, int32_t delay)
static void set_cursor_buffer(input_t *input, wl_buffer *buffer)
static void data_source_send(void *data, struct wl_data_source *, const char *, int32_t fd)
static void relative_pointer_relative_motion(void *data, struct zwp_relative_pointer_v1 *, uint32_t, uint32_t, wl_fixed_t dx, wl_fixed_t dy, wl_fixed_t, wl_fixed_t)
static void data_offer_offer(void *data, struct wl_data_offer *, const char *mime_type)
const struct wl_buffer_listener cursor_buffer_listener
static void pointer_motion(void *data, struct wl_pointer *, uint32_t, wl_fixed_t surface_x, wl_fixed_t surface_y)
static const struct wl_seat_listener seat_listener
static void cursor_buffer_release(void *data, struct wl_buffer *wl_buffer)
static void keyboard_key(void *data, struct wl_keyboard *, uint32_t serial, uint32_t, uint32_t key, uint32_t state)
static const struct wl_data_offer_listener data_offer_listener
static void keyboard_modifiers(void *data, struct wl_keyboard *, uint32_t, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group)
static void data_device_leave(void *data, struct wl_data_device *)
static void keyboard_keymap(void *data, struct wl_keyboard *, uint32_t format, int32_t fd, uint32_t size)
static void data_offer_source_actions(void *data, struct wl_data_offer *, uint32_t source_actions)
static void pointer_button(void *data, struct wl_pointer *, uint32_t serial, uint32_t, uint32_t button, uint32_t state)
static void pointer_leave(void *data, struct wl_pointer *, uint32_t, struct wl_surface *surface)
static const std::vector< std::string > mime_preference_order
static const struct wl_registry_listener registry_listener
static constexpr const char * mime_text_utf8
static void output_mode(void *data, struct wl_output *, uint32_t, int32_t width, int32_t height, int32_t)
static const struct wl_pointer_listener pointer_listener
static void pointer_axis(void *data, struct wl_pointer *, uint32_t, uint32_t axis, wl_fixed_t value)
static void keyboard_enter(void *data, struct wl_keyboard *, uint32_t, struct wl_surface *surface, struct wl_array *)
static void global_add(void *data, struct wl_registry *wl_registry, uint32_t name, const char *interface, uint32_t)
static void output_geometry(void *data, struct wl_output *, int32_t, int32_t, int32_t, int32_t, int32_t, const char *make, const char *model, int32_t transform)
static void keyboard_leave(void *data, struct wl_keyboard *, uint32_t, struct wl_surface *surface)
static const std::unordered_map< GHOST_TStandardCursor, std::string > cursors
static xkb_keysym_t xkb_state_key_get_one_sym_without_modifiers(struct xkb_state *xkb_state, xkb_keycode_t key)
static const struct wl_keyboard_listener keyboard_listener
static void data_device_enter(void *data, struct wl_data_device *, uint32_t serial, struct wl_surface *, wl_fixed_t x, wl_fixed_t y, struct wl_data_offer *id)
static void shell_ping(void *, struct xdg_wm_base *xdg_wm_base, uint32_t serial)
static constexpr const char * mime_text_uri
static void output_scale(void *data, struct wl_output *, int32_t factor)
static void data_device_motion(void *data, struct wl_data_device *, uint32_t, wl_fixed_t x, wl_fixed_t y)
static const int default_cursor_size
static void data_device_data_offer(void *, struct wl_data_device *, struct wl_data_offer *id)
static void data_source_dnd_finished(void *, struct wl_data_source *)
static void seat_name(void *data, struct wl_seat *, const char *name)
static const std::vector< std::string > mime_send
static void data_source_target(void *, struct wl_data_source *, const char *)
static GHOST_TKey xkb_map_gkey(const xkb_keysym_t &sym)
static void data_device_selection(void *data, struct wl_data_device *, struct wl_data_offer *id)
static constexpr const char * mime_text_plain
static void pointer_enter(void *data, struct wl_pointer *, uint32_t serial, struct wl_surface *surface, wl_fixed_t surface_x, wl_fixed_t surface_y)
@ GHOST_kStandardCursorBottomLeftCorner
@ GHOST_kStandardCursorZoomIn
@ GHOST_kStandardCursorVerticalSplit
@ GHOST_kStandardCursorHelp
@ GHOST_kStandardCursorCopy
@ GHOST_kStandardCursorWait
@ GHOST_kStandardCursorHorizontalSplit
@ GHOST_kStandardCursorTopSide
@ GHOST_kStandardCursorStop
@ GHOST_kStandardCursorCrosshair
@ GHOST_kStandardCursorNSEWScroll
@ GHOST_kStandardCursorLeftRight
@ GHOST_kStandardCursorPencil
@ GHOST_kStandardCursorNSScroll
@ GHOST_kStandardCursorCrosshairA
@ GHOST_kStandardCursorUpDown
@ GHOST_kStandardCursorUpArrow
@ GHOST_kStandardCursorBottomSide
@ GHOST_kStandardCursorInfo
@ GHOST_kStandardCursorTopLeftCorner
@ GHOST_kStandardCursorEyedropper
@ GHOST_kStandardCursorKnife
@ GHOST_kStandardCursorMove
@ GHOST_kStandardCursorCrosshairB
@ GHOST_kStandardCursorBottomRightCorner
@ GHOST_kStandardCursorDownArrow
@ GHOST_kStandardCursorEraser
@ GHOST_kStandardCursorDefault
@ GHOST_kStandardCursorEWScroll
@ GHOST_kStandardCursorRightSide
@ GHOST_kStandardCursorRightArrow
@ GHOST_kStandardCursorTopRightCorner
@ GHOST_kStandardCursorDestroy
@ GHOST_kStandardCursorCrosshairC
@ GHOST_kStandardCursorZoomOut
@ GHOST_kStandardCursorLeftSide
@ GHOST_kStandardCursorText
@ GHOST_kStandardCursorLeftArrow
unsigned int GHOST_TUns32
unsigned long long GHOST_TUns64
@ GHOST_kEventDraggingDropDone
@ GHOST_kEventDraggingExited
@ GHOST_kEventDraggingUpdated
@ GHOST_kEventDraggingEntered
@ GHOST_kEventButtonUp
Mouse button event.
@ GHOST_kEventButtonDown
Mouse move event.
@ GHOST_kEventKeyDown
Trackpad event.
static const GHOST_TabletData GHOST_TABLET_DATA_NONE
@ GHOST_kKeyNumpadAsterisk
GHOST_TDrawingContextType
@ GHOST_kButtonMaskMiddle
@ GHOST_kModifierKeyRightControl
@ GHOST_kModifierKeyNumMasks
@ GHOST_kModifierKeyLeftControl
@ GHOST_kModifierKeyRightAlt
@ GHOST_kModifierKeyRightShift
@ GHOST_kModifierKeyLeftAlt
@ GHOST_kModifierKeyLeftShift
@ GHOST_kDragnDropTypeFilenames
@ GHOST_kDragnDropTypeString
unsigned char GHOST_TUns8
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei stride
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble top
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
GHOST_TUns32 getNumEvents()
virtual GHOST_TUserDataPtr getUserData() const =0
GHOST_IWindow * createWindow(const char *title, GHOST_TInt32 left, GHOST_TInt32 top, GHOST_TUns32 width, GHOST_TUns32 height, GHOST_TWindowState state, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings, const bool exclusive, const bool is_dialog, const GHOST_IWindow *parentWindow) override
GHOST_TSuccess getModifierKeys(GHOST_ModifierKeys &keys) const override
GHOST_TSuccess setCursorGrab(const GHOST_TGrabCursorMode mode, wl_surface *surface)
GHOST_TUns8 getNumDisplays() const override
void setSelection(const std::string &selection)
void putClipboard(GHOST_TInt8 *buffer, bool selection) const override
GHOST_TSuccess getButtons(GHOST_Buttons &buttons) const override
GHOST_TSuccess disposeContext(GHOST_IContext *context) override
GHOST_IContext * createOffscreenContext(GHOST_GLSettings glSettings) override
wl_compositor * compositor()
GHOST_TSuccess getCursorPosition(GHOST_TInt32 &x, GHOST_TInt32 &y) const override
~GHOST_SystemWayland() override
void getAllDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const override
GHOST_TSuccess setCursorVisibility(bool visible)
GHOST_TSuccess setCursorShape(GHOST_TStandardCursor shape)
void getMainDisplayDimensions(GHOST_TUns32 &width, GHOST_TUns32 &height) const override
bool processEvents(bool waitForEvent) override
GHOST_TSuccess setCustomCursorShape(GHOST_TUns8 *bitmap, GHOST_TUns8 *mask, int sizex, int sizey, int hotX, int hotY, bool canInvertColor)
int toggleConsole(int action) override
GHOST_TSuccess hasCursorShape(GHOST_TStandardCursor cursorShape)
GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y) override
GHOST_TUns8 * getClipboard(bool selection) const override
GHOST_EventManager * getEventManager() const
GHOST_TSuccess removeTimer(GHOST_ITimerTask *timerTask)
GHOST_ITimerTask * installTimer(GHOST_TUns64 delay, GHOST_TUns64 interval, GHOST_TimerProcPtr timerProc, GHOST_TUserDataPtr userData=NULL)
GHOST_TimerManager * getTimerManager() const
GHOST_WindowManager * m_windowManager
GHOST_TSuccess pushEvent(GHOST_IEvent *event)
virtual GHOST_TUns64 getMilliSeconds() const
bool fireTimers(GHOST_TUns64 time)
GHOST_TSuccess addWindow(GHOST_IWindow *window)
GHOST_TSuccess setActiveWindow(GHOST_IWindow *window)
virtual bool getValid() const
struct @203::@204 surface
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
static int make(const char *input_file_name, const char *output_file_name)
struct blender::compositor::@172::@174 task
struct SELECTID_Context context
void set(GHOST_TModifierKeyMask mask, bool down)
struct wl_cursor_image image
struct buffer_t * file_buffer
struct wl_buffer * buffer
struct wl_surface * surface
std::atomic< bool > in_use
std::unordered_set< std::string > types
struct data_offer_t::@1231 dnd
struct wl_data_offer * id
struct wl_data_source * data_source
std::vector< struct wl_surface * > os_surfaces
std::vector< output_t * > outputs
struct zwp_relative_pointer_manager_v1 * relative_pointer_manager
struct wl_cursor_theme * cursor_theme
GHOST_SystemWayland * system
struct wl_compositor * compositor
std::vector< input_t * > inputs
struct xdg_wm_base * xdg_shell
struct wl_display * display
std::vector< struct wl_egl_window * > os_egl_windows
struct zwp_pointer_constraints_v1 * pointer_constraints
struct wl_data_device_manager * data_device_manager
GHOST_TEventKeyData key_data
GHOST_SystemWayland * system
struct wl_output * output
static const char hex[17]
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)