blob: 0d8e0085de3a9da348e7570f5f192dd038e599e3 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file was automatically generated with:
// ../../ui/gfx/x/gen_xproto.py \
// ../../third_party/xcbproto/src \
// gen/ui/gfx/x \
// bigreq \
// composite \
// damage \
// dpms \
// dri2 \
// dri3 \
// ge \
// glx \
// present \
// randr \
// record \
// render \
// res \
// screensaver \
// shape \
// shm \
// sync \
// xc_misc \
// xevie \
// xf86dri \
// xf86vidmode \
// xfixes \
// xinerama \
// xinput \
// xkb \
// xprint \
// xproto \
// xselinux \
// xtest \
// xv \
// xvmc
#include "xproto.h"
#include <xcb/xcb.h>
#include <xcb/xcbext.h>
#include "base/logging.h"
#include "base/posix/eintr_wrapper.h"
#include "ui/gfx/x/xproto_internal.h"
namespace x11 {
XProto::XProto(Connection* connection) : connection_(connection) {}
template <>
COMPONENT_EXPORT(X11)
Setup Read<Setup>(ReadBuffer* buffer) {
auto& buf = *buffer;
Setup obj;
auto& status = obj.status;
auto& protocol_major_version = obj.protocol_major_version;
auto& protocol_minor_version = obj.protocol_minor_version;
auto& length = obj.length;
auto& release_number = obj.release_number;
auto& resource_id_base = obj.resource_id_base;
auto& resource_id_mask = obj.resource_id_mask;
auto& motion_buffer_size = obj.motion_buffer_size;
uint16_t vendor_len{};
auto& maximum_request_length = obj.maximum_request_length;
uint8_t roots_len{};
uint8_t pixmap_formats_len{};
auto& image_byte_order = obj.image_byte_order;
auto& bitmap_format_bit_order = obj.bitmap_format_bit_order;
auto& bitmap_format_scanline_unit = obj.bitmap_format_scanline_unit;
auto& bitmap_format_scanline_pad = obj.bitmap_format_scanline_pad;
auto& min_keycode = obj.min_keycode;
auto& max_keycode = obj.max_keycode;
auto& vendor = obj.vendor;
auto& pixmap_formats = obj.pixmap_formats;
auto& roots = obj.roots;
// status
Read(&status, &buf);
// pad0
Pad(&buf, 1);
// protocol_major_version
Read(&protocol_major_version, &buf);
// protocol_minor_version
Read(&protocol_minor_version, &buf);
// length
Read(&length, &buf);
// release_number
Read(&release_number, &buf);
// resource_id_base
Read(&resource_id_base, &buf);
// resource_id_mask
Read(&resource_id_mask, &buf);
// motion_buffer_size
Read(&motion_buffer_size, &buf);
// vendor_len
Read(&vendor_len, &buf);
// maximum_request_length
Read(&maximum_request_length, &buf);
// roots_len
Read(&roots_len, &buf);
// pixmap_formats_len
Read(&pixmap_formats_len, &buf);
// image_byte_order
uint8_t tmp0;
Read(&tmp0, &buf);
image_byte_order = static_cast<ImageOrder>(tmp0);
// bitmap_format_bit_order
uint8_t tmp1;
Read(&tmp1, &buf);
bitmap_format_bit_order = static_cast<ImageOrder>(tmp1);
// bitmap_format_scanline_unit
Read(&bitmap_format_scanline_unit, &buf);
// bitmap_format_scanline_pad
Read(&bitmap_format_scanline_pad, &buf);
// min_keycode
Read(&min_keycode, &buf);
// max_keycode
Read(&max_keycode, &buf);
// pad1
Pad(&buf, 4);
// vendor
vendor.resize(vendor_len);
for (auto& vendor_elem : vendor) {
// vendor_elem
Read(&vendor_elem, &buf);
}
// pad2
Align(&buf, 4);
// pixmap_formats
pixmap_formats.resize(pixmap_formats_len);
for (auto& pixmap_formats_elem : pixmap_formats) {
// pixmap_formats_elem
{
auto& depth = pixmap_formats_elem.depth;
auto& bits_per_pixel = pixmap_formats_elem.bits_per_pixel;
auto& scanline_pad = pixmap_formats_elem.scanline_pad;
// depth
Read(&depth, &buf);
// bits_per_pixel
Read(&bits_per_pixel, &buf);
// scanline_pad
Read(&scanline_pad, &buf);
// pad0
Pad(&buf, 5);
}
}
// roots
roots.resize(roots_len);
for (auto& roots_elem : roots) {
// roots_elem
{
auto& root = roots_elem.root;
auto& default_colormap = roots_elem.default_colormap;
auto& white_pixel = roots_elem.white_pixel;
auto& black_pixel = roots_elem.black_pixel;
auto& current_input_masks = roots_elem.current_input_masks;
auto& width_in_pixels = roots_elem.width_in_pixels;
auto& height_in_pixels = roots_elem.height_in_pixels;
auto& width_in_millimeters = roots_elem.width_in_millimeters;
auto& height_in_millimeters = roots_elem.height_in_millimeters;
auto& min_installed_maps = roots_elem.min_installed_maps;
auto& max_installed_maps = roots_elem.max_installed_maps;
auto& root_visual = roots_elem.root_visual;
auto& backing_stores = roots_elem.backing_stores;
auto& save_unders = roots_elem.save_unders;
auto& root_depth = roots_elem.root_depth;
uint8_t allowed_depths_len{};
auto& allowed_depths = roots_elem.allowed_depths;
// root
Read(&root, &buf);
// default_colormap
Read(&default_colormap, &buf);
// white_pixel
Read(&white_pixel, &buf);
// black_pixel
Read(&black_pixel, &buf);
// current_input_masks
uint32_t tmp2;
Read(&tmp2, &buf);
current_input_masks = static_cast<EventMask>(tmp2);
// width_in_pixels
Read(&width_in_pixels, &buf);
// height_in_pixels
Read(&height_in_pixels, &buf);
// width_in_millimeters
Read(&width_in_millimeters, &buf);
// height_in_millimeters
Read(&height_in_millimeters, &buf);
// min_installed_maps
Read(&min_installed_maps, &buf);
// max_installed_maps
Read(&max_installed_maps, &buf);
// root_visual
Read(&root_visual, &buf);
// backing_stores
uint8_t tmp3;
Read(&tmp3, &buf);
backing_stores = static_cast<BackingStore>(tmp3);
// save_unders
Read(&save_unders, &buf);
// root_depth
Read(&root_depth, &buf);
// allowed_depths_len
Read(&allowed_depths_len, &buf);
// allowed_depths
allowed_depths.resize(allowed_depths_len);
for (auto& allowed_depths_elem : allowed_depths) {
// allowed_depths_elem
{
auto& depth = allowed_depths_elem.depth;
uint16_t visuals_len{};
auto& visuals = allowed_depths_elem.visuals;
// depth
Read(&depth, &buf);
// pad0
Pad(&buf, 1);
// visuals_len
Read(&visuals_len, &buf);
// pad1
Pad(&buf, 4);
// visuals
visuals.resize(visuals_len);
for (auto& visuals_elem : visuals) {
// visuals_elem
{
auto& visual_id = visuals_elem.visual_id;
auto& c_class = visuals_elem.c_class;
auto& bits_per_rgb_value = visuals_elem.bits_per_rgb_value;
auto& colormap_entries = visuals_elem.colormap_entries;
auto& red_mask = visuals_elem.red_mask;
auto& green_mask = visuals_elem.green_mask;
auto& blue_mask = visuals_elem.blue_mask;
// visual_id
Read(&visual_id, &buf);
// c_class
uint8_t tmp4;
Read(&tmp4, &buf);
c_class = static_cast<VisualClass>(tmp4);
// bits_per_rgb_value
Read(&bits_per_rgb_value, &buf);
// colormap_entries
Read(&colormap_entries, &buf);
// red_mask
Read(&red_mask, &buf);
// green_mask
Read(&green_mask, &buf);
// blue_mask
Read(&blue_mask, &buf);
// pad0
Pad(&buf, 4);
}
}
}
}
}
}
return obj;
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<KeyEvent>(const KeyEvent& obj) {
WriteBuffer buf;
auto& detail = obj.detail;
auto& sequence = obj.sequence;
auto& time = obj.time;
auto& root = obj.root;
auto& event = obj.event;
auto& child = obj.child;
auto& root_x = obj.root_x;
auto& root_y = obj.root_y;
auto& event_x = obj.event_x;
auto& event_y = obj.event_y;
auto& state = obj.state;
auto& same_screen = obj.same_screen;
// response_type
uint8_t response_type = obj.opcode;
buf.Write(&response_type);
// detail
buf.Write(&detail);
// sequence
buf.Write(&sequence);
// time
buf.Write(&time);
// root
buf.Write(&root);
// event
buf.Write(&event);
// child
buf.Write(&child);
// root_x
buf.Write(&root_x);
// root_y
buf.Write(&root_y);
// event_x
buf.Write(&event_x);
// event_y
buf.Write(&event_y);
// state
uint16_t tmp5;
tmp5 = static_cast<uint16_t>(state);
buf.Write(&tmp5);
// same_screen
buf.Write(&same_screen);
// pad0
Pad(&buf, 1);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<KeyEvent>(KeyEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& detail = (*event_).detail;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& root = (*event_).root;
auto& event = (*event_).event;
auto& child = (*event_).child;
auto& root_x = (*event_).root_x;
auto& root_y = (*event_).root_y;
auto& event_x = (*event_).event_x;
auto& event_y = (*event_).event_y;
auto& state = (*event_).state;
auto& same_screen = (*event_).same_screen;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// detail
Read(&detail, &buf);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// root
Read(&root, &buf);
// event
Read(&event, &buf);
// child
Read(&child, &buf);
// root_x
Read(&root_x, &buf);
// root_y
Read(&root_y, &buf);
// event_x
Read(&event_x, &buf);
// event_y
Read(&event_y, &buf);
// state
uint16_t tmp6;
Read(&tmp6, &buf);
state = static_cast<KeyButMask>(tmp6);
// same_screen
Read(&same_screen, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<ButtonEvent>(const ButtonEvent& obj) {
WriteBuffer buf;
auto& detail = obj.detail;
auto& sequence = obj.sequence;
auto& time = obj.time;
auto& root = obj.root;
auto& event = obj.event;
auto& child = obj.child;
auto& root_x = obj.root_x;
auto& root_y = obj.root_y;
auto& event_x = obj.event_x;
auto& event_y = obj.event_y;
auto& state = obj.state;
auto& same_screen = obj.same_screen;
// response_type
uint8_t response_type = obj.opcode;
buf.Write(&response_type);
// detail
buf.Write(&detail);
// sequence
buf.Write(&sequence);
// time
buf.Write(&time);
// root
buf.Write(&root);
// event
buf.Write(&event);
// child
buf.Write(&child);
// root_x
buf.Write(&root_x);
// root_y
buf.Write(&root_y);
// event_x
buf.Write(&event_x);
// event_y
buf.Write(&event_y);
// state
uint16_t tmp7;
tmp7 = static_cast<uint16_t>(state);
buf.Write(&tmp7);
// same_screen
buf.Write(&same_screen);
// pad0
Pad(&buf, 1);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ButtonEvent>(ButtonEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& detail = (*event_).detail;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& root = (*event_).root;
auto& event = (*event_).event;
auto& child = (*event_).child;
auto& root_x = (*event_).root_x;
auto& root_y = (*event_).root_y;
auto& event_x = (*event_).event_x;
auto& event_y = (*event_).event_y;
auto& state = (*event_).state;
auto& same_screen = (*event_).same_screen;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// detail
Read(&detail, &buf);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// root
Read(&root, &buf);
// event
Read(&event, &buf);
// child
Read(&child, &buf);
// root_x
Read(&root_x, &buf);
// root_y
Read(&root_y, &buf);
// event_x
Read(&event_x, &buf);
// event_y
Read(&event_y, &buf);
// state
uint16_t tmp8;
Read(&tmp8, &buf);
state = static_cast<KeyButMask>(tmp8);
// same_screen
Read(&same_screen, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<MotionNotifyEvent>(const MotionNotifyEvent& obj) {
WriteBuffer buf;
auto& detail = obj.detail;
auto& sequence = obj.sequence;
auto& time = obj.time;
auto& root = obj.root;
auto& event = obj.event;
auto& child = obj.child;
auto& root_x = obj.root_x;
auto& root_y = obj.root_y;
auto& event_x = obj.event_x;
auto& event_y = obj.event_y;
auto& state = obj.state;
auto& same_screen = obj.same_screen;
// response_type
uint8_t response_type = 6;
buf.Write(&response_type);
// detail
uint8_t tmp9;
tmp9 = static_cast<uint8_t>(detail);
buf.Write(&tmp9);
// sequence
buf.Write(&sequence);
// time
buf.Write(&time);
// root
buf.Write(&root);
// event
buf.Write(&event);
// child
buf.Write(&child);
// root_x
buf.Write(&root_x);
// root_y
buf.Write(&root_y);
// event_x
buf.Write(&event_x);
// event_y
buf.Write(&event_y);
// state
uint16_t tmp10;
tmp10 = static_cast<uint16_t>(state);
buf.Write(&tmp10);
// same_screen
buf.Write(&same_screen);
// pad0
Pad(&buf, 1);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<MotionNotifyEvent>(MotionNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& detail = (*event_).detail;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& root = (*event_).root;
auto& event = (*event_).event;
auto& child = (*event_).child;
auto& root_x = (*event_).root_x;
auto& root_y = (*event_).root_y;
auto& event_x = (*event_).event_x;
auto& event_y = (*event_).event_y;
auto& state = (*event_).state;
auto& same_screen = (*event_).same_screen;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// detail
uint8_t tmp11;
Read(&tmp11, &buf);
detail = static_cast<Motion>(tmp11);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// root
Read(&root, &buf);
// event
Read(&event, &buf);
// child
Read(&child, &buf);
// root_x
Read(&root_x, &buf);
// root_y
Read(&root_y, &buf);
// event_x
Read(&event_x, &buf);
// event_y
Read(&event_y, &buf);
// state
uint16_t tmp12;
Read(&tmp12, &buf);
state = static_cast<KeyButMask>(tmp12);
// same_screen
Read(&same_screen, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<CrossingEvent>(CrossingEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& detail = (*event_).detail;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& root = (*event_).root;
auto& event = (*event_).event;
auto& child = (*event_).child;
auto& root_x = (*event_).root_x;
auto& root_y = (*event_).root_y;
auto& event_x = (*event_).event_x;
auto& event_y = (*event_).event_y;
auto& state = (*event_).state;
auto& mode = (*event_).mode;
auto& same_screen_focus = (*event_).same_screen_focus;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// detail
uint8_t tmp13;
Read(&tmp13, &buf);
detail = static_cast<NotifyDetail>(tmp13);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// root
Read(&root, &buf);
// event
Read(&event, &buf);
// child
Read(&child, &buf);
// root_x
Read(&root_x, &buf);
// root_y
Read(&root_y, &buf);
// event_x
Read(&event_x, &buf);
// event_y
Read(&event_y, &buf);
// state
uint16_t tmp14;
Read(&tmp14, &buf);
state = static_cast<KeyButMask>(tmp14);
// mode
uint8_t tmp15;
Read(&tmp15, &buf);
mode = static_cast<NotifyMode>(tmp15);
// same_screen_focus
Read(&same_screen_focus, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<FocusEvent>(FocusEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& detail = (*event_).detail;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& mode = (*event_).mode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// detail
uint8_t tmp16;
Read(&tmp16, &buf);
detail = static_cast<NotifyDetail>(tmp16);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// mode
uint8_t tmp17;
Read(&tmp17, &buf);
mode = static_cast<NotifyMode>(tmp17);
// pad0
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<KeymapNotifyEvent>(KeymapNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& keys = (*event_).keys;
size_t keys_len = keys.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// keys
for (auto& keys_elem : keys) {
// keys_elem
Read(&keys_elem, &buf);
}
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<ExposeEvent>(const ExposeEvent& obj) {
WriteBuffer buf;
auto& sequence = obj.sequence;
auto& window = obj.window;
auto& x = obj.x;
auto& y = obj.y;
auto& width = obj.width;
auto& height = obj.height;
auto& count = obj.count;
// response_type
uint8_t response_type = 12;
buf.Write(&response_type);
// pad0
Pad(&buf, 1);
// sequence
buf.Write(&sequence);
// window
buf.Write(&window);
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// count
buf.Write(&count);
// pad1
Pad(&buf, 2);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ExposeEvent>(ExposeEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& width = (*event_).width;
auto& height = (*event_).height;
auto& count = (*event_).count;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// count
Read(&count, &buf);
// pad1
Pad(&buf, 2);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<GraphicsExposureEvent>(GraphicsExposureEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& drawable = (*event_).drawable;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& width = (*event_).width;
auto& height = (*event_).height;
auto& minor_opcode = (*event_).minor_opcode;
auto& count = (*event_).count;
auto& major_opcode = (*event_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// drawable
Read(&drawable, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// count
Read(&count, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<NoExposureEvent>(NoExposureEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& drawable = (*event_).drawable;
auto& minor_opcode = (*event_).minor_opcode;
auto& major_opcode = (*event_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// drawable
Read(&drawable, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad1
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<VisibilityNotifyEvent>(VisibilityNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& state = (*event_).state;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// state
uint8_t tmp18;
Read(&tmp18, &buf);
state = static_cast<Visibility>(tmp18);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<CreateNotifyEvent>(CreateNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& parent = (*event_).parent;
auto& window = (*event_).window;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& width = (*event_).width;
auto& height = (*event_).height;
auto& border_width = (*event_).border_width;
auto& override_redirect = (*event_).override_redirect;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// parent
Read(&parent, &buf);
// window
Read(&window, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// border_width
Read(&border_width, &buf);
// override_redirect
Read(&override_redirect, &buf);
// pad1
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<DestroyNotifyEvent>(DestroyNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<UnmapNotifyEvent>(const UnmapNotifyEvent& obj) {
WriteBuffer buf;
auto& sequence = obj.sequence;
auto& event = obj.event;
auto& window = obj.window;
auto& from_configure = obj.from_configure;
// response_type
uint8_t response_type = 18;
buf.Write(&response_type);
// pad0
Pad(&buf, 1);
// sequence
buf.Write(&sequence);
// event
buf.Write(&event);
// window
buf.Write(&window);
// from_configure
buf.Write(&from_configure);
// pad1
Pad(&buf, 3);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<UnmapNotifyEvent>(UnmapNotifyEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& from_configure = (*event_).from_configure;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// from_configure
Read(&from_configure, &buf);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<MapNotifyEvent>(MapNotifyEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& override_redirect = (*event_).override_redirect;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// override_redirect
Read(&override_redirect, &buf);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<MapRequestEvent>(MapRequestEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& parent = (*event_).parent;
auto& window = (*event_).window;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// parent
Read(&parent, &buf);
// window
Read(&window, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ReparentNotifyEvent>(ReparentNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& parent = (*event_).parent;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& override_redirect = (*event_).override_redirect;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// parent
Read(&parent, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// override_redirect
Read(&override_redirect, &buf);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ConfigureNotifyEvent>(ConfigureNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& above_sibling = (*event_).above_sibling;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& width = (*event_).width;
auto& height = (*event_).height;
auto& border_width = (*event_).border_width;
auto& override_redirect = (*event_).override_redirect;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// above_sibling
Read(&above_sibling, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// border_width
Read(&border_width, &buf);
// override_redirect
Read(&override_redirect, &buf);
// pad1
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ConfigureRequestEvent>(ConfigureRequestEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& stack_mode = (*event_).stack_mode;
auto& sequence = (*event_).sequence;
auto& parent = (*event_).parent;
auto& window = (*event_).window;
auto& sibling = (*event_).sibling;
auto& x = (*event_).x;
auto& y = (*event_).y;
auto& width = (*event_).width;
auto& height = (*event_).height;
auto& border_width = (*event_).border_width;
auto& value_mask = (*event_).value_mask;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// stack_mode
uint8_t tmp19;
Read(&tmp19, &buf);
stack_mode = static_cast<StackMode>(tmp19);
// sequence
Read(&sequence, &buf);
// parent
Read(&parent, &buf);
// window
Read(&window, &buf);
// sibling
Read(&sibling, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// border_width
Read(&border_width, &buf);
// value_mask
uint16_t tmp20;
Read(&tmp20, &buf);
value_mask = static_cast<ConfigWindow>(tmp20);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<GravityNotifyEvent>(GravityNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& x = (*event_).x;
auto& y = (*event_).y;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ResizeRequestEvent>(ResizeRequestEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& width = (*event_).width;
auto& height = (*event_).height;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<CirculateEvent>(CirculateEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& event = (*event_).event;
auto& window = (*event_).window;
auto& place = (*event_).place;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// event
Read(&event, &buf);
// window
Read(&window, &buf);
// pad1
Pad(&buf, 4);
// place
uint8_t tmp21;
Read(&tmp21, &buf);
place = static_cast<Place>(tmp21);
// pad2
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<PropertyNotifyEvent>(const PropertyNotifyEvent& obj) {
WriteBuffer buf;
auto& sequence = obj.sequence;
auto& window = obj.window;
auto& atom = obj.atom;
auto& time = obj.time;
auto& state = obj.state;
// response_type
uint8_t response_type = 28;
buf.Write(&response_type);
// pad0
Pad(&buf, 1);
// sequence
buf.Write(&sequence);
// window
buf.Write(&window);
// atom
buf.Write(&atom);
// time
buf.Write(&time);
// state
uint8_t tmp22;
tmp22 = static_cast<uint8_t>(state);
buf.Write(&tmp22);
// pad1
Pad(&buf, 3);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<PropertyNotifyEvent>(PropertyNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& atom = (*event_).atom;
auto& time = (*event_).time;
auto& state = (*event_).state;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// atom
Read(&atom, &buf);
// time
Read(&time, &buf);
// state
uint8_t tmp23;
Read(&tmp23, &buf);
state = static_cast<Property>(tmp23);
// pad1
Pad(&buf, 3);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<SelectionClearEvent>(SelectionClearEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& owner = (*event_).owner;
auto& selection = (*event_).selection;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// owner
Read(&owner, &buf);
// selection
Read(&selection, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<SelectionRequestEvent>(SelectionRequestEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& owner = (*event_).owner;
auto& requestor = (*event_).requestor;
auto& selection = (*event_).selection;
auto& target = (*event_).target;
auto& property = (*event_).property;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// owner
Read(&owner, &buf);
// requestor
Read(&requestor, &buf);
// selection
Read(&selection, &buf);
// target
Read(&target, &buf);
// property
Read(&property, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<SelectionNotifyEvent>(const SelectionNotifyEvent& obj) {
WriteBuffer buf;
auto& sequence = obj.sequence;
auto& time = obj.time;
auto& requestor = obj.requestor;
auto& selection = obj.selection;
auto& target = obj.target;
auto& property = obj.property;
// response_type
uint8_t response_type = 31;
buf.Write(&response_type);
// pad0
Pad(&buf, 1);
// sequence
buf.Write(&sequence);
// time
buf.Write(&time);
// requestor
buf.Write(&requestor);
// selection
buf.Write(&selection);
// target
buf.Write(&target);
// property
buf.Write(&property);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<SelectionNotifyEvent>(SelectionNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& time = (*event_).time;
auto& requestor = (*event_).requestor;
auto& selection = (*event_).selection;
auto& target = (*event_).target;
auto& property = (*event_).property;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// time
Read(&time, &buf);
// requestor
Read(&requestor, &buf);
// selection
Read(&selection, &buf);
// target
Read(&target, &buf);
// property
Read(&property, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ColormapNotifyEvent>(ColormapNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& colormap = (*event_).colormap;
auto& c_new = (*event_).c_new;
auto& state = (*event_).state;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// colormap
Read(&colormap, &buf);
// c_new
Read(&c_new, &buf);
// state
uint8_t tmp24;
Read(&tmp24, &buf);
state = static_cast<ColormapState>(tmp24);
// pad1
Pad(&buf, 2);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
WriteBuffer Write<ClientMessageEvent>(const ClientMessageEvent& obj) {
WriteBuffer buf;
auto& format = obj.format;
auto& sequence = obj.sequence;
auto& window = obj.window;
auto& type = obj.type;
auto& data = obj.data;
// response_type
uint8_t response_type = 33;
buf.Write(&response_type);
// format
buf.Write(&format);
// sequence
buf.Write(&sequence);
// window
buf.Write(&window);
// type
buf.Write(&type);
// data
buf.Write(&data);
return buf;
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<ClientMessageEvent>(ClientMessageEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& format = (*event_).format;
auto& sequence = (*event_).sequence;
auto& window = (*event_).window;
auto& type = (*event_).type;
auto& data = (*event_).data;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// format
Read(&format, &buf);
// sequence
Read(&sequence, &buf);
// window
Read(&window, &buf);
// type
Read(&type, &buf);
// data
Read(&data, &buf);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<MappingNotifyEvent>(MappingNotifyEvent* event_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
auto& request = (*event_).request;
auto& first_keycode = (*event_).first_keycode;
auto& count = (*event_).count;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// request
uint8_t tmp25;
Read(&tmp25, &buf);
request = static_cast<Mapping>(tmp25);
// first_keycode
Read(&first_keycode, &buf);
// count
Read(&count, &buf);
// pad1
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
template <>
COMPONENT_EXPORT(X11)
void ReadEvent<GeGenericEvent>(GeGenericEvent* event_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*event_).sequence;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// extension
uint8_t extension;
Read(&extension, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// event_type
uint16_t event_type;
Read(&event_type, &buf);
// pad0
Pad(&buf, 22);
Align(&buf, 4);
DCHECK_EQ(buf.offset, 32 + 4 * length);
}
std::string RequestError::ToString() const {
std::stringstream ss_;
ss_ << "RequestError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<RequestError>(RequestError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string ValueError::ToString() const {
std::stringstream ss_;
ss_ << "ValueError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<ValueError>(ValueError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string WindowError::ToString() const {
std::stringstream ss_;
ss_ << "WindowError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<WindowError>(WindowError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string PixmapError::ToString() const {
std::stringstream ss_;
ss_ << "PixmapError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<PixmapError>(PixmapError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string AtomError::ToString() const {
std::stringstream ss_;
ss_ << "AtomError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<AtomError>(AtomError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string CursorError::ToString() const {
std::stringstream ss_;
ss_ << "CursorError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<CursorError>(CursorError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string FontError::ToString() const {
std::stringstream ss_;
ss_ << "FontError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<FontError>(FontError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string MatchError::ToString() const {
std::stringstream ss_;
ss_ << "MatchError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<MatchError>(MatchError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string DrawableError::ToString() const {
std::stringstream ss_;
ss_ << "DrawableError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<DrawableError>(DrawableError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string AccessError::ToString() const {
std::stringstream ss_;
ss_ << "AccessError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<AccessError>(AccessError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string AllocError::ToString() const {
std::stringstream ss_;
ss_ << "AllocError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<AllocError>(AllocError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string ColormapError::ToString() const {
std::stringstream ss_;
ss_ << "ColormapError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<ColormapError>(ColormapError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string GContextError::ToString() const {
std::stringstream ss_;
ss_ << "GContextError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<GContextError>(GContextError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string IDChoiceError::ToString() const {
std::stringstream ss_;
ss_ << "IDChoiceError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<IDChoiceError>(IDChoiceError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string NameError::ToString() const {
std::stringstream ss_;
ss_ << "NameError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<NameError>(NameError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string LengthError::ToString() const {
std::stringstream ss_;
ss_ << "LengthError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<LengthError>(LengthError* error_, ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
std::string ImplementationError::ToString() const {
std::stringstream ss_;
ss_ << "ImplementationError{";
ss_ << ".sequence = " << static_cast<uint64_t>(sequence) << ", ";
ss_ << ".bad_value = " << static_cast<uint64_t>(bad_value) << ", ";
ss_ << ".minor_opcode = " << static_cast<uint64_t>(minor_opcode) << ", ";
ss_ << ".major_opcode = " << static_cast<uint64_t>(major_opcode);
ss_ << "}";
return ss_.str();
}
template <>
void ReadError<ImplementationError>(ImplementationError* error_,
ReadBuffer* buffer) {
auto& buf = *buffer;
auto& sequence = (*error_).sequence;
auto& bad_value = (*error_).bad_value;
auto& minor_opcode = (*error_).minor_opcode;
auto& major_opcode = (*error_).major_opcode;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// error_code
uint8_t error_code;
Read(&error_code, &buf);
// sequence
Read(&sequence, &buf);
// bad_value
Read(&bad_value, &buf);
// minor_opcode
Read(&minor_opcode, &buf);
// major_opcode
Read(&major_opcode, &buf);
// pad0
Pad(&buf, 1);
DCHECK_LE(buf.offset, 32ul);
}
Future<void> XProto::CreateWindow(const CreateWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& depth = request.depth;
auto& wid = request.wid;
auto& parent = request.parent;
auto& x = request.x;
auto& y = request.y;
auto& width = request.width;
auto& height = request.height;
auto& border_width = request.border_width;
auto& c_class = request.c_class;
auto& visual = request.visual;
CreateWindowAttribute value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 1;
buf.Write(&major_opcode);
// depth
buf.Write(&depth);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// wid
buf.Write(&wid);
// parent
buf.Write(&parent);
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// border_width
buf.Write(&border_width);
// c_class
uint16_t tmp26;
tmp26 = static_cast<uint16_t>(c_class);
buf.Write(&tmp26);
// visual
buf.Write(&visual);
// value_mask
SwitchVar(CreateWindowAttribute::BackPixmap,
value_list.background_pixmap.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackPixel,
value_list.background_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BorderPixmap,
value_list.border_pixmap.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BorderPixel,
value_list.border_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BitGravity,
value_list.bit_gravity.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::WinGravity,
value_list.win_gravity.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingStore,
value_list.backing_store.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingPlanes,
value_list.backing_planes.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingPixel,
value_list.backing_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::OverrideRedirect,
value_list.override_redirect.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::SaveUnder, value_list.save_under.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::EventMask, value_list.event_mask.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::DontPropagate,
value_list.do_not_propogate_mask.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::Colormap, value_list.colormap.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::Cursor, value_list.cursor.has_value(), true,
&value_mask);
uint32_t tmp27;
tmp27 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp27);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackPixmap)) {
auto& background_pixmap = *value_list.background_pixmap;
// background_pixmap
buf.Write(&background_pixmap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackPixel)) {
auto& background_pixel = *value_list.background_pixel;
// background_pixel
buf.Write(&background_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BorderPixmap)) {
auto& border_pixmap = *value_list.border_pixmap;
// border_pixmap
buf.Write(&border_pixmap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BorderPixel)) {
auto& border_pixel = *value_list.border_pixel;
// border_pixel
buf.Write(&border_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BitGravity)) {
auto& bit_gravity = *value_list.bit_gravity;
// bit_gravity
uint32_t tmp28;
tmp28 = static_cast<uint32_t>(bit_gravity);
buf.Write(&tmp28);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::WinGravity)) {
auto& win_gravity = *value_list.win_gravity;
// win_gravity
uint32_t tmp29;
tmp29 = static_cast<uint32_t>(win_gravity);
buf.Write(&tmp29);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingStore)) {
auto& backing_store = *value_list.backing_store;
// backing_store
uint32_t tmp30;
tmp30 = static_cast<uint32_t>(backing_store);
buf.Write(&tmp30);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingPlanes)) {
auto& backing_planes = *value_list.backing_planes;
// backing_planes
buf.Write(&backing_planes);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingPixel)) {
auto& backing_pixel = *value_list.backing_pixel;
// backing_pixel
buf.Write(&backing_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::OverrideRedirect)) {
auto& override_redirect = *value_list.override_redirect;
// override_redirect
buf.Write(&override_redirect);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::SaveUnder)) {
auto& save_under = *value_list.save_under;
// save_under
buf.Write(&save_under);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::EventMask)) {
auto& event_mask = *value_list.event_mask;
// event_mask
uint32_t tmp31;
tmp31 = static_cast<uint32_t>(event_mask);
buf.Write(&tmp31);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::DontPropagate)) {
auto& do_not_propogate_mask = *value_list.do_not_propogate_mask;
// do_not_propogate_mask
uint32_t tmp32;
tmp32 = static_cast<uint32_t>(do_not_propogate_mask);
buf.Write(&tmp32);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::Colormap)) {
auto& colormap = *value_list.colormap;
// colormap
buf.Write(&colormap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::Cursor)) {
auto& cursor = *value_list.cursor;
// cursor
buf.Write(&cursor);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreateWindow", false);
}
Future<void> XProto::CreateWindow(
const uint8_t& depth,
const Window& wid,
const Window& parent,
const int16_t& x,
const int16_t& y,
const uint16_t& width,
const uint16_t& height,
const uint16_t& border_width,
const WindowClass& c_class,
const VisualId& visual,
const absl::optional<Pixmap>& background_pixmap,
const absl::optional<uint32_t>& background_pixel,
const absl::optional<Pixmap>& border_pixmap,
const absl::optional<uint32_t>& border_pixel,
const absl::optional<Gravity>& bit_gravity,
const absl::optional<Gravity>& win_gravity,
const absl::optional<BackingStore>& backing_store,
const absl::optional<uint32_t>& backing_planes,
const absl::optional<uint32_t>& backing_pixel,
const absl::optional<Bool32>& override_redirect,
const absl::optional<Bool32>& save_under,
const absl::optional<EventMask>& event_mask,
const absl::optional<EventMask>& do_not_propogate_mask,
const absl::optional<ColorMap>& colormap,
const absl::optional<Cursor>& cursor) {
return XProto::CreateWindow(CreateWindowRequest{depth,
wid,
parent,
x,
y,
width,
height,
border_width,
c_class,
visual,
background_pixmap,
background_pixel,
border_pixmap,
border_pixel,
bit_gravity,
win_gravity,
backing_store,
backing_planes,
backing_pixel,
override_redirect,
save_under,
event_mask,
do_not_propogate_mask,
colormap,
cursor});
}
Future<void> XProto::ChangeWindowAttributes(
const ChangeWindowAttributesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
CreateWindowAttribute value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 2;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// value_mask
SwitchVar(CreateWindowAttribute::BackPixmap,
value_list.background_pixmap.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackPixel,
value_list.background_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BorderPixmap,
value_list.border_pixmap.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BorderPixel,
value_list.border_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BitGravity,
value_list.bit_gravity.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::WinGravity,
value_list.win_gravity.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingStore,
value_list.backing_store.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingPlanes,
value_list.backing_planes.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::BackingPixel,
value_list.backing_pixel.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::OverrideRedirect,
value_list.override_redirect.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::SaveUnder, value_list.save_under.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::EventMask, value_list.event_mask.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::DontPropagate,
value_list.do_not_propogate_mask.has_value(), true, &value_mask);
SwitchVar(CreateWindowAttribute::Colormap, value_list.colormap.has_value(),
true, &value_mask);
SwitchVar(CreateWindowAttribute::Cursor, value_list.cursor.has_value(), true,
&value_mask);
uint32_t tmp33;
tmp33 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp33);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackPixmap)) {
auto& background_pixmap = *value_list.background_pixmap;
// background_pixmap
buf.Write(&background_pixmap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackPixel)) {
auto& background_pixel = *value_list.background_pixel;
// background_pixel
buf.Write(&background_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BorderPixmap)) {
auto& border_pixmap = *value_list.border_pixmap;
// border_pixmap
buf.Write(&border_pixmap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BorderPixel)) {
auto& border_pixel = *value_list.border_pixel;
// border_pixel
buf.Write(&border_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BitGravity)) {
auto& bit_gravity = *value_list.bit_gravity;
// bit_gravity
uint32_t tmp34;
tmp34 = static_cast<uint32_t>(bit_gravity);
buf.Write(&tmp34);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::WinGravity)) {
auto& win_gravity = *value_list.win_gravity;
// win_gravity
uint32_t tmp35;
tmp35 = static_cast<uint32_t>(win_gravity);
buf.Write(&tmp35);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingStore)) {
auto& backing_store = *value_list.backing_store;
// backing_store
uint32_t tmp36;
tmp36 = static_cast<uint32_t>(backing_store);
buf.Write(&tmp36);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingPlanes)) {
auto& backing_planes = *value_list.backing_planes;
// backing_planes
buf.Write(&backing_planes);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::BackingPixel)) {
auto& backing_pixel = *value_list.backing_pixel;
// backing_pixel
buf.Write(&backing_pixel);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::OverrideRedirect)) {
auto& override_redirect = *value_list.override_redirect;
// override_redirect
buf.Write(&override_redirect);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::SaveUnder)) {
auto& save_under = *value_list.save_under;
// save_under
buf.Write(&save_under);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::EventMask)) {
auto& event_mask = *value_list.event_mask;
// event_mask
uint32_t tmp37;
tmp37 = static_cast<uint32_t>(event_mask);
buf.Write(&tmp37);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::DontPropagate)) {
auto& do_not_propogate_mask = *value_list.do_not_propogate_mask;
// do_not_propogate_mask
uint32_t tmp38;
tmp38 = static_cast<uint32_t>(do_not_propogate_mask);
buf.Write(&tmp38);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::Colormap)) {
auto& colormap = *value_list.colormap;
// colormap
buf.Write(&colormap);
}
if (CaseAnd(value_list_expr, CreateWindowAttribute::Cursor)) {
auto& cursor = *value_list.cursor;
// cursor
buf.Write(&cursor);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeWindowAttributes", false);
}
Future<void> XProto::ChangeWindowAttributes(
const Window& window,
const absl::optional<Pixmap>& background_pixmap,
const absl::optional<uint32_t>& background_pixel,
const absl::optional<Pixmap>& border_pixmap,
const absl::optional<uint32_t>& border_pixel,
const absl::optional<Gravity>& bit_gravity,
const absl::optional<Gravity>& win_gravity,
const absl::optional<BackingStore>& backing_store,
const absl::optional<uint32_t>& backing_planes,
const absl::optional<uint32_t>& backing_pixel,
const absl::optional<Bool32>& override_redirect,
const absl::optional<Bool32>& save_under,
const absl::optional<EventMask>& event_mask,
const absl::optional<EventMask>& do_not_propogate_mask,
const absl::optional<ColorMap>& colormap,
const absl::optional<Cursor>& cursor) {
return XProto::ChangeWindowAttributes(ChangeWindowAttributesRequest{
window, background_pixmap, background_pixel, border_pixmap, border_pixel,
bit_gravity, win_gravity, backing_store, backing_planes, backing_pixel,
override_redirect, save_under, event_mask, do_not_propogate_mask,
colormap, cursor});
}
Future<GetWindowAttributesReply> XProto::GetWindowAttributes(
const GetWindowAttributesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 3;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<GetWindowAttributesReply>(
&buf, "GetWindowAttributes", false);
}
Future<GetWindowAttributesReply> XProto::GetWindowAttributes(
const Window& window) {
return XProto::GetWindowAttributes(GetWindowAttributesRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetWindowAttributesReply> detail::ReadReply<
GetWindowAttributesReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetWindowAttributesReply>();
auto& backing_store = (*reply).backing_store;
auto& sequence = (*reply).sequence;
auto& visual = (*reply).visual;
auto& c_class = (*reply).c_class;
auto& bit_gravity = (*reply).bit_gravity;
auto& win_gravity = (*reply).win_gravity;
auto& backing_planes = (*reply).backing_planes;
auto& backing_pixel = (*reply).backing_pixel;
auto& save_under = (*reply).save_under;
auto& map_is_installed = (*reply).map_is_installed;
auto& map_state = (*reply).map_state;
auto& override_redirect = (*reply).override_redirect;
auto& colormap = (*reply).colormap;
auto& all_event_masks = (*reply).all_event_masks;
auto& your_event_mask = (*reply).your_event_mask;
auto& do_not_propagate_mask = (*reply).do_not_propagate_mask;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// backing_store
uint8_t tmp39;
Read(&tmp39, &buf);
backing_store = static_cast<BackingStore>(tmp39);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// visual
Read(&visual, &buf);
// c_class
uint16_t tmp40;
Read(&tmp40, &buf);
c_class = static_cast<WindowClass>(tmp40);
// bit_gravity
uint8_t tmp41;
Read(&tmp41, &buf);
bit_gravity = static_cast<Gravity>(tmp41);
// win_gravity
uint8_t tmp42;
Read(&tmp42, &buf);
win_gravity = static_cast<Gravity>(tmp42);
// backing_planes
Read(&backing_planes, &buf);
// backing_pixel
Read(&backing_pixel, &buf);
// save_under
Read(&save_under, &buf);
// map_is_installed
Read(&map_is_installed, &buf);
// map_state
uint8_t tmp43;
Read(&tmp43, &buf);
map_state = static_cast<MapState>(tmp43);
// override_redirect
Read(&override_redirect, &buf);
// colormap
Read(&colormap, &buf);
// all_event_masks
uint32_t tmp44;
Read(&tmp44, &buf);
all_event_masks = static_cast<EventMask>(tmp44);
// your_event_mask
uint32_t tmp45;
Read(&tmp45, &buf);
your_event_mask = static_cast<EventMask>(tmp45);
// do_not_propagate_mask
uint16_t tmp46;
Read(&tmp46, &buf);
do_not_propagate_mask = static_cast<EventMask>(tmp46);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::DestroyWindow(const DestroyWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 4;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "DestroyWindow", false);
}
Future<void> XProto::DestroyWindow(const Window& window) {
return XProto::DestroyWindow(DestroyWindowRequest{window});
}
Future<void> XProto::DestroySubwindows(
const DestroySubwindowsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 5;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "DestroySubwindows", false);
}
Future<void> XProto::DestroySubwindows(const Window& window) {
return XProto::DestroySubwindows(DestroySubwindowsRequest{window});
}
Future<void> XProto::ChangeSaveSet(const ChangeSaveSetRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 6;
buf.Write(&major_opcode);
// mode
uint8_t tmp47;
tmp47 = static_cast<uint8_t>(mode);
buf.Write(&tmp47);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeSaveSet", false);
}
Future<void> XProto::ChangeSaveSet(const SetMode& mode, const Window& window) {
return XProto::ChangeSaveSet(ChangeSaveSetRequest{mode, window});
}
Future<void> XProto::ReparentWindow(const ReparentWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& parent = request.parent;
auto& x = request.x;
auto& y = request.y;
// major_opcode
uint8_t major_opcode = 7;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// parent
buf.Write(&parent);
// x
buf.Write(&x);
// y
buf.Write(&y);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ReparentWindow", false);
}
Future<void> XProto::ReparentWindow(const Window& window,
const Window& parent,
const int16_t& x,
const int16_t& y) {
return XProto::ReparentWindow(ReparentWindowRequest{window, parent, x, y});
}
Future<void> XProto::MapWindow(const MapWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 8;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "MapWindow", false);
}
Future<void> XProto::MapWindow(const Window& window) {
return XProto::MapWindow(MapWindowRequest{window});
}
Future<void> XProto::MapSubwindows(const MapSubwindowsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 9;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "MapSubwindows", false);
}
Future<void> XProto::MapSubwindows(const Window& window) {
return XProto::MapSubwindows(MapSubwindowsRequest{window});
}
Future<void> XProto::UnmapWindow(const UnmapWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 10;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UnmapWindow", false);
}
Future<void> XProto::UnmapWindow(const Window& window) {
return XProto::UnmapWindow(UnmapWindowRequest{window});
}
Future<void> XProto::UnmapSubwindows(const UnmapSubwindowsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 11;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UnmapSubwindows", false);
}
Future<void> XProto::UnmapSubwindows(const Window& window) {
return XProto::UnmapSubwindows(UnmapSubwindowsRequest{window});
}
Future<void> XProto::ConfigureWindow(const ConfigureWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
ConfigWindow value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 12;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// value_mask
SwitchVar(ConfigWindow::X, value_list.x.has_value(), true, &value_mask);
SwitchVar(ConfigWindow::Y, value_list.y.has_value(), true, &value_mask);
SwitchVar(ConfigWindow::Width, value_list.width.has_value(), true,
&value_mask);
SwitchVar(ConfigWindow::Height, value_list.height.has_value(), true,
&value_mask);
SwitchVar(ConfigWindow::BorderWidth, value_list.border_width.has_value(),
true, &value_mask);
SwitchVar(ConfigWindow::Sibling, value_list.sibling.has_value(), true,
&value_mask);
SwitchVar(ConfigWindow::StackMode, value_list.stack_mode.has_value(), true,
&value_mask);
uint16_t tmp48;
tmp48 = static_cast<uint16_t>(value_mask);
buf.Write(&tmp48);
// pad1
Pad(&buf, 2);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, ConfigWindow::X)) {
auto& x = *value_list.x;
// x
buf.Write(&x);
}
if (CaseAnd(value_list_expr, ConfigWindow::Y)) {
auto& y = *value_list.y;
// y
buf.Write(&y);
}
if (CaseAnd(value_list_expr, ConfigWindow::Width)) {
auto& width = *value_list.width;
// width
buf.Write(&width);
}
if (CaseAnd(value_list_expr, ConfigWindow::Height)) {
auto& height = *value_list.height;
// height
buf.Write(&height);
}
if (CaseAnd(value_list_expr, ConfigWindow::BorderWidth)) {
auto& border_width = *value_list.border_width;
// border_width
buf.Write(&border_width);
}
if (CaseAnd(value_list_expr, ConfigWindow::Sibling)) {
auto& sibling = *value_list.sibling;
// sibling
buf.Write(&sibling);
}
if (CaseAnd(value_list_expr, ConfigWindow::StackMode)) {
auto& stack_mode = *value_list.stack_mode;
// stack_mode
uint32_t tmp49;
tmp49 = static_cast<uint32_t>(stack_mode);
buf.Write(&tmp49);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ConfigureWindow", false);
}
Future<void> XProto::ConfigureWindow(
const Window& window,
const absl::optional<int32_t>& x,
const absl::optional<int32_t>& y,
const absl::optional<uint32_t>& width,
const absl::optional<uint32_t>& height,
const absl::optional<uint32_t>& border_width,
const absl::optional<Window>& sibling,
const absl::optional<StackMode>& stack_mode) {
return XProto::ConfigureWindow(ConfigureWindowRequest{
window, x, y, width, height, border_width, sibling, stack_mode});
}
Future<void> XProto::CirculateWindow(const CirculateWindowRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& direction = request.direction;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 13;
buf.Write(&major_opcode);
// direction
uint8_t tmp50;
tmp50 = static_cast<uint8_t>(direction);
buf.Write(&tmp50);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CirculateWindow", false);
}
Future<void> XProto::CirculateWindow(const Circulate& direction,
const Window& window) {
return XProto::CirculateWindow(CirculateWindowRequest{direction, window});
}
Future<GetGeometryReply> XProto::GetGeometry(
const GetGeometryRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
// major_opcode
uint8_t major_opcode = 14;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
Align(&buf, 4);
return connection_->SendRequest<GetGeometryReply>(&buf, "GetGeometry", false);
}
Future<GetGeometryReply> XProto::GetGeometry(const Drawable& drawable) {
return XProto::GetGeometry(GetGeometryRequest{drawable});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetGeometryReply> detail::ReadReply<GetGeometryReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetGeometryReply>();
auto& depth = (*reply).depth;
auto& sequence = (*reply).sequence;
auto& root = (*reply).root;
auto& x = (*reply).x;
auto& y = (*reply).y;
auto& width = (*reply).width;
auto& height = (*reply).height;
auto& border_width = (*reply).border_width;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// depth
Read(&depth, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// root
Read(&root, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
// border_width
Read(&border_width, &buf);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<QueryTreeReply> XProto::QueryTree(const QueryTreeRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 15;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<QueryTreeReply>(&buf, "QueryTree", false);
}
Future<QueryTreeReply> XProto::QueryTree(const Window& window) {
return XProto::QueryTree(QueryTreeRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryTreeReply> detail::ReadReply<QueryTreeReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryTreeReply>();
auto& sequence = (*reply).sequence;
auto& root = (*reply).root;
auto& parent = (*reply).parent;
uint16_t children_len{};
auto& children = (*reply).children;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// root
Read(&root, &buf);
// parent
Read(&parent, &buf);
// children_len
Read(&children_len, &buf);
// pad1
Pad(&buf, 14);
// children
children.resize(children_len);
for (auto& children_elem : children) {
// children_elem
Read(&children_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<InternAtomReply> XProto::InternAtom(const InternAtomRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& only_if_exists = request.only_if_exists;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 16;
buf.Write(&major_opcode);
// only_if_exists
buf.Write(&only_if_exists);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad0
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<InternAtomReply>(&buf, "InternAtom", false);
}
Future<InternAtomReply> XProto::InternAtom(const uint8_t& only_if_exists,
const std::string& name) {
return XProto::InternAtom(InternAtomRequest{only_if_exists, name});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<InternAtomReply> detail::ReadReply<InternAtomReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<InternAtomReply>();
auto& sequence = (*reply).sequence;
auto& atom = (*reply).atom;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// atom
Read(&atom, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<GetAtomNameReply> XProto::GetAtomName(
const GetAtomNameRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& atom = request.atom;
// major_opcode
uint8_t major_opcode = 17;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// atom
buf.Write(&atom);
Align(&buf, 4);
return connection_->SendRequest<GetAtomNameReply>(&buf, "GetAtomName", false);
}
Future<GetAtomNameReply> XProto::GetAtomName(const Atom& atom) {
return XProto::GetAtomName(GetAtomNameRequest{atom});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetAtomNameReply> detail::ReadReply<GetAtomNameReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetAtomNameReply>();
auto& sequence = (*reply).sequence;
uint16_t name_len{};
auto& name = (*reply).name;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// name_len
Read(&name_len, &buf);
// pad1
Pad(&buf, 22);
// name
name.resize(name_len);
for (auto& name_elem : name) {
// name_elem
Read(&name_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::ChangeProperty(const ChangePropertyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
auto& window = request.window;
auto& property = request.property;
auto& type = request.type;
auto& format = request.format;
auto& data_len = request.data_len;
auto& data = request.data;
// major_opcode
uint8_t major_opcode = 18;
buf.Write(&major_opcode);
// mode
uint8_t tmp51;
tmp51 = static_cast<uint8_t>(mode);
buf.Write(&tmp51);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// property
buf.Write(&property);
// type
buf.Write(&type);
// format
buf.Write(&format);
// pad0
Pad(&buf, 3);
// data_len
buf.Write(&data_len);
// data
buf.AppendBuffer(data, ((data_len) * (format)) / (8));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeProperty", false);
}
Future<void> XProto::ChangeProperty(
const PropMode& mode,
const Window& window,
const Atom& property,
const Atom& type,
const uint8_t& format,
const uint32_t& data_len,
const scoped_refptr<base::RefCountedMemory>& data) {
return XProto::ChangeProperty(ChangePropertyRequest{
mode, window, property, type, format, data_len, data});
}
Future<void> XProto::DeleteProperty(const DeletePropertyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& property = request.property;
// major_opcode
uint8_t major_opcode = 19;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// property
buf.Write(&property);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "DeleteProperty", false);
}
Future<void> XProto::DeleteProperty(const Window& window,
const Atom& property) {
return XProto::DeleteProperty(DeletePropertyRequest{window, property});
}
Future<GetPropertyReply> XProto::GetProperty(
const GetPropertyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& c_delete = request.c_delete;
auto& window = request.window;
auto& property = request.property;
auto& type = request.type;
auto& long_offset = request.long_offset;
auto& long_length = request.long_length;
// major_opcode
uint8_t major_opcode = 20;
buf.Write(&major_opcode);
// c_delete
buf.Write(&c_delete);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// property
buf.Write(&property);
// type
buf.Write(&type);
// long_offset
buf.Write(&long_offset);
// long_length
buf.Write(&long_length);
Align(&buf, 4);
return connection_->SendRequest<GetPropertyReply>(&buf, "GetProperty", false);
}
Future<GetPropertyReply> XProto::GetProperty(const uint8_t& c_delete,
const Window& window,
const Atom& property,
const Atom& type,
const uint32_t& long_offset,
const uint32_t& long_length) {
return XProto::GetProperty(GetPropertyRequest{
c_delete, window, property, type, long_offset, long_length});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetPropertyReply> detail::ReadReply<GetPropertyReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetPropertyReply>();
auto& format = (*reply).format;
auto& sequence = (*reply).sequence;
auto& type = (*reply).type;
auto& bytes_after = (*reply).bytes_after;
auto& value_len = (*reply).value_len;
auto& value = (*reply).value;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// format
Read(&format, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// type
Read(&type, &buf);
// bytes_after
Read(&bytes_after, &buf);
// value_len
Read(&value_len, &buf);
// pad0
Pad(&buf, 12);
// value
value = buffer->ReadAndAdvance((value_len) * ((format) / (8)));
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<ListPropertiesReply> XProto::ListProperties(
const ListPropertiesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 21;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<ListPropertiesReply>(&buf, "ListProperties",
false);
}
Future<ListPropertiesReply> XProto::ListProperties(const Window& window) {
return XProto::ListProperties(ListPropertiesRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListPropertiesReply> detail::ReadReply<ListPropertiesReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListPropertiesReply>();
auto& sequence = (*reply).sequence;
uint16_t atoms_len{};
auto& atoms = (*reply).atoms;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// atoms_len
Read(&atoms_len, &buf);
// pad1
Pad(&buf, 22);
// atoms
atoms.resize(atoms_len);
for (auto& atoms_elem : atoms) {
// atoms_elem
Read(&atoms_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::SetSelectionOwner(
const SetSelectionOwnerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& owner = request.owner;
auto& selection = request.selection;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 22;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// owner
buf.Write(&owner);
// selection
buf.Write(&selection);
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetSelectionOwner", false);
}
Future<void> XProto::SetSelectionOwner(const Window& owner,
const Atom& selection,
const Time& time) {
return XProto::SetSelectionOwner(
SetSelectionOwnerRequest{owner, selection, time});
}
Future<GetSelectionOwnerReply> XProto::GetSelectionOwner(
const GetSelectionOwnerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& selection = request.selection;
// major_opcode
uint8_t major_opcode = 23;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// selection
buf.Write(&selection);
Align(&buf, 4);
return connection_->SendRequest<GetSelectionOwnerReply>(
&buf, "GetSelectionOwner", false);
}
Future<GetSelectionOwnerReply> XProto::GetSelectionOwner(
const Atom& selection) {
return XProto::GetSelectionOwner(GetSelectionOwnerRequest{selection});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetSelectionOwnerReply> detail::ReadReply<
GetSelectionOwnerReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetSelectionOwnerReply>();
auto& sequence = (*reply).sequence;
auto& owner = (*reply).owner;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// owner
Read(&owner, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::ConvertSelection(const ConvertSelectionRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& requestor = request.requestor;
auto& selection = request.selection;
auto& target = request.target;
auto& property = request.property;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 24;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// requestor
buf.Write(&requestor);
// selection
buf.Write(&selection);
// target
buf.Write(&target);
// property
buf.Write(&property);
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ConvertSelection", false);
}
Future<void> XProto::ConvertSelection(const Window& requestor,
const Atom& selection,
const Atom& target,
const Atom& property,
const Time& time) {
return XProto::ConvertSelection(
ConvertSelectionRequest{requestor, selection, target, property, time});
}
Future<void> XProto::SendEvent(const SendEventRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& propagate = request.propagate;
auto& destination = request.destination;
auto& event_mask = request.event_mask;
auto& event = request.event;
size_t event_len = event.size();
// major_opcode
uint8_t major_opcode = 25;
buf.Write(&major_opcode);
// propagate
buf.Write(&propagate);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// destination
buf.Write(&destination);
// event_mask
uint32_t tmp52;
tmp52 = static_cast<uint32_t>(event_mask);
buf.Write(&tmp52);
// event
for (auto& event_elem : event) {
// event_elem
buf.Write(&event_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SendEvent", false);
}
Future<void> XProto::SendEvent(const uint8_t& propagate,
const Window& destination,
const EventMask& event_mask,
const std::array<char, 32>& event) {
return XProto::SendEvent(
SendEventRequest{propagate, destination, event_mask, event});
}
Future<GrabPointerReply> XProto::GrabPointer(
const GrabPointerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& owner_events = request.owner_events;
auto& grab_window = request.grab_window;
auto& event_mask = request.event_mask;
auto& pointer_mode = request.pointer_mode;
auto& keyboard_mode = request.keyboard_mode;
auto& confine_to = request.confine_to;
auto& cursor = request.cursor;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 26;
buf.Write(&major_opcode);
// owner_events
buf.Write(&owner_events);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// event_mask
uint16_t tmp53;
tmp53 = static_cast<uint16_t>(event_mask);
buf.Write(&tmp53);
// pointer_mode
uint8_t tmp54;
tmp54 = static_cast<uint8_t>(pointer_mode);
buf.Write(&tmp54);
// keyboard_mode
uint8_t tmp55;
tmp55 = static_cast<uint8_t>(keyboard_mode);
buf.Write(&tmp55);
// confine_to
buf.Write(&confine_to);
// cursor
buf.Write(&cursor);
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<GrabPointerReply>(&buf, "GrabPointer", false);
}
Future<GrabPointerReply> XProto::GrabPointer(const uint8_t& owner_events,
const Window& grab_window,
const EventMask& event_mask,
const GrabMode& pointer_mode,
const GrabMode& keyboard_mode,
const Window& confine_to,
const Cursor& cursor,
const Time& time) {
return XProto::GrabPointer(
GrabPointerRequest{owner_events, grab_window, event_mask, pointer_mode,
keyboard_mode, confine_to, cursor, time});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GrabPointerReply> detail::ReadReply<GrabPointerReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GrabPointerReply>();
auto& status = (*reply).status;
auto& sequence = (*reply).sequence;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// status
uint8_t tmp56;
Read(&tmp56, &buf);
status = static_cast<GrabStatus>(tmp56);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::UngrabPointer(const UngrabPointerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 27;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UngrabPointer", false);
}
Future<void> XProto::UngrabPointer(const Time& time) {
return XProto::UngrabPointer(UngrabPointerRequest{time});
}
Future<void> XProto::GrabButton(const GrabButtonRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& owner_events = request.owner_events;
auto& grab_window = request.grab_window;
auto& event_mask = request.event_mask;
auto& pointer_mode = request.pointer_mode;
auto& keyboard_mode = request.keyboard_mode;
auto& confine_to = request.confine_to;
auto& cursor = request.cursor;
auto& button = request.button;
auto& modifiers = request.modifiers;
// major_opcode
uint8_t major_opcode = 28;
buf.Write(&major_opcode);
// owner_events
buf.Write(&owner_events);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// event_mask
uint16_t tmp57;
tmp57 = static_cast<uint16_t>(event_mask);
buf.Write(&tmp57);
// pointer_mode
uint8_t tmp58;
tmp58 = static_cast<uint8_t>(pointer_mode);
buf.Write(&tmp58);
// keyboard_mode
uint8_t tmp59;
tmp59 = static_cast<uint8_t>(keyboard_mode);
buf.Write(&tmp59);
// confine_to
buf.Write(&confine_to);
// cursor
buf.Write(&cursor);
// button
uint8_t tmp60;
tmp60 = static_cast<uint8_t>(button);
buf.Write(&tmp60);
// pad0
Pad(&buf, 1);
// modifiers
uint16_t tmp61;
tmp61 = static_cast<uint16_t>(modifiers);
buf.Write(&tmp61);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "GrabButton", false);
}
Future<void> XProto::GrabButton(const uint8_t& owner_events,
const Window& grab_window,
const EventMask& event_mask,
const GrabMode& pointer_mode,
const GrabMode& keyboard_mode,
const Window& confine_to,
const Cursor& cursor,
const ButtonIndex& button,
const ModMask& modifiers) {
return XProto::GrabButton(
GrabButtonRequest{owner_events, grab_window, event_mask, pointer_mode,
keyboard_mode, confine_to, cursor, button, modifiers});
}
Future<void> XProto::UngrabButton(const UngrabButtonRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& button = request.button;
auto& grab_window = request.grab_window;
auto& modifiers = request.modifiers;
// major_opcode
uint8_t major_opcode = 29;
buf.Write(&major_opcode);
// button
uint8_t tmp62;
tmp62 = static_cast<uint8_t>(button);
buf.Write(&tmp62);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// modifiers
uint16_t tmp63;
tmp63 = static_cast<uint16_t>(modifiers);
buf.Write(&tmp63);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UngrabButton", false);
}
Future<void> XProto::UngrabButton(const ButtonIndex& button,
const Window& grab_window,
const ModMask& modifiers) {
return XProto::UngrabButton(
UngrabButtonRequest{button, grab_window, modifiers});
}
Future<void> XProto::ChangeActivePointerGrab(
const ChangeActivePointerGrabRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cursor = request.cursor;
auto& time = request.time;
auto& event_mask = request.event_mask;
// major_opcode
uint8_t major_opcode = 30;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cursor
buf.Write(&cursor);
// time
buf.Write(&time);
// event_mask
uint16_t tmp64;
tmp64 = static_cast<uint16_t>(event_mask);
buf.Write(&tmp64);
// pad1
Pad(&buf, 2);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeActivePointerGrab", false);
}
Future<void> XProto::ChangeActivePointerGrab(const Cursor& cursor,
const Time& time,
const EventMask& event_mask) {
return XProto::ChangeActivePointerGrab(
ChangeActivePointerGrabRequest{cursor, time, event_mask});
}
Future<GrabKeyboardReply> XProto::GrabKeyboard(
const GrabKeyboardRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& owner_events = request.owner_events;
auto& grab_window = request.grab_window;
auto& time = request.time;
auto& pointer_mode = request.pointer_mode;
auto& keyboard_mode = request.keyboard_mode;
// major_opcode
uint8_t major_opcode = 31;
buf.Write(&major_opcode);
// owner_events
buf.Write(&owner_events);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// time
buf.Write(&time);
// pointer_mode
uint8_t tmp65;
tmp65 = static_cast<uint8_t>(pointer_mode);
buf.Write(&tmp65);
// keyboard_mode
uint8_t tmp66;
tmp66 = static_cast<uint8_t>(keyboard_mode);
buf.Write(&tmp66);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
return connection_->SendRequest<GrabKeyboardReply>(&buf, "GrabKeyboard",
false);
}
Future<GrabKeyboardReply> XProto::GrabKeyboard(const uint8_t& owner_events,
const Window& grab_window,
const Time& time,
const GrabMode& pointer_mode,
const GrabMode& keyboard_mode) {
return XProto::GrabKeyboard(GrabKeyboardRequest{
owner_events, grab_window, time, pointer_mode, keyboard_mode});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GrabKeyboardReply> detail::ReadReply<GrabKeyboardReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GrabKeyboardReply>();
auto& status = (*reply).status;
auto& sequence = (*reply).sequence;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// status
uint8_t tmp67;
Read(&tmp67, &buf);
status = static_cast<GrabStatus>(tmp67);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::UngrabKeyboard(const UngrabKeyboardRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 32;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UngrabKeyboard", false);
}
Future<void> XProto::UngrabKeyboard(const Time& time) {
return XProto::UngrabKeyboard(UngrabKeyboardRequest{time});
}
Future<void> XProto::GrabKey(const GrabKeyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& owner_events = request.owner_events;
auto& grab_window = request.grab_window;
auto& modifiers = request.modifiers;
auto& key = request.key;
auto& pointer_mode = request.pointer_mode;
auto& keyboard_mode = request.keyboard_mode;
// major_opcode
uint8_t major_opcode = 33;
buf.Write(&major_opcode);
// owner_events
buf.Write(&owner_events);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// modifiers
uint16_t tmp68;
tmp68 = static_cast<uint16_t>(modifiers);
buf.Write(&tmp68);
// key
buf.Write(&key);
// pointer_mode
uint8_t tmp69;
tmp69 = static_cast<uint8_t>(pointer_mode);
buf.Write(&tmp69);
// keyboard_mode
uint8_t tmp70;
tmp70 = static_cast<uint8_t>(keyboard_mode);
buf.Write(&tmp70);
// pad0
Pad(&buf, 3);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "GrabKey", false);
}
Future<void> XProto::GrabKey(const uint8_t& owner_events,
const Window& grab_window,
const ModMask& modifiers,
const KeyCode& key,
const GrabMode& pointer_mode,
const GrabMode& keyboard_mode) {
return XProto::GrabKey(GrabKeyRequest{owner_events, grab_window, modifiers,
key, pointer_mode, keyboard_mode});
}
Future<void> XProto::UngrabKey(const UngrabKeyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& key = request.key;
auto& grab_window = request.grab_window;
auto& modifiers = request.modifiers;
// major_opcode
uint8_t major_opcode = 34;
buf.Write(&major_opcode);
// key
buf.Write(&key);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// grab_window
buf.Write(&grab_window);
// modifiers
uint16_t tmp71;
tmp71 = static_cast<uint16_t>(modifiers);
buf.Write(&tmp71);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UngrabKey", false);
}
Future<void> XProto::UngrabKey(const KeyCode& key,
const Window& grab_window,
const ModMask& modifiers) {
return XProto::UngrabKey(UngrabKeyRequest{key, grab_window, modifiers});
}
Future<void> XProto::AllowEvents(const AllowEventsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 35;
buf.Write(&major_opcode);
// mode
uint8_t tmp72;
tmp72 = static_cast<uint8_t>(mode);
buf.Write(&tmp72);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "AllowEvents", false);
}
Future<void> XProto::AllowEvents(const Allow& mode, const Time& time) {
return XProto::AllowEvents(AllowEventsRequest{mode, time});
}
Future<void> XProto::GrabServer(const GrabServerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 36;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "GrabServer", false);
}
Future<void> XProto::GrabServer() {
return XProto::GrabServer(GrabServerRequest{});
}
Future<void> XProto::UngrabServer(const UngrabServerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 37;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UngrabServer", false);
}
Future<void> XProto::UngrabServer() {
return XProto::UngrabServer(UngrabServerRequest{});
}
Future<QueryPointerReply> XProto::QueryPointer(
const QueryPointerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 38;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<QueryPointerReply>(&buf, "QueryPointer",
false);
}
Future<QueryPointerReply> XProto::QueryPointer(const Window& window) {
return XProto::QueryPointer(QueryPointerRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryPointerReply> detail::ReadReply<QueryPointerReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryPointerReply>();
auto& same_screen = (*reply).same_screen;
auto& sequence = (*reply).sequence;
auto& root = (*reply).root;
auto& child = (*reply).child;
auto& root_x = (*reply).root_x;
auto& root_y = (*reply).root_y;
auto& win_x = (*reply).win_x;
auto& win_y = (*reply).win_y;
auto& mask = (*reply).mask;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// same_screen
Read(&same_screen, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// root
Read(&root, &buf);
// child
Read(&child, &buf);
// root_x
Read(&root_x, &buf);
// root_y
Read(&root_y, &buf);
// win_x
Read(&win_x, &buf);
// win_y
Read(&win_y, &buf);
// mask
uint16_t tmp73;
Read(&tmp73, &buf);
mask = static_cast<KeyButMask>(tmp73);
// pad0
Pad(&buf, 2);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<GetMotionEventsReply> XProto::GetMotionEvents(
const GetMotionEventsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& start = request.start;
auto& stop = request.stop;
// major_opcode
uint8_t major_opcode = 39;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// start
buf.Write(&start);
// stop
buf.Write(&stop);
Align(&buf, 4);
return connection_->SendRequest<GetMotionEventsReply>(&buf, "GetMotionEvents",
false);
}
Future<GetMotionEventsReply> XProto::GetMotionEvents(const Window& window,
const Time& start,
const Time& stop) {
return XProto::GetMotionEvents(GetMotionEventsRequest{window, start, stop});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetMotionEventsReply> detail::ReadReply<GetMotionEventsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetMotionEventsReply>();
auto& sequence = (*reply).sequence;
uint32_t events_len{};
auto& events = (*reply).events;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// events_len
Read(&events_len, &buf);
// pad1
Pad(&buf, 20);
// events
events.resize(events_len);
for (auto& events_elem : events) {
// events_elem
{
auto& time = events_elem.time;
auto& x = events_elem.x;
auto& y = events_elem.y;
// time
Read(&time, &buf);
// x
Read(&x, &buf);
// y
Read(&y, &buf);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<TranslateCoordinatesReply> XProto::TranslateCoordinates(
const TranslateCoordinatesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& src_window = request.src_window;
auto& dst_window = request.dst_window;
auto& src_x = request.src_x;
auto& src_y = request.src_y;
// major_opcode
uint8_t major_opcode = 40;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// src_window
buf.Write(&src_window);
// dst_window
buf.Write(&dst_window);
// src_x
buf.Write(&src_x);
// src_y
buf.Write(&src_y);
Align(&buf, 4);
return connection_->SendRequest<TranslateCoordinatesReply>(
&buf, "TranslateCoordinates", false);
}
Future<TranslateCoordinatesReply> XProto::TranslateCoordinates(
const Window& src_window,
const Window& dst_window,
const int16_t& src_x,
const int16_t& src_y) {
return XProto::TranslateCoordinates(
TranslateCoordinatesRequest{src_window, dst_window, src_x, src_y});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<TranslateCoordinatesReply> detail::ReadReply<
TranslateCoordinatesReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<TranslateCoordinatesReply>();
auto& same_screen = (*reply).same_screen;
auto& sequence = (*reply).sequence;
auto& child = (*reply).child;
auto& dst_x = (*reply).dst_x;
auto& dst_y = (*reply).dst_y;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// same_screen
Read(&same_screen, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// child
Read(&child, &buf);
// dst_x
Read(&dst_x, &buf);
// dst_y
Read(&dst_y, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::WarpPointer(const WarpPointerRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& src_window = request.src_window;
auto& dst_window = request.dst_window;
auto& src_x = request.src_x;
auto& src_y = request.src_y;
auto& src_width = request.src_width;
auto& src_height = request.src_height;
auto& dst_x = request.dst_x;
auto& dst_y = request.dst_y;
// major_opcode
uint8_t major_opcode = 41;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// src_window
buf.Write(&src_window);
// dst_window
buf.Write(&dst_window);
// src_x
buf.Write(&src_x);
// src_y
buf.Write(&src_y);
// src_width
buf.Write(&src_width);
// src_height
buf.Write(&src_height);
// dst_x
buf.Write(&dst_x);
// dst_y
buf.Write(&dst_y);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "WarpPointer", false);
}
Future<void> XProto::WarpPointer(const Window& src_window,
const Window& dst_window,
const int16_t& src_x,
const int16_t& src_y,
const uint16_t& src_width,
const uint16_t& src_height,
const int16_t& dst_x,
const int16_t& dst_y) {
return XProto::WarpPointer(WarpPointerRequest{src_window, dst_window, src_x,
src_y, src_width, src_height,
dst_x, dst_y});
}
Future<void> XProto::SetInputFocus(const SetInputFocusRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& revert_to = request.revert_to;
auto& focus = request.focus;
auto& time = request.time;
// major_opcode
uint8_t major_opcode = 42;
buf.Write(&major_opcode);
// revert_to
uint8_t tmp74;
tmp74 = static_cast<uint8_t>(revert_to);
buf.Write(&tmp74);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// focus
buf.Write(&focus);
// time
buf.Write(&time);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetInputFocus", false);
}
Future<void> XProto::SetInputFocus(const InputFocus& revert_to,
const Window& focus,
const Time& time) {
return XProto::SetInputFocus(SetInputFocusRequest{revert_to, focus, time});
}
Future<GetInputFocusReply> XProto::GetInputFocus(
const GetInputFocusRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 43;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetInputFocusReply>(&buf, "GetInputFocus",
false);
}
Future<GetInputFocusReply> XProto::GetInputFocus() {
return XProto::GetInputFocus(GetInputFocusRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetInputFocusReply> detail::ReadReply<GetInputFocusReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetInputFocusReply>();
auto& revert_to = (*reply).revert_to;
auto& sequence = (*reply).sequence;
auto& focus = (*reply).focus;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// revert_to
uint8_t tmp75;
Read(&tmp75, &buf);
revert_to = static_cast<InputFocus>(tmp75);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// focus
Read(&focus, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<QueryKeymapReply> XProto::QueryKeymap(
const QueryKeymapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 44;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<QueryKeymapReply>(&buf, "QueryKeymap", false);
}
Future<QueryKeymapReply> XProto::QueryKeymap() {
return XProto::QueryKeymap(QueryKeymapRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryKeymapReply> detail::ReadReply<QueryKeymapReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryKeymapReply>();
auto& sequence = (*reply).sequence;
auto& keys = (*reply).keys;
size_t keys_len = keys.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// keys
for (auto& keys_elem : keys) {
// keys_elem
Read(&keys_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::OpenFont(const OpenFontRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& fid = request.fid;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 45;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// fid
buf.Write(&fid);
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad1
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "OpenFont", false);
}
Future<void> XProto::OpenFont(const Font& fid, const std::string& name) {
return XProto::OpenFont(OpenFontRequest{fid, name});
}
Future<void> XProto::CloseFont(const CloseFontRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& font = request.font;
// major_opcode
uint8_t major_opcode = 46;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// font
buf.Write(&font);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CloseFont", false);
}
Future<void> XProto::CloseFont(const Font& font) {
return XProto::CloseFont(CloseFontRequest{font});
}
Future<QueryFontReply> XProto::QueryFont(const QueryFontRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& font = request.font;
// major_opcode
uint8_t major_opcode = 47;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// font
buf.Write(&font);
Align(&buf, 4);
return connection_->SendRequest<QueryFontReply>(&buf, "QueryFont", false);
}
Future<QueryFontReply> XProto::QueryFont(const Fontable& font) {
return XProto::QueryFont(QueryFontRequest{font});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryFontReply> detail::ReadReply<QueryFontReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryFontReply>();
auto& sequence = (*reply).sequence;
auto& min_bounds = (*reply).min_bounds;
auto& max_bounds = (*reply).max_bounds;
auto& min_char_or_byte2 = (*reply).min_char_or_byte2;
auto& max_char_or_byte2 = (*reply).max_char_or_byte2;
auto& default_char = (*reply).default_char;
uint16_t properties_len{};
auto& draw_direction = (*reply).draw_direction;
auto& min_byte1 = (*reply).min_byte1;
auto& max_byte1 = (*reply).max_byte1;
auto& all_chars_exist = (*reply).all_chars_exist;
auto& font_ascent = (*reply).font_ascent;
auto& font_descent = (*reply).font_descent;
uint32_t char_infos_len{};
auto& properties = (*reply).properties;
auto& char_infos = (*reply).char_infos;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// min_bounds
{
auto& left_side_bearing = min_bounds.left_side_bearing;
auto& right_side_bearing = min_bounds.right_side_bearing;
auto& character_width = min_bounds.character_width;
auto& ascent = min_bounds.ascent;
auto& descent = min_bounds.descent;
auto& attributes = min_bounds.attributes;
// left_side_bearing
Read(&left_side_bearing, &buf);
// right_side_bearing
Read(&right_side_bearing, &buf);
// character_width
Read(&character_width, &buf);
// ascent
Read(&ascent, &buf);
// descent
Read(&descent, &buf);
// attributes
Read(&attributes, &buf);
}
// pad1
Pad(&buf, 4);
// max_bounds
{
auto& left_side_bearing = max_bounds.left_side_bearing;
auto& right_side_bearing = max_bounds.right_side_bearing;
auto& character_width = max_bounds.character_width;
auto& ascent = max_bounds.ascent;
auto& descent = max_bounds.descent;
auto& attributes = max_bounds.attributes;
// left_side_bearing
Read(&left_side_bearing, &buf);
// right_side_bearing
Read(&right_side_bearing, &buf);
// character_width
Read(&character_width, &buf);
// ascent
Read(&ascent, &buf);
// descent
Read(&descent, &buf);
// attributes
Read(&attributes, &buf);
}
// pad2
Pad(&buf, 4);
// min_char_or_byte2
Read(&min_char_or_byte2, &buf);
// max_char_or_byte2
Read(&max_char_or_byte2, &buf);
// default_char
Read(&default_char, &buf);
// properties_len
Read(&properties_len, &buf);
// draw_direction
uint8_t tmp76;
Read(&tmp76, &buf);
draw_direction = static_cast<FontDraw>(tmp76);
// min_byte1
Read(&min_byte1, &buf);
// max_byte1
Read(&max_byte1, &buf);
// all_chars_exist
Read(&all_chars_exist, &buf);
// font_ascent
Read(&font_ascent, &buf);
// font_descent
Read(&font_descent, &buf);
// char_infos_len
Read(&char_infos_len, &buf);
// properties
properties.resize(properties_len);
for (auto& properties_elem : properties) {
// properties_elem
{
auto& name = properties_elem.name;
auto& value = properties_elem.value;
// name
Read(&name, &buf);
// value
Read(&value, &buf);
}
}
// char_infos
char_infos.resize(char_infos_len);
for (auto& char_infos_elem : char_infos) {
// char_infos_elem
{
auto& left_side_bearing = char_infos_elem.left_side_bearing;
auto& right_side_bearing = char_infos_elem.right_side_bearing;
auto& character_width = char_infos_elem.character_width;
auto& ascent = char_infos_elem.ascent;
auto& descent = char_infos_elem.descent;
auto& attributes = char_infos_elem.attributes;
// left_side_bearing
Read(&left_side_bearing, &buf);
// right_side_bearing
Read(&right_side_bearing, &buf);
// character_width
Read(&character_width, &buf);
// ascent
Read(&ascent, &buf);
// descent
Read(&descent, &buf);
// attributes
Read(&attributes, &buf);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<QueryTextExtentsReply> XProto::QueryTextExtents(
const QueryTextExtentsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& font = request.font;
auto& string = request.string;
size_t string_len = string.size();
// major_opcode
uint8_t major_opcode = 48;
buf.Write(&major_opcode);
// odd_length
uint8_t odd_length = BitAnd(string_len, 1);
buf.Write(&odd_length);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// font
buf.Write(&font);
// string
DCHECK_EQ(static_cast<size_t>(string_len), string.size());
for (auto& string_elem : string) {
// string_elem
{
auto& byte1 = string_elem.byte1;
auto& byte2 = string_elem.byte2;
// byte1
buf.Write(&byte1);
// byte2
buf.Write(&byte2);
}
}
Align(&buf, 4);
return connection_->SendRequest<QueryTextExtentsReply>(
&buf, "QueryTextExtents", false);
}
Future<QueryTextExtentsReply> XProto::QueryTextExtents(
const Fontable& font,
const std::vector<Char16>& string) {
return XProto::QueryTextExtents(QueryTextExtentsRequest{font, string});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryTextExtentsReply> detail::ReadReply<QueryTextExtentsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryTextExtentsReply>();
auto& draw_direction = (*reply).draw_direction;
auto& sequence = (*reply).sequence;
auto& font_ascent = (*reply).font_ascent;
auto& font_descent = (*reply).font_descent;
auto& overall_ascent = (*reply).overall_ascent;
auto& overall_descent = (*reply).overall_descent;
auto& overall_width = (*reply).overall_width;
auto& overall_left = (*reply).overall_left;
auto& overall_right = (*reply).overall_right;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// draw_direction
uint8_t tmp77;
Read(&tmp77, &buf);
draw_direction = static_cast<FontDraw>(tmp77);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// font_ascent
Read(&font_ascent, &buf);
// font_descent
Read(&font_descent, &buf);
// overall_ascent
Read(&overall_ascent, &buf);
// overall_descent
Read(&overall_descent, &buf);
// overall_width
Read(&overall_width, &buf);
// overall_left
Read(&overall_left, &buf);
// overall_right
Read(&overall_right, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<ListFontsReply> XProto::ListFonts(const ListFontsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& max_names = request.max_names;
uint16_t pattern_len{};
auto& pattern = request.pattern;
// major_opcode
uint8_t major_opcode = 49;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// max_names
buf.Write(&max_names);
// pattern_len
pattern_len = pattern.size();
buf.Write(&pattern_len);
// pattern
DCHECK_EQ(static_cast<size_t>(pattern_len), pattern.size());
for (auto& pattern_elem : pattern) {
// pattern_elem
buf.Write(&pattern_elem);
}
Align(&buf, 4);
return connection_->SendRequest<ListFontsReply>(&buf, "ListFonts", false);
}
Future<ListFontsReply> XProto::ListFonts(const uint16_t& max_names,
const std::string& pattern) {
return XProto::ListFonts(ListFontsRequest{max_names, pattern});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListFontsReply> detail::ReadReply<ListFontsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListFontsReply>();
auto& sequence = (*reply).sequence;
uint16_t names_len{};
auto& names = (*reply).names;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// names_len
Read(&names_len, &buf);
// pad1
Pad(&buf, 22);
// names
names.resize(names_len);
for (auto& names_elem : names) {
// names_elem
{
uint8_t name_len{};
auto& name = names_elem.name;
// name_len
Read(&name_len, &buf);
// name
name.resize(name_len);
for (auto& name_elem : name) {
// name_elem
Read(&name_elem, &buf);
}
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<ListFontsWithInfoReply> XProto::ListFontsWithInfo(
const ListFontsWithInfoRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& max_names = request.max_names;
uint16_t pattern_len{};
auto& pattern = request.pattern;
// major_opcode
uint8_t major_opcode = 50;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// max_names
buf.Write(&max_names);
// pattern_len
pattern_len = pattern.size();
buf.Write(&pattern_len);
// pattern
DCHECK_EQ(static_cast<size_t>(pattern_len), pattern.size());
for (auto& pattern_elem : pattern) {
// pattern_elem
buf.Write(&pattern_elem);
}
Align(&buf, 4);
return connection_->SendRequest<ListFontsWithInfoReply>(
&buf, "ListFontsWithInfo", false);
}
Future<ListFontsWithInfoReply> XProto::ListFontsWithInfo(
const uint16_t& max_names,
const std::string& pattern) {
return XProto::ListFontsWithInfo(
ListFontsWithInfoRequest{max_names, pattern});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListFontsWithInfoReply> detail::ReadReply<
ListFontsWithInfoReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListFontsWithInfoReply>();
uint8_t name_len{};
auto& sequence = (*reply).sequence;
auto& min_bounds = (*reply).min_bounds;
auto& max_bounds = (*reply).max_bounds;
auto& min_char_or_byte2 = (*reply).min_char_or_byte2;
auto& max_char_or_byte2 = (*reply).max_char_or_byte2;
auto& default_char = (*reply).default_char;
uint16_t properties_len{};
auto& draw_direction = (*reply).draw_direction;
auto& min_byte1 = (*reply).min_byte1;
auto& max_byte1 = (*reply).max_byte1;
auto& all_chars_exist = (*reply).all_chars_exist;
auto& font_ascent = (*reply).font_ascent;
auto& font_descent = (*reply).font_descent;
auto& replies_hint = (*reply).replies_hint;
auto& properties = (*reply).properties;
auto& name = (*reply).name;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// name_len
Read(&name_len, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// min_bounds
{
auto& left_side_bearing = min_bounds.left_side_bearing;
auto& right_side_bearing = min_bounds.right_side_bearing;
auto& character_width = min_bounds.character_width;
auto& ascent = min_bounds.ascent;
auto& descent = min_bounds.descent;
auto& attributes = min_bounds.attributes;
// left_side_bearing
Read(&left_side_bearing, &buf);
// right_side_bearing
Read(&right_side_bearing, &buf);
// character_width
Read(&character_width, &buf);
// ascent
Read(&ascent, &buf);
// descent
Read(&descent, &buf);
// attributes
Read(&attributes, &buf);
}
// pad0
Pad(&buf, 4);
// max_bounds
{
auto& left_side_bearing = max_bounds.left_side_bearing;
auto& right_side_bearing = max_bounds.right_side_bearing;
auto& character_width = max_bounds.character_width;
auto& ascent = max_bounds.ascent;
auto& descent = max_bounds.descent;
auto& attributes = max_bounds.attributes;
// left_side_bearing
Read(&left_side_bearing, &buf);
// right_side_bearing
Read(&right_side_bearing, &buf);
// character_width
Read(&character_width, &buf);
// ascent
Read(&ascent, &buf);
// descent
Read(&descent, &buf);
// attributes
Read(&attributes, &buf);
}
// pad1
Pad(&buf, 4);
// min_char_or_byte2
Read(&min_char_or_byte2, &buf);
// max_char_or_byte2
Read(&max_char_or_byte2, &buf);
// default_char
Read(&default_char, &buf);
// properties_len
Read(&properties_len, &buf);
// draw_direction
uint8_t tmp78;
Read(&tmp78, &buf);
draw_direction = static_cast<FontDraw>(tmp78);
// min_byte1
Read(&min_byte1, &buf);
// max_byte1
Read(&max_byte1, &buf);
// all_chars_exist
Read(&all_chars_exist, &buf);
// font_ascent
Read(&font_ascent, &buf);
// font_descent
Read(&font_descent, &buf);
// replies_hint
Read(&replies_hint, &buf);
// properties
properties.resize(properties_len);
for (auto& properties_elem : properties) {
// properties_elem
{
auto& name = properties_elem.name;
auto& value = properties_elem.value;
// name
Read(&name, &buf);
// value
Read(&value, &buf);
}
}
// name
name.resize(name_len);
for (auto& name_elem : name) {
// name_elem
Read(&name_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::SetFontPath(const SetFontPathRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
uint16_t font_qty{};
auto& font = request.font;
size_t font_len = font.size();
// major_opcode
uint8_t major_opcode = 51;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// font_qty
font_qty = font.size();
buf.Write(&font_qty);
// pad1
Pad(&buf, 2);
// font
DCHECK_EQ(static_cast<size_t>(font_qty), font.size());
for (auto& font_elem : font) {
// font_elem
{
uint8_t name_len{};
auto& name = font_elem.name;
// name_len
name_len = name.size();
buf.Write(&name_len);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetFontPath", false);
}
Future<void> XProto::SetFontPath(const std::vector<Str>& font) {
return XProto::SetFontPath(SetFontPathRequest{font});
}
Future<GetFontPathReply> XProto::GetFontPath(
const GetFontPathRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 52;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetFontPathReply>(&buf, "GetFontPath", false);
}
Future<GetFontPathReply> XProto::GetFontPath() {
return XProto::GetFontPath(GetFontPathRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetFontPathReply> detail::ReadReply<GetFontPathReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetFontPathReply>();
auto& sequence = (*reply).sequence;
uint16_t path_len{};
auto& path = (*reply).path;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// path_len
Read(&path_len, &buf);
// pad1
Pad(&buf, 22);
// path
path.resize(path_len);
for (auto& path_elem : path) {
// path_elem
{
uint8_t name_len{};
auto& name = path_elem.name;
// name_len
Read(&name_len, &buf);
// name
name.resize(name_len);
for (auto& name_elem : name) {
// name_elem
Read(&name_elem, &buf);
}
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::CreatePixmap(const CreatePixmapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& depth = request.depth;
auto& pid = request.pid;
auto& drawable = request.drawable;
auto& width = request.width;
auto& height = request.height;
// major_opcode
uint8_t major_opcode = 53;
buf.Write(&major_opcode);
// depth
buf.Write(&depth);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// pid
buf.Write(&pid);
// drawable
buf.Write(&drawable);
// width
buf.Write(&width);
// height
buf.Write(&height);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreatePixmap", false);
}
Future<void> XProto::CreatePixmap(const uint8_t& depth,
const Pixmap& pid,
const Drawable& drawable,
const uint16_t& width,
const uint16_t& height) {
return XProto::CreatePixmap(
CreatePixmapRequest{depth, pid, drawable, width, height});
}
Future<void> XProto::FreePixmap(const FreePixmapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& pixmap = request.pixmap;
// major_opcode
uint8_t major_opcode = 54;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// pixmap
buf.Write(&pixmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FreePixmap", false);
}
Future<void> XProto::FreePixmap(const Pixmap& pixmap) {
return XProto::FreePixmap(FreePixmapRequest{pixmap});
}
Future<void> XProto::CreateGC(const CreateGCRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cid = request.cid;
auto& drawable = request.drawable;
GraphicsContextAttribute value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 55;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cid
buf.Write(&cid);
// drawable
buf.Write(&drawable);
// value_mask
SwitchVar(GraphicsContextAttribute::Function, value_list.function.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::PlaneMask,
value_list.plane_mask.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Foreground,
value_list.foreground.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Background,
value_list.background.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::LineWidth,
value_list.line_width.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::LineStyle,
value_list.line_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::CapStyle,
value_list.cap_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::JoinStyle,
value_list.join_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::FillStyle,
value_list.fill_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::FillRule,
value_list.fill_rule.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Tile, value_list.tile.has_value(), true,
&value_mask);
SwitchVar(GraphicsContextAttribute::Stipple, value_list.stipple.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::TileStippleOriginX,
value_list.tile_stipple_x_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::TileStippleOriginY,
value_list.tile_stipple_y_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Font, value_list.font.has_value(), true,
&value_mask);
SwitchVar(GraphicsContextAttribute::SubwindowMode,
value_list.subwindow_mode.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::GraphicsExposures,
value_list.graphics_exposures.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipOriginX,
value_list.clip_x_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipOriginY,
value_list.clip_y_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipMask,
value_list.clip_mask.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::DashOffset,
value_list.dash_offset.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::DashList, value_list.dashes.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::ArcMode, value_list.arc_mode.has_value(),
true, &value_mask);
uint32_t tmp79;
tmp79 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp79);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Function)) {
auto& function = *value_list.function;
// function
uint32_t tmp80;
tmp80 = static_cast<uint32_t>(function);
buf.Write(&tmp80);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::PlaneMask)) {
auto& plane_mask = *value_list.plane_mask;
// plane_mask
buf.Write(&plane_mask);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Foreground)) {
auto& foreground = *value_list.foreground;
// foreground
buf.Write(&foreground);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Background)) {
auto& background = *value_list.background;
// background
buf.Write(&background);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::LineWidth)) {
auto& line_width = *value_list.line_width;
// line_width
buf.Write(&line_width);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::LineStyle)) {
auto& line_style = *value_list.line_style;
// line_style
uint32_t tmp81;
tmp81 = static_cast<uint32_t>(line_style);
buf.Write(&tmp81);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::CapStyle)) {
auto& cap_style = *value_list.cap_style;
// cap_style
uint32_t tmp82;
tmp82 = static_cast<uint32_t>(cap_style);
buf.Write(&tmp82);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::JoinStyle)) {
auto& join_style = *value_list.join_style;
// join_style
uint32_t tmp83;
tmp83 = static_cast<uint32_t>(join_style);
buf.Write(&tmp83);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::FillStyle)) {
auto& fill_style = *value_list.fill_style;
// fill_style
uint32_t tmp84;
tmp84 = static_cast<uint32_t>(fill_style);
buf.Write(&tmp84);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::FillRule)) {
auto& fill_rule = *value_list.fill_rule;
// fill_rule
uint32_t tmp85;
tmp85 = static_cast<uint32_t>(fill_rule);
buf.Write(&tmp85);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Tile)) {
auto& tile = *value_list.tile;
// tile
buf.Write(&tile);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Stipple)) {
auto& stipple = *value_list.stipple;
// stipple
buf.Write(&stipple);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::TileStippleOriginX)) {
auto& tile_stipple_x_origin = *value_list.tile_stipple_x_origin;
// tile_stipple_x_origin
buf.Write(&tile_stipple_x_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::TileStippleOriginY)) {
auto& tile_stipple_y_origin = *value_list.tile_stipple_y_origin;
// tile_stipple_y_origin
buf.Write(&tile_stipple_y_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Font)) {
auto& font = *value_list.font;
// font
buf.Write(&font);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::SubwindowMode)) {
auto& subwindow_mode = *value_list.subwindow_mode;
// subwindow_mode
uint32_t tmp86;
tmp86 = static_cast<uint32_t>(subwindow_mode);
buf.Write(&tmp86);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::GraphicsExposures)) {
auto& graphics_exposures = *value_list.graphics_exposures;
// graphics_exposures
buf.Write(&graphics_exposures);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipOriginX)) {
auto& clip_x_origin = *value_list.clip_x_origin;
// clip_x_origin
buf.Write(&clip_x_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipOriginY)) {
auto& clip_y_origin = *value_list.clip_y_origin;
// clip_y_origin
buf.Write(&clip_y_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipMask)) {
auto& clip_mask = *value_list.clip_mask;
// clip_mask
buf.Write(&clip_mask);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::DashOffset)) {
auto& dash_offset = *value_list.dash_offset;
// dash_offset
buf.Write(&dash_offset);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::DashList)) {
auto& dashes = *value_list.dashes;
// dashes
buf.Write(&dashes);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ArcMode)) {
auto& arc_mode = *value_list.arc_mode;
// arc_mode
uint32_t tmp87;
tmp87 = static_cast<uint32_t>(arc_mode);
buf.Write(&tmp87);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreateGC", false);
}
Future<void> XProto::CreateGC(
const GraphicsContext& cid,
const Drawable& drawable,
const absl::optional<Gx>& function,
const absl::optional<uint32_t>& plane_mask,
const absl::optional<uint32_t>& foreground,
const absl::optional<uint32_t>& background,
const absl::optional<uint32_t>& line_width,
const absl::optional<LineStyle>& line_style,
const absl::optional<CapStyle>& cap_style,
const absl::optional<JoinStyle>& join_style,
const absl::optional<FillStyle>& fill_style,
const absl::optional<FillRule>& fill_rule,
const absl::optional<Pixmap>& tile,
const absl::optional<Pixmap>& stipple,
const absl::optional<int32_t>& tile_stipple_x_origin,
const absl::optional<int32_t>& tile_stipple_y_origin,
const absl::optional<Font>& font,
const absl::optional<SubwindowMode>& subwindow_mode,
const absl::optional<Bool32>& graphics_exposures,
const absl::optional<int32_t>& clip_x_origin,
const absl::optional<int32_t>& clip_y_origin,
const absl::optional<Pixmap>& clip_mask,
const absl::optional<uint32_t>& dash_offset,
const absl::optional<uint32_t>& dashes,
const absl::optional<ArcMode>& arc_mode) {
return XProto::CreateGC(CreateGCRequest{cid,
drawable,
function,
plane_mask,
foreground,
background,
line_width,
line_style,
cap_style,
join_style,
fill_style,
fill_rule,
tile,
stipple,
tile_stipple_x_origin,
tile_stipple_y_origin,
font,
subwindow_mode,
graphics_exposures,
clip_x_origin,
clip_y_origin,
clip_mask,
dash_offset,
dashes,
arc_mode});
}
Future<void> XProto::ChangeGC(const ChangeGCRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& gc = request.gc;
GraphicsContextAttribute value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 56;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// gc
buf.Write(&gc);
// value_mask
SwitchVar(GraphicsContextAttribute::Function, value_list.function.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::PlaneMask,
value_list.plane_mask.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Foreground,
value_list.foreground.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Background,
value_list.background.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::LineWidth,
value_list.line_width.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::LineStyle,
value_list.line_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::CapStyle,
value_list.cap_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::JoinStyle,
value_list.join_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::FillStyle,
value_list.fill_style.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::FillRule,
value_list.fill_rule.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Tile, value_list.tile.has_value(), true,
&value_mask);
SwitchVar(GraphicsContextAttribute::Stipple, value_list.stipple.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::TileStippleOriginX,
value_list.tile_stipple_x_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::TileStippleOriginY,
value_list.tile_stipple_y_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::Font, value_list.font.has_value(), true,
&value_mask);
SwitchVar(GraphicsContextAttribute::SubwindowMode,
value_list.subwindow_mode.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::GraphicsExposures,
value_list.graphics_exposures.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipOriginX,
value_list.clip_x_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipOriginY,
value_list.clip_y_origin.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::ClipMask,
value_list.clip_mask.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::DashOffset,
value_list.dash_offset.has_value(), true, &value_mask);
SwitchVar(GraphicsContextAttribute::DashList, value_list.dashes.has_value(),
true, &value_mask);
SwitchVar(GraphicsContextAttribute::ArcMode, value_list.arc_mode.has_value(),
true, &value_mask);
uint32_t tmp88;
tmp88 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp88);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Function)) {
auto& function = *value_list.function;
// function
uint32_t tmp89;
tmp89 = static_cast<uint32_t>(function);
buf.Write(&tmp89);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::PlaneMask)) {
auto& plane_mask = *value_list.plane_mask;
// plane_mask
buf.Write(&plane_mask);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Foreground)) {
auto& foreground = *value_list.foreground;
// foreground
buf.Write(&foreground);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Background)) {
auto& background = *value_list.background;
// background
buf.Write(&background);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::LineWidth)) {
auto& line_width = *value_list.line_width;
// line_width
buf.Write(&line_width);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::LineStyle)) {
auto& line_style = *value_list.line_style;
// line_style
uint32_t tmp90;
tmp90 = static_cast<uint32_t>(line_style);
buf.Write(&tmp90);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::CapStyle)) {
auto& cap_style = *value_list.cap_style;
// cap_style
uint32_t tmp91;
tmp91 = static_cast<uint32_t>(cap_style);
buf.Write(&tmp91);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::JoinStyle)) {
auto& join_style = *value_list.join_style;
// join_style
uint32_t tmp92;
tmp92 = static_cast<uint32_t>(join_style);
buf.Write(&tmp92);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::FillStyle)) {
auto& fill_style = *value_list.fill_style;
// fill_style
uint32_t tmp93;
tmp93 = static_cast<uint32_t>(fill_style);
buf.Write(&tmp93);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::FillRule)) {
auto& fill_rule = *value_list.fill_rule;
// fill_rule
uint32_t tmp94;
tmp94 = static_cast<uint32_t>(fill_rule);
buf.Write(&tmp94);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Tile)) {
auto& tile = *value_list.tile;
// tile
buf.Write(&tile);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Stipple)) {
auto& stipple = *value_list.stipple;
// stipple
buf.Write(&stipple);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::TileStippleOriginX)) {
auto& tile_stipple_x_origin = *value_list.tile_stipple_x_origin;
// tile_stipple_x_origin
buf.Write(&tile_stipple_x_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::TileStippleOriginY)) {
auto& tile_stipple_y_origin = *value_list.tile_stipple_y_origin;
// tile_stipple_y_origin
buf.Write(&tile_stipple_y_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::Font)) {
auto& font = *value_list.font;
// font
buf.Write(&font);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::SubwindowMode)) {
auto& subwindow_mode = *value_list.subwindow_mode;
// subwindow_mode
uint32_t tmp95;
tmp95 = static_cast<uint32_t>(subwindow_mode);
buf.Write(&tmp95);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::GraphicsExposures)) {
auto& graphics_exposures = *value_list.graphics_exposures;
// graphics_exposures
buf.Write(&graphics_exposures);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipOriginX)) {
auto& clip_x_origin = *value_list.clip_x_origin;
// clip_x_origin
buf.Write(&clip_x_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipOriginY)) {
auto& clip_y_origin = *value_list.clip_y_origin;
// clip_y_origin
buf.Write(&clip_y_origin);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ClipMask)) {
auto& clip_mask = *value_list.clip_mask;
// clip_mask
buf.Write(&clip_mask);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::DashOffset)) {
auto& dash_offset = *value_list.dash_offset;
// dash_offset
buf.Write(&dash_offset);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::DashList)) {
auto& dashes = *value_list.dashes;
// dashes
buf.Write(&dashes);
}
if (CaseAnd(value_list_expr, GraphicsContextAttribute::ArcMode)) {
auto& arc_mode = *value_list.arc_mode;
// arc_mode
uint32_t tmp96;
tmp96 = static_cast<uint32_t>(arc_mode);
buf.Write(&tmp96);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeGC", false);
}
Future<void> XProto::ChangeGC(
const GraphicsContext& gc,
const absl::optional<Gx>& function,
const absl::optional<uint32_t>& plane_mask,
const absl::optional<uint32_t>& foreground,
const absl::optional<uint32_t>& background,
const absl::optional<uint32_t>& line_width,
const absl::optional<LineStyle>& line_style,
const absl::optional<CapStyle>& cap_style,
const absl::optional<JoinStyle>& join_style,
const absl::optional<FillStyle>& fill_style,
const absl::optional<FillRule>& fill_rule,
const absl::optional<Pixmap>& tile,
const absl::optional<Pixmap>& stipple,
const absl::optional<int32_t>& tile_stipple_x_origin,
const absl::optional<int32_t>& tile_stipple_y_origin,
const absl::optional<Font>& font,
const absl::optional<SubwindowMode>& subwindow_mode,
const absl::optional<Bool32>& graphics_exposures,
const absl::optional<int32_t>& clip_x_origin,
const absl::optional<int32_t>& clip_y_origin,
const absl::optional<Pixmap>& clip_mask,
const absl::optional<uint32_t>& dash_offset,
const absl::optional<uint32_t>& dashes,
const absl::optional<ArcMode>& arc_mode) {
return XProto::ChangeGC(ChangeGCRequest{gc,
function,
plane_mask,
foreground,
background,
line_width,
line_style,
cap_style,
join_style,
fill_style,
fill_rule,
tile,
stipple,
tile_stipple_x_origin,
tile_stipple_y_origin,
font,
subwindow_mode,
graphics_exposures,
clip_x_origin,
clip_y_origin,
clip_mask,
dash_offset,
dashes,
arc_mode});
}
Future<void> XProto::CopyGC(const CopyGCRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& src_gc = request.src_gc;
auto& dst_gc = request.dst_gc;
auto& value_mask = request.value_mask;
// major_opcode
uint8_t major_opcode = 57;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// src_gc
buf.Write(&src_gc);
// dst_gc
buf.Write(&dst_gc);
// value_mask
uint32_t tmp97;
tmp97 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp97);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CopyGC", false);
}
Future<void> XProto::CopyGC(const GraphicsContext& src_gc,
const GraphicsContext& dst_gc,
const GraphicsContextAttribute& value_mask) {
return XProto::CopyGC(CopyGCRequest{src_gc, dst_gc, value_mask});
}
Future<void> XProto::SetDashes(const SetDashesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& gc = request.gc;
auto& dash_offset = request.dash_offset;
uint16_t dashes_len{};
auto& dashes = request.dashes;
// major_opcode
uint8_t major_opcode = 58;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// gc
buf.Write(&gc);
// dash_offset
buf.Write(&dash_offset);
// dashes_len
dashes_len = dashes.size();
buf.Write(&dashes_len);
// dashes
DCHECK_EQ(static_cast<size_t>(dashes_len), dashes.size());
for (auto& dashes_elem : dashes) {
// dashes_elem
buf.Write(&dashes_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetDashes", false);
}
Future<void> XProto::SetDashes(const GraphicsContext& gc,
const uint16_t& dash_offset,
const std::vector<uint8_t>& dashes) {
return XProto::SetDashes(SetDashesRequest{gc, dash_offset, dashes});
}
Future<void> XProto::SetClipRectangles(
const SetClipRectanglesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& ordering = request.ordering;
auto& gc = request.gc;
auto& clip_x_origin = request.clip_x_origin;
auto& clip_y_origin = request.clip_y_origin;
auto& rectangles = request.rectangles;
size_t rectangles_len = rectangles.size();
// major_opcode
uint8_t major_opcode = 59;
buf.Write(&major_opcode);
// ordering
uint8_t tmp98;
tmp98 = static_cast<uint8_t>(ordering);
buf.Write(&tmp98);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// gc
buf.Write(&gc);
// clip_x_origin
buf.Write(&clip_x_origin);
// clip_y_origin
buf.Write(&clip_y_origin);
// rectangles
DCHECK_EQ(static_cast<size_t>(rectangles_len), rectangles.size());
for (auto& rectangles_elem : rectangles) {
// rectangles_elem
{
auto& x = rectangles_elem.x;
auto& y = rectangles_elem.y;
auto& width = rectangles_elem.width;
auto& height = rectangles_elem.height;
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetClipRectangles", false);
}
Future<void> XProto::SetClipRectangles(
const ClipOrdering& ordering,
const GraphicsContext& gc,
const int16_t& clip_x_origin,
const int16_t& clip_y_origin,
const std::vector<Rectangle>& rectangles) {
return XProto::SetClipRectangles(SetClipRectanglesRequest{
ordering, gc, clip_x_origin, clip_y_origin, rectangles});
}
Future<void> XProto::FreeGC(const FreeGCRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& gc = request.gc;
// major_opcode
uint8_t major_opcode = 60;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// gc
buf.Write(&gc);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FreeGC", false);
}
Future<void> XProto::FreeGC(const GraphicsContext& gc) {
return XProto::FreeGC(FreeGCRequest{gc});
}
Future<void> XProto::ClearArea(const ClearAreaRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& exposures = request.exposures;
auto& window = request.window;
auto& x = request.x;
auto& y = request.y;
auto& width = request.width;
auto& height = request.height;
// major_opcode
uint8_t major_opcode = 61;
buf.Write(&major_opcode);
// exposures
buf.Write(&exposures);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ClearArea", false);
}
Future<void> XProto::ClearArea(const uint8_t& exposures,
const Window& window,
const int16_t& x,
const int16_t& y,
const uint16_t& width,
const uint16_t& height) {
return XProto::ClearArea(
ClearAreaRequest{exposures, window, x, y, width, height});
}
Future<void> XProto::CopyArea(const CopyAreaRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& src_drawable = request.src_drawable;
auto& dst_drawable = request.dst_drawable;
auto& gc = request.gc;
auto& src_x = request.src_x;
auto& src_y = request.src_y;
auto& dst_x = request.dst_x;
auto& dst_y = request.dst_y;
auto& width = request.width;
auto& height = request.height;
// major_opcode
uint8_t major_opcode = 62;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// src_drawable
buf.Write(&src_drawable);
// dst_drawable
buf.Write(&dst_drawable);
// gc
buf.Write(&gc);
// src_x
buf.Write(&src_x);
// src_y
buf.Write(&src_y);
// dst_x
buf.Write(&dst_x);
// dst_y
buf.Write(&dst_y);
// width
buf.Write(&width);
// height
buf.Write(&height);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CopyArea", false);
}
Future<void> XProto::CopyArea(const Drawable& src_drawable,
const Drawable& dst_drawable,
const GraphicsContext& gc,
const int16_t& src_x,
const int16_t& src_y,
const int16_t& dst_x,
const int16_t& dst_y,
const uint16_t& width,
const uint16_t& height) {
return XProto::CopyArea(CopyAreaRequest{src_drawable, dst_drawable, gc, src_x,
src_y, dst_x, dst_y, width, height});
}
Future<void> XProto::CopyPlane(const CopyPlaneRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& src_drawable = request.src_drawable;
auto& dst_drawable = request.dst_drawable;
auto& gc = request.gc;
auto& src_x = request.src_x;
auto& src_y = request.src_y;
auto& dst_x = request.dst_x;
auto& dst_y = request.dst_y;
auto& width = request.width;
auto& height = request.height;
auto& bit_plane = request.bit_plane;
// major_opcode
uint8_t major_opcode = 63;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// src_drawable
buf.Write(&src_drawable);
// dst_drawable
buf.Write(&dst_drawable);
// gc
buf.Write(&gc);
// src_x
buf.Write(&src_x);
// src_y
buf.Write(&src_y);
// dst_x
buf.Write(&dst_x);
// dst_y
buf.Write(&dst_y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// bit_plane
buf.Write(&bit_plane);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CopyPlane", false);
}
Future<void> XProto::CopyPlane(const Drawable& src_drawable,
const Drawable& dst_drawable,
const GraphicsContext& gc,
const int16_t& src_x,
const int16_t& src_y,
const int16_t& dst_x,
const int16_t& dst_y,
const uint16_t& width,
const uint16_t& height,
const uint32_t& bit_plane) {
return XProto::CopyPlane(CopyPlaneRequest{src_drawable, dst_drawable, gc,
src_x, src_y, dst_x, dst_y, width,
height, bit_plane});
}
Future<void> XProto::PolyPoint(const PolyPointRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& coordinate_mode = request.coordinate_mode;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& points = request.points;
size_t points_len = points.size();
// major_opcode
uint8_t major_opcode = 64;
buf.Write(&major_opcode);
// coordinate_mode
uint8_t tmp99;
tmp99 = static_cast<uint8_t>(coordinate_mode);
buf.Write(&tmp99);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// points
DCHECK_EQ(static_cast<size_t>(points_len), points.size());
for (auto& points_elem : points) {
// points_elem
{
auto& x = points_elem.x;
auto& y = points_elem.y;
// x
buf.Write(&x);
// y
buf.Write(&y);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyPoint", false);
}
Future<void> XProto::PolyPoint(const CoordMode& coordinate_mode,
const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Point>& points) {
return XProto::PolyPoint(
PolyPointRequest{coordinate_mode, drawable, gc, points});
}
Future<void> XProto::PolyLine(const PolyLineRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& coordinate_mode = request.coordinate_mode;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& points = request.points;
size_t points_len = points.size();
// major_opcode
uint8_t major_opcode = 65;
buf.Write(&major_opcode);
// coordinate_mode
uint8_t tmp100;
tmp100 = static_cast<uint8_t>(coordinate_mode);
buf.Write(&tmp100);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// points
DCHECK_EQ(static_cast<size_t>(points_len), points.size());
for (auto& points_elem : points) {
// points_elem
{
auto& x = points_elem.x;
auto& y = points_elem.y;
// x
buf.Write(&x);
// y
buf.Write(&y);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyLine", false);
}
Future<void> XProto::PolyLine(const CoordMode& coordinate_mode,
const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Point>& points) {
return XProto::PolyLine(
PolyLineRequest{coordinate_mode, drawable, gc, points});
}
Future<void> XProto::PolySegment(const PolySegmentRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& segments = request.segments;
size_t segments_len = segments.size();
// major_opcode
uint8_t major_opcode = 66;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// segments
DCHECK_EQ(static_cast<size_t>(segments_len), segments.size());
for (auto& segments_elem : segments) {
// segments_elem
{
auto& x1 = segments_elem.x1;
auto& y1 = segments_elem.y1;
auto& x2 = segments_elem.x2;
auto& y2 = segments_elem.y2;
// x1
buf.Write(&x1);
// y1
buf.Write(&y1);
// x2
buf.Write(&x2);
// y2
buf.Write(&y2);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolySegment", false);
}
Future<void> XProto::PolySegment(const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Segment>& segments) {
return XProto::PolySegment(PolySegmentRequest{drawable, gc, segments});
}
Future<void> XProto::PolyRectangle(const PolyRectangleRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& rectangles = request.rectangles;
size_t rectangles_len = rectangles.size();
// major_opcode
uint8_t major_opcode = 67;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// rectangles
DCHECK_EQ(static_cast<size_t>(rectangles_len), rectangles.size());
for (auto& rectangles_elem : rectangles) {
// rectangles_elem
{
auto& x = rectangles_elem.x;
auto& y = rectangles_elem.y;
auto& width = rectangles_elem.width;
auto& height = rectangles_elem.height;
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyRectangle", false);
}
Future<void> XProto::PolyRectangle(const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Rectangle>& rectangles) {
return XProto::PolyRectangle(PolyRectangleRequest{drawable, gc, rectangles});
}
Future<void> XProto::PolyArc(const PolyArcRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& arcs = request.arcs;
size_t arcs_len = arcs.size();
// major_opcode
uint8_t major_opcode = 68;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// arcs
DCHECK_EQ(static_cast<size_t>(arcs_len), arcs.size());
for (auto& arcs_elem : arcs) {
// arcs_elem
{
auto& x = arcs_elem.x;
auto& y = arcs_elem.y;
auto& width = arcs_elem.width;
auto& height = arcs_elem.height;
auto& angle1 = arcs_elem.angle1;
auto& angle2 = arcs_elem.angle2;
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// angle1
buf.Write(&angle1);
// angle2
buf.Write(&angle2);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyArc", false);
}
Future<void> XProto::PolyArc(const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Arc>& arcs) {
return XProto::PolyArc(PolyArcRequest{drawable, gc, arcs});
}
Future<void> XProto::FillPoly(const FillPolyRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& shape = request.shape;
auto& coordinate_mode = request.coordinate_mode;
auto& points = request.points;
size_t points_len = points.size();
// major_opcode
uint8_t major_opcode = 69;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// shape
uint8_t tmp101;
tmp101 = static_cast<uint8_t>(shape);
buf.Write(&tmp101);
// coordinate_mode
uint8_t tmp102;
tmp102 = static_cast<uint8_t>(coordinate_mode);
buf.Write(&tmp102);
// pad1
Pad(&buf, 2);
// points
DCHECK_EQ(static_cast<size_t>(points_len), points.size());
for (auto& points_elem : points) {
// points_elem
{
auto& x = points_elem.x;
auto& y = points_elem.y;
// x
buf.Write(&x);
// y
buf.Write(&y);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FillPoly", false);
}
Future<void> XProto::FillPoly(const Drawable& drawable,
const GraphicsContext& gc,
const PolyShape& shape,
const CoordMode& coordinate_mode,
const std::vector<Point>& points) {
return XProto::FillPoly(
FillPolyRequest{drawable, gc, shape, coordinate_mode, points});
}
Future<void> XProto::PolyFillRectangle(
const PolyFillRectangleRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& rectangles = request.rectangles;
size_t rectangles_len = rectangles.size();
// major_opcode
uint8_t major_opcode = 70;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// rectangles
DCHECK_EQ(static_cast<size_t>(rectangles_len), rectangles.size());
for (auto& rectangles_elem : rectangles) {
// rectangles_elem
{
auto& x = rectangles_elem.x;
auto& y = rectangles_elem.y;
auto& width = rectangles_elem.width;
auto& height = rectangles_elem.height;
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyFillRectangle", false);
}
Future<void> XProto::PolyFillRectangle(
const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Rectangle>& rectangles) {
return XProto::PolyFillRectangle(
PolyFillRectangleRequest{drawable, gc, rectangles});
}
Future<void> XProto::PolyFillArc(const PolyFillArcRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& arcs = request.arcs;
size_t arcs_len = arcs.size();
// major_opcode
uint8_t major_opcode = 71;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// arcs
DCHECK_EQ(static_cast<size_t>(arcs_len), arcs.size());
for (auto& arcs_elem : arcs) {
// arcs_elem
{
auto& x = arcs_elem.x;
auto& y = arcs_elem.y;
auto& width = arcs_elem.width;
auto& height = arcs_elem.height;
auto& angle1 = arcs_elem.angle1;
auto& angle2 = arcs_elem.angle2;
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// angle1
buf.Write(&angle1);
// angle2
buf.Write(&angle2);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyFillArc", false);
}
Future<void> XProto::PolyFillArc(const Drawable& drawable,
const GraphicsContext& gc,
const std::vector<Arc>& arcs) {
return XProto::PolyFillArc(PolyFillArcRequest{drawable, gc, arcs});
}
Future<void> XProto::PutImage(const PutImageRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& format = request.format;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& width = request.width;
auto& height = request.height;
auto& dst_x = request.dst_x;
auto& dst_y = request.dst_y;
auto& left_pad = request.left_pad;
auto& depth = request.depth;
auto& data = request.data;
size_t data_len = data ? data->size() : 0;
// major_opcode
uint8_t major_opcode = 72;
buf.Write(&major_opcode);
// format
uint8_t tmp103;
tmp103 = static_cast<uint8_t>(format);
buf.Write(&tmp103);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// width
buf.Write(&width);
// height
buf.Write(&height);
// dst_x
buf.Write(&dst_x);
// dst_y
buf.Write(&dst_y);
// left_pad
buf.Write(&left_pad);
// depth
buf.Write(&depth);
// pad0
Pad(&buf, 2);
// data
buf.AppendBuffer(data, data_len);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PutImage", false);
}
Future<void> XProto::PutImage(
const ImageFormat& format,
const Drawable& drawable,
const GraphicsContext& gc,
const uint16_t& width,
const uint16_t& height,
const int16_t& dst_x,
const int16_t& dst_y,
const uint8_t& left_pad,
const uint8_t& depth,
const scoped_refptr<base::RefCountedMemory>& data) {
return XProto::PutImage(PutImageRequest{format, drawable, gc, width, height,
dst_x, dst_y, left_pad, depth, data});
}
Future<GetImageReply> XProto::GetImage(const GetImageRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& format = request.format;
auto& drawable = request.drawable;
auto& x = request.x;
auto& y = request.y;
auto& width = request.width;
auto& height = request.height;
auto& plane_mask = request.plane_mask;
// major_opcode
uint8_t major_opcode = 73;
buf.Write(&major_opcode);
// format
uint8_t tmp104;
tmp104 = static_cast<uint8_t>(format);
buf.Write(&tmp104);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// x
buf.Write(&x);
// y
buf.Write(&y);
// width
buf.Write(&width);
// height
buf.Write(&height);
// plane_mask
buf.Write(&plane_mask);
Align(&buf, 4);
return connection_->SendRequest<GetImageReply>(&buf, "GetImage", false);
}
Future<GetImageReply> XProto::GetImage(const ImageFormat& format,
const Drawable& drawable,
const int16_t& x,
const int16_t& y,
const uint16_t& width,
const uint16_t& height,
const uint32_t& plane_mask) {
return XProto::GetImage(
GetImageRequest{format, drawable, x, y, width, height, plane_mask});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetImageReply> detail::ReadReply<GetImageReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetImageReply>();
auto& depth = (*reply).depth;
auto& sequence = (*reply).sequence;
auto& visual = (*reply).visual;
auto& data = (*reply).data;
size_t data_len = data ? data->size() : 0;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// depth
Read(&depth, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// visual
Read(&visual, &buf);
// pad0
Pad(&buf, 20);
// data
data = buffer->ReadAndAdvance((length) * (4));
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::PolyText8(const PolyText8Request& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& x = request.x;
auto& y = request.y;
auto& items = request.items;
size_t items_len = items.size();
// major_opcode
uint8_t major_opcode = 74;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// x
buf.Write(&x);
// y
buf.Write(&y);
// items
DCHECK_EQ(static_cast<size_t>(items_len), items.size());
for (auto& items_elem : items) {
// items_elem
buf.Write(&items_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyText8", false);
}
Future<void> XProto::PolyText8(const Drawable& drawable,
const GraphicsContext& gc,
const int16_t& x,
const int16_t& y,
const std::vector<uint8_t>& items) {
return XProto::PolyText8(PolyText8Request{drawable, gc, x, y, items});
}
Future<void> XProto::PolyText16(const PolyText16Request& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& x = request.x;
auto& y = request.y;
auto& items = request.items;
size_t items_len = items.size();
// major_opcode
uint8_t major_opcode = 75;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// x
buf.Write(&x);
// y
buf.Write(&y);
// items
DCHECK_EQ(static_cast<size_t>(items_len), items.size());
for (auto& items_elem : items) {
// items_elem
buf.Write(&items_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "PolyText16", false);
}
Future<void> XProto::PolyText16(const Drawable& drawable,
const GraphicsContext& gc,
const int16_t& x,
const int16_t& y,
const std::vector<uint8_t>& items) {
return XProto::PolyText16(PolyText16Request{drawable, gc, x, y, items});
}
Future<void> XProto::ImageText8(const ImageText8Request& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
uint8_t string_len{};
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& x = request.x;
auto& y = request.y;
auto& string = request.string;
// major_opcode
uint8_t major_opcode = 76;
buf.Write(&major_opcode);
// string_len
string_len = string.size();
buf.Write(&string_len);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// x
buf.Write(&x);
// y
buf.Write(&y);
// string
DCHECK_EQ(static_cast<size_t>(string_len), string.size());
for (auto& string_elem : string) {
// string_elem
buf.Write(&string_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ImageText8", false);
}
Future<void> XProto::ImageText8(const Drawable& drawable,
const GraphicsContext& gc,
const int16_t& x,
const int16_t& y,
const std::string& string) {
return XProto::ImageText8(ImageText8Request{drawable, gc, x, y, string});
}
Future<void> XProto::ImageText16(const ImageText16Request& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
uint8_t string_len{};
auto& drawable = request.drawable;
auto& gc = request.gc;
auto& x = request.x;
auto& y = request.y;
auto& string = request.string;
// major_opcode
uint8_t major_opcode = 77;
buf.Write(&major_opcode);
// string_len
string_len = string.size();
buf.Write(&string_len);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// gc
buf.Write(&gc);
// x
buf.Write(&x);
// y
buf.Write(&y);
// string
DCHECK_EQ(static_cast<size_t>(string_len), string.size());
for (auto& string_elem : string) {
// string_elem
{
auto& byte1 = string_elem.byte1;
auto& byte2 = string_elem.byte2;
// byte1
buf.Write(&byte1);
// byte2
buf.Write(&byte2);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ImageText16", false);
}
Future<void> XProto::ImageText16(const Drawable& drawable,
const GraphicsContext& gc,
const int16_t& x,
const int16_t& y,
const std::vector<Char16>& string) {
return XProto::ImageText16(ImageText16Request{drawable, gc, x, y, string});
}
Future<void> XProto::CreateColormap(const CreateColormapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& alloc = request.alloc;
auto& mid = request.mid;
auto& window = request.window;
auto& visual = request.visual;
// major_opcode
uint8_t major_opcode = 78;
buf.Write(&major_opcode);
// alloc
uint8_t tmp105;
tmp105 = static_cast<uint8_t>(alloc);
buf.Write(&tmp105);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// mid
buf.Write(&mid);
// window
buf.Write(&window);
// visual
buf.Write(&visual);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreateColormap", false);
}
Future<void> XProto::CreateColormap(const ColormapAlloc& alloc,
const ColorMap& mid,
const Window& window,
const VisualId& visual) {
return XProto::CreateColormap(
CreateColormapRequest{alloc, mid, window, visual});
}
Future<void> XProto::FreeColormap(const FreeColormapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
// major_opcode
uint8_t major_opcode = 79;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FreeColormap", false);
}
Future<void> XProto::FreeColormap(const ColorMap& cmap) {
return XProto::FreeColormap(FreeColormapRequest{cmap});
}
Future<void> XProto::CopyColormapAndFree(
const CopyColormapAndFreeRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mid = request.mid;
auto& src_cmap = request.src_cmap;
// major_opcode
uint8_t major_opcode = 80;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// mid
buf.Write(&mid);
// src_cmap
buf.Write(&src_cmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CopyColormapAndFree", false);
}
Future<void> XProto::CopyColormapAndFree(const ColorMap& mid,
const ColorMap& src_cmap) {
return XProto::CopyColormapAndFree(CopyColormapAndFreeRequest{mid, src_cmap});
}
Future<void> XProto::InstallColormap(const InstallColormapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
// major_opcode
uint8_t major_opcode = 81;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "InstallColormap", false);
}
Future<void> XProto::InstallColormap(const ColorMap& cmap) {
return XProto::InstallColormap(InstallColormapRequest{cmap});
}
Future<void> XProto::UninstallColormap(
const UninstallColormapRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
// major_opcode
uint8_t major_opcode = 82;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "UninstallColormap", false);
}
Future<void> XProto::UninstallColormap(const ColorMap& cmap) {
return XProto::UninstallColormap(UninstallColormapRequest{cmap});
}
Future<ListInstalledColormapsReply> XProto::ListInstalledColormaps(
const ListInstalledColormapsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = 83;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<ListInstalledColormapsReply>(
&buf, "ListInstalledColormaps", false);
}
Future<ListInstalledColormapsReply> XProto::ListInstalledColormaps(
const Window& window) {
return XProto::ListInstalledColormaps(ListInstalledColormapsRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListInstalledColormapsReply> detail::ReadReply<
ListInstalledColormapsReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListInstalledColormapsReply>();
auto& sequence = (*reply).sequence;
uint16_t cmaps_len{};
auto& cmaps = (*reply).cmaps;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// cmaps_len
Read(&cmaps_len, &buf);
// pad1
Pad(&buf, 22);
// cmaps
cmaps.resize(cmaps_len);
for (auto& cmaps_elem : cmaps) {
// cmaps_elem
Read(&cmaps_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<AllocColorReply> XProto::AllocColor(const AllocColorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
auto& red = request.red;
auto& green = request.green;
auto& blue = request.blue;
// major_opcode
uint8_t major_opcode = 84;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// red
buf.Write(&red);
// green
buf.Write(&green);
// blue
buf.Write(&blue);
// pad1
Pad(&buf, 2);
Align(&buf, 4);
return connection_->SendRequest<AllocColorReply>(&buf, "AllocColor", false);
}
Future<AllocColorReply> XProto::AllocColor(const ColorMap& cmap,
const uint16_t& red,
const uint16_t& green,
const uint16_t& blue) {
return XProto::AllocColor(AllocColorRequest{cmap, red, green, blue});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<AllocColorReply> detail::ReadReply<AllocColorReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<AllocColorReply>();
auto& sequence = (*reply).sequence;
auto& red = (*reply).red;
auto& green = (*reply).green;
auto& blue = (*reply).blue;
auto& pixel = (*reply).pixel;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// red
Read(&red, &buf);
// green
Read(&green, &buf);
// blue
Read(&blue, &buf);
// pad1
Pad(&buf, 2);
// pixel
Read(&pixel, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<AllocNamedColorReply> XProto::AllocNamedColor(
const AllocNamedColorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 85;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad1
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<AllocNamedColorReply>(&buf, "AllocNamedColor",
false);
}
Future<AllocNamedColorReply> XProto::AllocNamedColor(const ColorMap& cmap,
const std::string& name) {
return XProto::AllocNamedColor(AllocNamedColorRequest{cmap, name});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<AllocNamedColorReply> detail::ReadReply<AllocNamedColorReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<AllocNamedColorReply>();
auto& sequence = (*reply).sequence;
auto& pixel = (*reply).pixel;
auto& exact_red = (*reply).exact_red;
auto& exact_green = (*reply).exact_green;
auto& exact_blue = (*reply).exact_blue;
auto& visual_red = (*reply).visual_red;
auto& visual_green = (*reply).visual_green;
auto& visual_blue = (*reply).visual_blue;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pixel
Read(&pixel, &buf);
// exact_red
Read(&exact_red, &buf);
// exact_green
Read(&exact_green, &buf);
// exact_blue
Read(&exact_blue, &buf);
// visual_red
Read(&visual_red, &buf);
// visual_green
Read(&visual_green, &buf);
// visual_blue
Read(&visual_blue, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<AllocColorCellsReply> XProto::AllocColorCells(
const AllocColorCellsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& contiguous = request.contiguous;
auto& cmap = request.cmap;
auto& colors = request.colors;
auto& planes = request.planes;
// major_opcode
uint8_t major_opcode = 86;
buf.Write(&major_opcode);
// contiguous
buf.Write(&contiguous);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// colors
buf.Write(&colors);
// planes
buf.Write(&planes);
Align(&buf, 4);
return connection_->SendRequest<AllocColorCellsReply>(&buf, "AllocColorCells",
false);
}
Future<AllocColorCellsReply> XProto::AllocColorCells(const uint8_t& contiguous,
const ColorMap& cmap,
const uint16_t& colors,
const uint16_t& planes) {
return XProto::AllocColorCells(
AllocColorCellsRequest{contiguous, cmap, colors, planes});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<AllocColorCellsReply> detail::ReadReply<AllocColorCellsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<AllocColorCellsReply>();
auto& sequence = (*reply).sequence;
uint16_t pixels_len{};
uint16_t masks_len{};
auto& pixels = (*reply).pixels;
auto& masks = (*reply).masks;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pixels_len
Read(&pixels_len, &buf);
// masks_len
Read(&masks_len, &buf);
// pad1
Pad(&buf, 20);
// pixels
pixels.resize(pixels_len);
for (auto& pixels_elem : pixels) {
// pixels_elem
Read(&pixels_elem, &buf);
}
// masks
masks.resize(masks_len);
for (auto& masks_elem : masks) {
// masks_elem
Read(&masks_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<AllocColorPlanesReply> XProto::AllocColorPlanes(
const AllocColorPlanesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& contiguous = request.contiguous;
auto& cmap = request.cmap;
auto& colors = request.colors;
auto& reds = request.reds;
auto& greens = request.greens;
auto& blues = request.blues;
// major_opcode
uint8_t major_opcode = 87;
buf.Write(&major_opcode);
// contiguous
buf.Write(&contiguous);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// colors
buf.Write(&colors);
// reds
buf.Write(&reds);
// greens
buf.Write(&greens);
// blues
buf.Write(&blues);
Align(&buf, 4);
return connection_->SendRequest<AllocColorPlanesReply>(
&buf, "AllocColorPlanes", false);
}
Future<AllocColorPlanesReply> XProto::AllocColorPlanes(
const uint8_t& contiguous,
const ColorMap& cmap,
const uint16_t& colors,
const uint16_t& reds,
const uint16_t& greens,
const uint16_t& blues) {
return XProto::AllocColorPlanes(
AllocColorPlanesRequest{contiguous, cmap, colors, reds, greens, blues});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<AllocColorPlanesReply> detail::ReadReply<AllocColorPlanesReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<AllocColorPlanesReply>();
auto& sequence = (*reply).sequence;
uint16_t pixels_len{};
auto& red_mask = (*reply).red_mask;
auto& green_mask = (*reply).green_mask;
auto& blue_mask = (*reply).blue_mask;
auto& pixels = (*reply).pixels;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pixels_len
Read(&pixels_len, &buf);
// pad1
Pad(&buf, 2);
// red_mask
Read(&red_mask, &buf);
// green_mask
Read(&green_mask, &buf);
// blue_mask
Read(&blue_mask, &buf);
// pad2
Pad(&buf, 8);
// pixels
pixels.resize(pixels_len);
for (auto& pixels_elem : pixels) {
// pixels_elem
Read(&pixels_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::FreeColors(const FreeColorsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
auto& plane_mask = request.plane_mask;
auto& pixels = request.pixels;
size_t pixels_len = pixels.size();
// major_opcode
uint8_t major_opcode = 88;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// plane_mask
buf.Write(&plane_mask);
// pixels
DCHECK_EQ(static_cast<size_t>(pixels_len), pixels.size());
for (auto& pixels_elem : pixels) {
// pixels_elem
buf.Write(&pixels_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FreeColors", false);
}
Future<void> XProto::FreeColors(const ColorMap& cmap,
const uint32_t& plane_mask,
const std::vector<uint32_t>& pixels) {
return XProto::FreeColors(FreeColorsRequest{cmap, plane_mask, pixels});
}
Future<void> XProto::StoreColors(const StoreColorsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
auto& items = request.items;
size_t items_len = items.size();
// major_opcode
uint8_t major_opcode = 89;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// items
DCHECK_EQ(static_cast<size_t>(items_len), items.size());
for (auto& items_elem : items) {
// items_elem
{
auto& pixel = items_elem.pixel;
auto& red = items_elem.red;
auto& green = items_elem.green;
auto& blue = items_elem.blue;
auto& flags = items_elem.flags;
// pixel
buf.Write(&pixel);
// red
buf.Write(&red);
// green
buf.Write(&green);
// blue
buf.Write(&blue);
// flags
uint8_t tmp106;
tmp106 = static_cast<uint8_t>(flags);
buf.Write(&tmp106);
// pad0
Pad(&buf, 1);
}
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "StoreColors", false);
}
Future<void> XProto::StoreColors(const ColorMap& cmap,
const std::vector<ColorItem>& items) {
return XProto::StoreColors(StoreColorsRequest{cmap, items});
}
Future<void> XProto::StoreNamedColor(const StoreNamedColorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& flags = request.flags;
auto& cmap = request.cmap;
auto& pixel = request.pixel;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 90;
buf.Write(&major_opcode);
// flags
uint8_t tmp107;
tmp107 = static_cast<uint8_t>(flags);
buf.Write(&tmp107);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// pixel
buf.Write(&pixel);
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad0
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "StoreNamedColor", false);
}
Future<void> XProto::StoreNamedColor(const ColorFlag& flags,
const ColorMap& cmap,
const uint32_t& pixel,
const std::string& name) {
return XProto::StoreNamedColor(
StoreNamedColorRequest{flags, cmap, pixel, name});
}
Future<QueryColorsReply> XProto::QueryColors(
const QueryColorsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
auto& pixels = request.pixels;
size_t pixels_len = pixels.size();
// major_opcode
uint8_t major_opcode = 91;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// pixels
DCHECK_EQ(static_cast<size_t>(pixels_len), pixels.size());
for (auto& pixels_elem : pixels) {
// pixels_elem
buf.Write(&pixels_elem);
}
Align(&buf, 4);
return connection_->SendRequest<QueryColorsReply>(&buf, "QueryColors", false);
}
Future<QueryColorsReply> XProto::QueryColors(
const ColorMap& cmap,
const std::vector<uint32_t>& pixels) {
return XProto::QueryColors(QueryColorsRequest{cmap, pixels});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryColorsReply> detail::ReadReply<QueryColorsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryColorsReply>();
auto& sequence = (*reply).sequence;
uint16_t colors_len{};
auto& colors = (*reply).colors;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// colors_len
Read(&colors_len, &buf);
// pad1
Pad(&buf, 22);
// colors
colors.resize(colors_len);
for (auto& colors_elem : colors) {
// colors_elem
{
auto& red = colors_elem.red;
auto& green = colors_elem.green;
auto& blue = colors_elem.blue;
// red
Read(&red, &buf);
// green
Read(&green, &buf);
// blue
Read(&blue, &buf);
// pad0
Pad(&buf, 2);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<LookupColorReply> XProto::LookupColor(
const LookupColorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cmap = request.cmap;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 92;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cmap
buf.Write(&cmap);
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad1
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<LookupColorReply>(&buf, "LookupColor", false);
}
Future<LookupColorReply> XProto::LookupColor(const ColorMap& cmap,
const std::string& name) {
return XProto::LookupColor(LookupColorRequest{cmap, name});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<LookupColorReply> detail::ReadReply<LookupColorReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<LookupColorReply>();
auto& sequence = (*reply).sequence;
auto& exact_red = (*reply).exact_red;
auto& exact_green = (*reply).exact_green;
auto& exact_blue = (*reply).exact_blue;
auto& visual_red = (*reply).visual_red;
auto& visual_green = (*reply).visual_green;
auto& visual_blue = (*reply).visual_blue;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// exact_red
Read(&exact_red, &buf);
// exact_green
Read(&exact_green, &buf);
// exact_blue
Read(&exact_blue, &buf);
// visual_red
Read(&visual_red, &buf);
// visual_green
Read(&visual_green, &buf);
// visual_blue
Read(&visual_blue, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::CreateCursor(const CreateCursorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cid = request.cid;
auto& source = request.source;
auto& mask = request.mask;
auto& fore_red = request.fore_red;
auto& fore_green = request.fore_green;
auto& fore_blue = request.fore_blue;
auto& back_red = request.back_red;
auto& back_green = request.back_green;
auto& back_blue = request.back_blue;
auto& x = request.x;
auto& y = request.y;
// major_opcode
uint8_t major_opcode = 93;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cid
buf.Write(&cid);
// source
buf.Write(&source);
// mask
buf.Write(&mask);
// fore_red
buf.Write(&fore_red);
// fore_green
buf.Write(&fore_green);
// fore_blue
buf.Write(&fore_blue);
// back_red
buf.Write(&back_red);
// back_green
buf.Write(&back_green);
// back_blue
buf.Write(&back_blue);
// x
buf.Write(&x);
// y
buf.Write(&y);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreateCursor", false);
}
Future<void> XProto::CreateCursor(const Cursor& cid,
const Pixmap& source,
const Pixmap& mask,
const uint16_t& fore_red,
const uint16_t& fore_green,
const uint16_t& fore_blue,
const uint16_t& back_red,
const uint16_t& back_green,
const uint16_t& back_blue,
const uint16_t& x,
const uint16_t& y) {
return XProto::CreateCursor(
CreateCursorRequest{cid, source, mask, fore_red, fore_green, fore_blue,
back_red, back_green, back_blue, x, y});
}
Future<void> XProto::CreateGlyphCursor(
const CreateGlyphCursorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cid = request.cid;
auto& source_font = request.source_font;
auto& mask_font = request.mask_font;
auto& source_char = request.source_char;
auto& mask_char = request.mask_char;
auto& fore_red = request.fore_red;
auto& fore_green = request.fore_green;
auto& fore_blue = request.fore_blue;
auto& back_red = request.back_red;
auto& back_green = request.back_green;
auto& back_blue = request.back_blue;
// major_opcode
uint8_t major_opcode = 94;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cid
buf.Write(&cid);
// source_font
buf.Write(&source_font);
// mask_font
buf.Write(&mask_font);
// source_char
buf.Write(&source_char);
// mask_char
buf.Write(&mask_char);
// fore_red
buf.Write(&fore_red);
// fore_green
buf.Write(&fore_green);
// fore_blue
buf.Write(&fore_blue);
// back_red
buf.Write(&back_red);
// back_green
buf.Write(&back_green);
// back_blue
buf.Write(&back_blue);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "CreateGlyphCursor", false);
}
Future<void> XProto::CreateGlyphCursor(const Cursor& cid,
const Font& source_font,
const Font& mask_font,
const uint16_t& source_char,
const uint16_t& mask_char,
const uint16_t& fore_red,
const uint16_t& fore_green,
const uint16_t& fore_blue,
const uint16_t& back_red,
const uint16_t& back_green,
const uint16_t& back_blue) {
return XProto::CreateGlyphCursor(CreateGlyphCursorRequest{
cid, source_font, mask_font, source_char, mask_char, fore_red, fore_green,
fore_blue, back_red, back_green, back_blue});
}
Future<void> XProto::FreeCursor(const FreeCursorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cursor = request.cursor;
// major_opcode
uint8_t major_opcode = 95;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cursor
buf.Write(&cursor);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "FreeCursor", false);
}
Future<void> XProto::FreeCursor(const Cursor& cursor) {
return XProto::FreeCursor(FreeCursorRequest{cursor});
}
Future<void> XProto::RecolorCursor(const RecolorCursorRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& cursor = request.cursor;
auto& fore_red = request.fore_red;
auto& fore_green = request.fore_green;
auto& fore_blue = request.fore_blue;
auto& back_red = request.back_red;
auto& back_green = request.back_green;
auto& back_blue = request.back_blue;
// major_opcode
uint8_t major_opcode = 96;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// cursor
buf.Write(&cursor);
// fore_red
buf.Write(&fore_red);
// fore_green
buf.Write(&fore_green);
// fore_blue
buf.Write(&fore_blue);
// back_red
buf.Write(&back_red);
// back_green
buf.Write(&back_green);
// back_blue
buf.Write(&back_blue);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "RecolorCursor", false);
}
Future<void> XProto::RecolorCursor(const Cursor& cursor,
const uint16_t& fore_red,
const uint16_t& fore_green,
const uint16_t& fore_blue,
const uint16_t& back_red,
const uint16_t& back_green,
const uint16_t& back_blue) {
return XProto::RecolorCursor(
RecolorCursorRequest{cursor, fore_red, fore_green, fore_blue, back_red,
back_green, back_blue});
}
Future<QueryBestSizeReply> XProto::QueryBestSize(
const QueryBestSizeRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& c_class = request.c_class;
auto& drawable = request.drawable;
auto& width = request.width;
auto& height = request.height;
// major_opcode
uint8_t major_opcode = 97;
buf.Write(&major_opcode);
// c_class
uint8_t tmp108;
tmp108 = static_cast<uint8_t>(c_class);
buf.Write(&tmp108);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// drawable
buf.Write(&drawable);
// width
buf.Write(&width);
// height
buf.Write(&height);
Align(&buf, 4);
return connection_->SendRequest<QueryBestSizeReply>(&buf, "QueryBestSize",
false);
}
Future<QueryBestSizeReply> XProto::QueryBestSize(const QueryShapeOf& c_class,
const Drawable& drawable,
const uint16_t& width,
const uint16_t& height) {
return XProto::QueryBestSize(
QueryBestSizeRequest{c_class, drawable, width, height});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryBestSizeReply> detail::ReadReply<QueryBestSizeReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryBestSizeReply>();
auto& sequence = (*reply).sequence;
auto& width = (*reply).width;
auto& height = (*reply).height;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// width
Read(&width, &buf);
// height
Read(&height, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<QueryExtensionReply> XProto::QueryExtension(
const QueryExtensionRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
uint16_t name_len{};
auto& name = request.name;
// major_opcode
uint8_t major_opcode = 98;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// name_len
name_len = name.size();
buf.Write(&name_len);
// pad1
Pad(&buf, 2);
// name
DCHECK_EQ(static_cast<size_t>(name_len), name.size());
for (auto& name_elem : name) {
// name_elem
buf.Write(&name_elem);
}
Align(&buf, 4);
return connection_->SendRequest<QueryExtensionReply>(&buf, "QueryExtension",
false);
}
Future<QueryExtensionReply> XProto::QueryExtension(const std::string& name) {
return XProto::QueryExtension(QueryExtensionRequest{name});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<QueryExtensionReply> detail::ReadReply<QueryExtensionReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<QueryExtensionReply>();
auto& sequence = (*reply).sequence;
auto& present = (*reply).present;
auto& major_opcode = (*reply).major_opcode;
auto& first_event = (*reply).first_event;
auto& first_error = (*reply).first_error;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// present
Read(&present, &buf);
// major_opcode
Read(&major_opcode, &buf);
// first_event
Read(&first_event, &buf);
// first_error
Read(&first_error, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<ListExtensionsReply> XProto::ListExtensions(
const ListExtensionsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 99;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<ListExtensionsReply>(&buf, "ListExtensions",
false);
}
Future<ListExtensionsReply> XProto::ListExtensions() {
return XProto::ListExtensions(ListExtensionsRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListExtensionsReply> detail::ReadReply<ListExtensionsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListExtensionsReply>();
uint8_t names_len{};
auto& sequence = (*reply).sequence;
auto& names = (*reply).names;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// names_len
Read(&names_len, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pad0
Pad(&buf, 24);
// names
names.resize(names_len);
for (auto& names_elem : names) {
// names_elem
{
uint8_t name_len{};
auto& name = names_elem.name;
// name_len
Read(&name_len, &buf);
// name
name.resize(name_len);
for (auto& name_elem : name) {
// name_elem
Read(&name_elem, &buf);
}
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::ChangeKeyboardMapping(
const ChangeKeyboardMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& keycode_count = request.keycode_count;
auto& first_keycode = request.first_keycode;
auto& keysyms_per_keycode = request.keysyms_per_keycode;
auto& keysyms = request.keysyms;
size_t keysyms_len = keysyms.size();
// major_opcode
uint8_t major_opcode = 100;
buf.Write(&major_opcode);
// keycode_count
buf.Write(&keycode_count);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// first_keycode
buf.Write(&first_keycode);
// keysyms_per_keycode
buf.Write(&keysyms_per_keycode);
// pad0
Pad(&buf, 2);
// keysyms
DCHECK_EQ(static_cast<size_t>((keycode_count) * (keysyms_per_keycode)),
keysyms.size());
for (auto& keysyms_elem : keysyms) {
// keysyms_elem
buf.Write(&keysyms_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeKeyboardMapping", false);
}
Future<void> XProto::ChangeKeyboardMapping(const uint8_t& keycode_count,
const KeyCode& first_keycode,
const uint8_t& keysyms_per_keycode,
const std::vector<KeySym>& keysyms) {
return XProto::ChangeKeyboardMapping(ChangeKeyboardMappingRequest{
keycode_count, first_keycode, keysyms_per_keycode, keysyms});
}
Future<GetKeyboardMappingReply> XProto::GetKeyboardMapping(
const GetKeyboardMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& first_keycode = request.first_keycode;
auto& count = request.count;
// major_opcode
uint8_t major_opcode = 101;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// first_keycode
buf.Write(&first_keycode);
// count
buf.Write(&count);
Align(&buf, 4);
return connection_->SendRequest<GetKeyboardMappingReply>(
&buf, "GetKeyboardMapping", false);
}
Future<GetKeyboardMappingReply> XProto::GetKeyboardMapping(
const KeyCode& first_keycode,
const uint8_t& count) {
return XProto::GetKeyboardMapping(
GetKeyboardMappingRequest{first_keycode, count});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetKeyboardMappingReply> detail::ReadReply<
GetKeyboardMappingReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetKeyboardMappingReply>();
auto& keysyms_per_keycode = (*reply).keysyms_per_keycode;
auto& sequence = (*reply).sequence;
auto& keysyms = (*reply).keysyms;
size_t keysyms_len = keysyms.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// keysyms_per_keycode
Read(&keysyms_per_keycode, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pad0
Pad(&buf, 24);
// keysyms
keysyms.resize(length);
for (auto& keysyms_elem : keysyms) {
// keysyms_elem
Read(&keysyms_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::ChangeKeyboardControl(
const ChangeKeyboardControlRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
Keyboard value_mask{};
auto& value_list = request;
// major_opcode
uint8_t major_opcode = 102;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// value_mask
SwitchVar(Keyboard::KeyClickPercent, value_list.key_click_percent.has_value(),
true, &value_mask);
SwitchVar(Keyboard::BellPercent, value_list.bell_percent.has_value(), true,
&value_mask);
SwitchVar(Keyboard::BellPitch, value_list.bell_pitch.has_value(), true,
&value_mask);
SwitchVar(Keyboard::BellDuration, value_list.bell_duration.has_value(), true,
&value_mask);
SwitchVar(Keyboard::Led, value_list.led.has_value(), true, &value_mask);
SwitchVar(Keyboard::LedMode, value_list.led_mode.has_value(), true,
&value_mask);
SwitchVar(Keyboard::Key, value_list.key.has_value(), true, &value_mask);
SwitchVar(Keyboard::AutoRepeatMode, value_list.auto_repeat_mode.has_value(),
true, &value_mask);
uint32_t tmp109;
tmp109 = static_cast<uint32_t>(value_mask);
buf.Write(&tmp109);
// value_list
auto value_list_expr = value_mask;
if (CaseAnd(value_list_expr, Keyboard::KeyClickPercent)) {
auto& key_click_percent = *value_list.key_click_percent;
// key_click_percent
buf.Write(&key_click_percent);
}
if (CaseAnd(value_list_expr, Keyboard::BellPercent)) {
auto& bell_percent = *value_list.bell_percent;
// bell_percent
buf.Write(&bell_percent);
}
if (CaseAnd(value_list_expr, Keyboard::BellPitch)) {
auto& bell_pitch = *value_list.bell_pitch;
// bell_pitch
buf.Write(&bell_pitch);
}
if (CaseAnd(value_list_expr, Keyboard::BellDuration)) {
auto& bell_duration = *value_list.bell_duration;
// bell_duration
buf.Write(&bell_duration);
}
if (CaseAnd(value_list_expr, Keyboard::Led)) {
auto& led = *value_list.led;
// led
buf.Write(&led);
}
if (CaseAnd(value_list_expr, Keyboard::LedMode)) {
auto& led_mode = *value_list.led_mode;
// led_mode
uint32_t tmp110;
tmp110 = static_cast<uint32_t>(led_mode);
buf.Write(&tmp110);
}
if (CaseAnd(value_list_expr, Keyboard::Key)) {
auto& key = *value_list.key;
// key
buf.Write(&key);
}
if (CaseAnd(value_list_expr, Keyboard::AutoRepeatMode)) {
auto& auto_repeat_mode = *value_list.auto_repeat_mode;
// auto_repeat_mode
uint32_t tmp111;
tmp111 = static_cast<uint32_t>(auto_repeat_mode);
buf.Write(&tmp111);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeKeyboardControl", false);
}
Future<void> XProto::ChangeKeyboardControl(
const absl::optional<int32_t>& key_click_percent,
const absl::optional<int32_t>& bell_percent,
const absl::optional<int32_t>& bell_pitch,
const absl::optional<int32_t>& bell_duration,
const absl::optional<uint32_t>& led,
const absl::optional<LedMode>& led_mode,
const absl::optional<KeyCode32>& key,
const absl::optional<AutoRepeatMode>& auto_repeat_mode) {
return XProto::ChangeKeyboardControl(ChangeKeyboardControlRequest{
key_click_percent, bell_percent, bell_pitch, bell_duration, led, led_mode,
key, auto_repeat_mode});
}
Future<GetKeyboardControlReply> XProto::GetKeyboardControl(
const GetKeyboardControlRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 103;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetKeyboardControlReply>(
&buf, "GetKeyboardControl", false);
}
Future<GetKeyboardControlReply> XProto::GetKeyboardControl() {
return XProto::GetKeyboardControl(GetKeyboardControlRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetKeyboardControlReply> detail::ReadReply<
GetKeyboardControlReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetKeyboardControlReply>();
auto& global_auto_repeat = (*reply).global_auto_repeat;
auto& sequence = (*reply).sequence;
auto& led_mask = (*reply).led_mask;
auto& key_click_percent = (*reply).key_click_percent;
auto& bell_percent = (*reply).bell_percent;
auto& bell_pitch = (*reply).bell_pitch;
auto& bell_duration = (*reply).bell_duration;
auto& auto_repeats = (*reply).auto_repeats;
size_t auto_repeats_len = auto_repeats.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// global_auto_repeat
uint8_t tmp112;
Read(&tmp112, &buf);
global_auto_repeat = static_cast<AutoRepeatMode>(tmp112);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// led_mask
Read(&led_mask, &buf);
// key_click_percent
Read(&key_click_percent, &buf);
// bell_percent
Read(&bell_percent, &buf);
// bell_pitch
Read(&bell_pitch, &buf);
// bell_duration
Read(&bell_duration, &buf);
// pad0
Pad(&buf, 2);
// auto_repeats
for (auto& auto_repeats_elem : auto_repeats) {
// auto_repeats_elem
Read(&auto_repeats_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::Bell(const BellRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& percent = request.percent;
// major_opcode
uint8_t major_opcode = 104;
buf.Write(&major_opcode);
// percent
buf.Write(&percent);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Bell", false);
}
Future<void> XProto::Bell(const int8_t& percent) {
return XProto::Bell(BellRequest{percent});
}
Future<void> XProto::ChangePointerControl(
const ChangePointerControlRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& acceleration_numerator = request.acceleration_numerator;
auto& acceleration_denominator = request.acceleration_denominator;
auto& threshold = request.threshold;
auto& do_acceleration = request.do_acceleration;
auto& do_threshold = request.do_threshold;
// major_opcode
uint8_t major_opcode = 105;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// acceleration_numerator
buf.Write(&acceleration_numerator);
// acceleration_denominator
buf.Write(&acceleration_denominator);
// threshold
buf.Write(&threshold);
// do_acceleration
buf.Write(&do_acceleration);
// do_threshold
buf.Write(&do_threshold);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangePointerControl", false);
}
Future<void> XProto::ChangePointerControl(
const int16_t& acceleration_numerator,
const int16_t& acceleration_denominator,
const int16_t& threshold,
const uint8_t& do_acceleration,
const uint8_t& do_threshold) {
return XProto::ChangePointerControl(ChangePointerControlRequest{
acceleration_numerator, acceleration_denominator, threshold,
do_acceleration, do_threshold});
}
Future<GetPointerControlReply> XProto::GetPointerControl(
const GetPointerControlRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 106;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetPointerControlReply>(
&buf, "GetPointerControl", false);
}
Future<GetPointerControlReply> XProto::GetPointerControl() {
return XProto::GetPointerControl(GetPointerControlRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetPointerControlReply> detail::ReadReply<
GetPointerControlReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetPointerControlReply>();
auto& sequence = (*reply).sequence;
auto& acceleration_numerator = (*reply).acceleration_numerator;
auto& acceleration_denominator = (*reply).acceleration_denominator;
auto& threshold = (*reply).threshold;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// acceleration_numerator
Read(&acceleration_numerator, &buf);
// acceleration_denominator
Read(&acceleration_denominator, &buf);
// threshold
Read(&threshold, &buf);
// pad1
Pad(&buf, 18);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::SetScreenSaver(const SetScreenSaverRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& timeout = request.timeout;
auto& interval = request.interval;
auto& prefer_blanking = request.prefer_blanking;
auto& allow_exposures = request.allow_exposures;
// major_opcode
uint8_t major_opcode = 107;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// timeout
buf.Write(&timeout);
// interval
buf.Write(&interval);
// prefer_blanking
uint8_t tmp113;
tmp113 = static_cast<uint8_t>(prefer_blanking);
buf.Write(&tmp113);
// allow_exposures
uint8_t tmp114;
tmp114 = static_cast<uint8_t>(allow_exposures);
buf.Write(&tmp114);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetScreenSaver", false);
}
Future<void> XProto::SetScreenSaver(const int16_t& timeout,
const int16_t& interval,
const Blanking& prefer_blanking,
const Exposures& allow_exposures) {
return XProto::SetScreenSaver(SetScreenSaverRequest{
timeout, interval, prefer_blanking, allow_exposures});
}
Future<GetScreenSaverReply> XProto::GetScreenSaver(
const GetScreenSaverRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 108;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetScreenSaverReply>(&buf, "GetScreenSaver",
false);
}
Future<GetScreenSaverReply> XProto::GetScreenSaver() {
return XProto::GetScreenSaver(GetScreenSaverRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetScreenSaverReply> detail::ReadReply<GetScreenSaverReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetScreenSaverReply>();
auto& sequence = (*reply).sequence;
auto& timeout = (*reply).timeout;
auto& interval = (*reply).interval;
auto& prefer_blanking = (*reply).prefer_blanking;
auto& allow_exposures = (*reply).allow_exposures;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// pad0
Pad(&buf, 1);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// timeout
Read(&timeout, &buf);
// interval
Read(&interval, &buf);
// prefer_blanking
uint8_t tmp115;
Read(&tmp115, &buf);
prefer_blanking = static_cast<Blanking>(tmp115);
// allow_exposures
uint8_t tmp116;
Read(&tmp116, &buf);
allow_exposures = static_cast<Exposures>(tmp116);
// pad1
Pad(&buf, 18);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::ChangeHosts(const ChangeHostsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
auto& family = request.family;
uint16_t address_len{};
auto& address = request.address;
// major_opcode
uint8_t major_opcode = 109;
buf.Write(&major_opcode);
// mode
uint8_t tmp117;
tmp117 = static_cast<uint8_t>(mode);
buf.Write(&tmp117);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// family
uint8_t tmp118;
tmp118 = static_cast<uint8_t>(family);
buf.Write(&tmp118);
// pad0
Pad(&buf, 1);
// address_len
address_len = address.size();
buf.Write(&address_len);
// address
DCHECK_EQ(static_cast<size_t>(address_len), address.size());
for (auto& address_elem : address) {
// address_elem
buf.Write(&address_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ChangeHosts", false);
}
Future<void> XProto::ChangeHosts(const HostMode& mode,
const Family& family,
const std::vector<uint8_t>& address) {
return XProto::ChangeHosts(ChangeHostsRequest{mode, family, address});
}
Future<ListHostsReply> XProto::ListHosts(const ListHostsRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 110;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<ListHostsReply>(&buf, "ListHosts", false);
}
Future<ListHostsReply> XProto::ListHosts() {
return XProto::ListHosts(ListHostsRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<ListHostsReply> detail::ReadReply<ListHostsReply>(
ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<ListHostsReply>();
auto& mode = (*reply).mode;
auto& sequence = (*reply).sequence;
uint16_t hosts_len{};
auto& hosts = (*reply).hosts;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// mode
uint8_t tmp119;
Read(&tmp119, &buf);
mode = static_cast<AccessControl>(tmp119);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// hosts_len
Read(&hosts_len, &buf);
// pad0
Pad(&buf, 22);
// hosts
hosts.resize(hosts_len);
for (auto& hosts_elem : hosts) {
// hosts_elem
{
auto& family = hosts_elem.family;
uint16_t address_len{};
auto& address = hosts_elem.address;
// family
uint8_t tmp120;
Read(&tmp120, &buf);
family = static_cast<Family>(tmp120);
// pad0
Pad(&buf, 1);
// address_len
Read(&address_len, &buf);
// address
address.resize(address_len);
for (auto& address_elem : address) {
// address_elem
Read(&address_elem, &buf);
}
// pad1
Align(&buf, 4);
}
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::SetAccessControl(const SetAccessControlRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
// major_opcode
uint8_t major_opcode = 111;
buf.Write(&major_opcode);
// mode
uint8_t tmp121;
tmp121 = static_cast<uint8_t>(mode);
buf.Write(&tmp121);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetAccessControl", false);
}
Future<void> XProto::SetAccessControl(const AccessControl& mode) {
return XProto::SetAccessControl(SetAccessControlRequest{mode});
}
Future<void> XProto::SetCloseDownMode(const SetCloseDownModeRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
// major_opcode
uint8_t major_opcode = 112;
buf.Write(&major_opcode);
// mode
uint8_t tmp122;
tmp122 = static_cast<uint8_t>(mode);
buf.Write(&tmp122);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "SetCloseDownMode", false);
}
Future<void> XProto::SetCloseDownMode(const CloseDown& mode) {
return XProto::SetCloseDownMode(SetCloseDownModeRequest{mode});
}
Future<void> XProto::KillClient(const KillClientRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& resource = request.resource;
// major_opcode
uint8_t major_opcode = 113;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// resource
buf.Write(&resource);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "KillClient", false);
}
Future<void> XProto::KillClient(const uint32_t& resource) {
return XProto::KillClient(KillClientRequest{resource});
}
Future<void> XProto::RotateProperties(const RotatePropertiesRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& window = request.window;
uint16_t atoms_len{};
auto& delta = request.delta;
auto& atoms = request.atoms;
// major_opcode
uint8_t major_opcode = 114;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// atoms_len
atoms_len = atoms.size();
buf.Write(&atoms_len);
// delta
buf.Write(&delta);
// atoms
DCHECK_EQ(static_cast<size_t>(atoms_len), atoms.size());
for (auto& atoms_elem : atoms) {
// atoms_elem
buf.Write(&atoms_elem);
}
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "RotateProperties", false);
}
Future<void> XProto::RotateProperties(const Window& window,
const int16_t& delta,
const std::vector<Atom>& atoms) {
return XProto::RotateProperties(
RotatePropertiesRequest{window, delta, atoms});
}
Future<void> XProto::ForceScreenSaver(const ForceScreenSaverRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& mode = request.mode;
// major_opcode
uint8_t major_opcode = 115;
buf.Write(&major_opcode);
// mode
uint8_t tmp123;
tmp123 = static_cast<uint8_t>(mode);
buf.Write(&tmp123);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "ForceScreenSaver", false);
}
Future<void> XProto::ForceScreenSaver(const ScreenSaverMode& mode) {
return XProto::ForceScreenSaver(ForceScreenSaverRequest{mode});
}
Future<SetPointerMappingReply> XProto::SetPointerMapping(
const SetPointerMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
uint8_t map_len{};
auto& map = request.map;
// major_opcode
uint8_t major_opcode = 116;
buf.Write(&major_opcode);
// map_len
map_len = map.size();
buf.Write(&map_len);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// map
DCHECK_EQ(static_cast<size_t>(map_len), map.size());
for (auto& map_elem : map) {
// map_elem
buf.Write(&map_elem);
}
Align(&buf, 4);
return connection_->SendRequest<SetPointerMappingReply>(
&buf, "SetPointerMapping", false);
}
Future<SetPointerMappingReply> XProto::SetPointerMapping(
const std::vector<uint8_t>& map) {
return XProto::SetPointerMapping(SetPointerMappingRequest{map});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<SetPointerMappingReply> detail::ReadReply<
SetPointerMappingReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<SetPointerMappingReply>();
auto& status = (*reply).status;
auto& sequence = (*reply).sequence;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// status
uint8_t tmp124;
Read(&tmp124, &buf);
status = static_cast<MappingStatus>(tmp124);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<GetPointerMappingReply> XProto::GetPointerMapping(
const GetPointerMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 117;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetPointerMappingReply>(
&buf, "GetPointerMapping", false);
}
Future<GetPointerMappingReply> XProto::GetPointerMapping() {
return XProto::GetPointerMapping(GetPointerMappingRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetPointerMappingReply> detail::ReadReply<
GetPointerMappingReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetPointerMappingReply>();
uint8_t map_len{};
auto& sequence = (*reply).sequence;
auto& map = (*reply).map;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// map_len
Read(&map_len, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pad0
Pad(&buf, 24);
// map
map.resize(map_len);
for (auto& map_elem : map) {
// map_elem
Read(&map_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<SetModifierMappingReply> XProto::SetModifierMapping(
const SetModifierMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
auto& keycodes_per_modifier = request.keycodes_per_modifier;
auto& keycodes = request.keycodes;
size_t keycodes_len = keycodes.size();
// major_opcode
uint8_t major_opcode = 118;
buf.Write(&major_opcode);
// keycodes_per_modifier
buf.Write(&keycodes_per_modifier);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// keycodes
DCHECK_EQ(static_cast<size_t>((keycodes_per_modifier) * (8)),
keycodes.size());
for (auto& keycodes_elem : keycodes) {
// keycodes_elem
buf.Write(&keycodes_elem);
}
Align(&buf, 4);
return connection_->SendRequest<SetModifierMappingReply>(
&buf, "SetModifierMapping", false);
}
Future<SetModifierMappingReply> XProto::SetModifierMapping(
const uint8_t& keycodes_per_modifier,
const std::vector<KeyCode>& keycodes) {
return XProto::SetModifierMapping(
SetModifierMappingRequest{keycodes_per_modifier, keycodes});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<SetModifierMappingReply> detail::ReadReply<
SetModifierMappingReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<SetModifierMappingReply>();
auto& status = (*reply).status;
auto& sequence = (*reply).sequence;
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// status
uint8_t tmp125;
Read(&tmp125, &buf);
status = static_cast<MappingStatus>(tmp125);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<GetModifierMappingReply> XProto::GetModifierMapping(
const GetModifierMappingRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 119;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<GetModifierMappingReply>(
&buf, "GetModifierMapping", false);
}
Future<GetModifierMappingReply> XProto::GetModifierMapping() {
return XProto::GetModifierMapping(GetModifierMappingRequest{});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<GetModifierMappingReply> detail::ReadReply<
GetModifierMappingReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<GetModifierMappingReply>();
auto& keycodes_per_modifier = (*reply).keycodes_per_modifier;
auto& sequence = (*reply).sequence;
auto& keycodes = (*reply).keycodes;
size_t keycodes_len = keycodes.size();
// response_type
uint8_t response_type;
Read(&response_type, &buf);
// keycodes_per_modifier
Read(&keycodes_per_modifier, &buf);
// sequence
Read(&sequence, &buf);
// length
uint32_t length;
Read(&length, &buf);
// pad0
Pad(&buf, 24);
// keycodes
keycodes.resize((keycodes_per_modifier) * (8));
for (auto& keycodes_elem : keycodes) {
// keycodes_elem
Read(&keycodes_elem, &buf);
}
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> XProto::NoOperation(const NoOperationRequest& request) {
if (!connection_->Ready())
return {};
WriteBuffer buf;
// major_opcode
uint8_t major_opcode = 127;
buf.Write(&major_opcode);
// pad0
Pad(&buf, 1);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "NoOperation", false);
}
Future<void> XProto::NoOperation() {
return XProto::NoOperation(NoOperationRequest{});
}
} // namespace x11