blob: 123f200cad598ac73ad3d9140d3e85ce255d0fff [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
#ifndef UI_GFX_X_GENERATED_PROTOS_RECORD_H_
#define UI_GFX_X_GENERATED_PROTOS_RECORD_H_
#include <array>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <vector>
#include "base/component_export.h"
#include "base/files/scoped_file.h"
#include "base/memory/ref_counted_memory.h"
#include "base/memory/scoped_refptr.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/x/error.h"
#include "ui/gfx/x/ref_counted_fd.h"
#include "xproto.h"
namespace x11 {
class Connection;
template <typename Reply>
struct Response;
template <typename Reply>
class Future;
class COMPONENT_EXPORT(X11) Record {
public:
static constexpr unsigned major_version = 1;
static constexpr unsigned minor_version = 13;
Record(Connection* connection, const x11::QueryExtensionReply& info);
uint8_t present() const { return info_.present; }
uint8_t major_opcode() const { return info_.major_opcode; }
uint8_t first_event() const { return info_.first_event; }
uint8_t first_error() const { return info_.first_error; }
Connection* connection() const { return connection_; }
enum class Context : uint32_t {};
enum class ElementHeader : uint8_t {};
enum class HType : int {
FromServerTime = 1 << 0,
FromClientTime = 1 << 1,
FromClientSequence = 1 << 2,
};
enum class ClientSpec : uint32_t {
CurrentClients = 1,
FutureClients = 2,
AllClients = 3,
};
struct Range8 {
uint8_t first{};
uint8_t last{};
};
struct Range16 {
uint16_t first{};
uint16_t last{};
};
struct ExtRange {
Range8 major{};
Range16 minor{};
};
struct Range {
Range8 core_requests{};
Range8 core_replies{};
ExtRange ext_requests{};
ExtRange ext_replies{};
Range8 delivered_events{};
Range8 device_events{};
Range8 errors{};
uint8_t client_started{};
uint8_t client_died{};
};
struct ClientInfo {
ClientSpec client_resource{};
std::vector<Range> ranges{};
};
struct BadContextError : public x11::Error {
uint16_t sequence{};
uint32_t invalid_record{};
std::string ToString() const override;
};
struct QueryVersionRequest {
uint16_t major_version{};
uint16_t minor_version{};
};
struct QueryVersionReply {
uint16_t sequence{};
uint16_t major_version{};
uint16_t minor_version{};
};
using QueryVersionResponse = Response<QueryVersionReply>;
Future<QueryVersionReply> QueryVersion(const QueryVersionRequest& request);
Future<QueryVersionReply> QueryVersion(const uint16_t& major_version = {},
const uint16_t& minor_version = {});
struct CreateContextRequest {
Context context{};
ElementHeader element_header{};
std::vector<ClientSpec> client_specs{};
std::vector<Range> ranges{};
};
using CreateContextResponse = Response<void>;
Future<void> CreateContext(const CreateContextRequest& request);
Future<void> CreateContext(const Context& context = {},
const ElementHeader& element_header = {},
const std::vector<ClientSpec>& client_specs = {},
const std::vector<Range>& ranges = {});
struct RegisterClientsRequest {
Context context{};
ElementHeader element_header{};
std::vector<ClientSpec> client_specs{};
std::vector<Range> ranges{};
};
using RegisterClientsResponse = Response<void>;
Future<void> RegisterClients(const RegisterClientsRequest& request);
Future<void> RegisterClients(const Context& context = {},
const ElementHeader& element_header = {},
const std::vector<ClientSpec>& client_specs = {},
const std::vector<Range>& ranges = {});
struct UnregisterClientsRequest {
Context context{};
std::vector<ClientSpec> client_specs{};
};
using UnregisterClientsResponse = Response<void>;
Future<void> UnregisterClients(const UnregisterClientsRequest& request);
Future<void> UnregisterClients(
const Context& context = {},
const std::vector<ClientSpec>& client_specs = {});
struct GetContextRequest {
Context context{};
};
struct GetContextReply {
uint8_t enabled{};
uint16_t sequence{};
ElementHeader element_header{};
std::vector<ClientInfo> intercepted_clients{};
};
using GetContextResponse = Response<GetContextReply>;
Future<GetContextReply> GetContext(const GetContextRequest& request);
Future<GetContextReply> GetContext(const Context& context = {});
struct EnableContextRequest {
Context context{};
};
struct EnableContextReply {
uint8_t category{};
uint16_t sequence{};
ElementHeader element_header{};
uint8_t client_swapped{};
uint32_t xid_base{};
uint32_t server_time{};
uint32_t rec_sequence_num{};
std::vector<uint8_t> data{};
};
using EnableContextResponse = Response<EnableContextReply>;
Future<EnableContextReply> EnableContext(const EnableContextRequest& request);
Future<EnableContextReply> EnableContext(const Context& context = {});
struct DisableContextRequest {
Context context{};
};
using DisableContextResponse = Response<void>;
Future<void> DisableContext(const DisableContextRequest& request);
Future<void> DisableContext(const Context& context = {});
struct FreeContextRequest {
Context context{};
};
using FreeContextResponse = Response<void>;
Future<void> FreeContext(const FreeContextRequest& request);
Future<void> FreeContext(const Context& context = {});
private:
Connection* const connection_;
x11::QueryExtensionReply info_{};
};
} // namespace x11
inline constexpr x11::Record::HType operator|(x11::Record::HType l,
x11::Record::HType r) {
using T = std::underlying_type_t<x11::Record::HType>;
return static_cast<x11::Record::HType>(static_cast<T>(l) | static_cast<T>(r));
}
inline constexpr x11::Record::HType operator&(x11::Record::HType l,
x11::Record::HType r) {
using T = std::underlying_type_t<x11::Record::HType>;
return static_cast<x11::Record::HType>(static_cast<T>(l) & static_cast<T>(r));
}
inline constexpr x11::Record::ClientSpec operator|(x11::Record::ClientSpec l,
x11::Record::ClientSpec r) {
using T = std::underlying_type_t<x11::Record::ClientSpec>;
return static_cast<x11::Record::ClientSpec>(static_cast<T>(l) |
static_cast<T>(r));
}
inline constexpr x11::Record::ClientSpec operator&(x11::Record::ClientSpec l,
x11::Record::ClientSpec r) {
using T = std::underlying_type_t<x11::Record::ClientSpec>;
return static_cast<x11::Record::ClientSpec>(static_cast<T>(l) &
static_cast<T>(r));
}
#endif // UI_GFX_X_GENERATED_PROTOS_RECORD_H_