blob: 5fda7238462d8e38d71bc54e3bdba879ae9dbbe4 [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 "composite.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 {
Composite::Composite(Connection* connection,
const x11::QueryExtensionReply& info)
: connection_(connection), info_(info) {}
Future<Composite::QueryVersionReply> Composite::QueryVersion(
const Composite::QueryVersionRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& client_major_version = request.client_major_version;
auto& client_minor_version = request.client_minor_version;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 0;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// client_major_version
buf.Write(&client_major_version);
// client_minor_version
buf.Write(&client_minor_version);
Align(&buf, 4);
return connection_->SendRequest<Composite::QueryVersionReply>(
&buf, "Composite::QueryVersion", false);
}
Future<Composite::QueryVersionReply> Composite::QueryVersion(
const uint32_t& client_major_version,
const uint32_t& client_minor_version) {
return Composite::QueryVersion(Composite::QueryVersionRequest{
client_major_version, client_minor_version});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<Composite::QueryVersionReply> detail::ReadReply<
Composite::QueryVersionReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<Composite::QueryVersionReply>();
auto& sequence = (*reply).sequence;
auto& major_version = (*reply).major_version;
auto& minor_version = (*reply).minor_version;
// 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);
// major_version
Read(&major_version, &buf);
// minor_version
Read(&minor_version, &buf);
// pad1
Pad(&buf, 16);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> Composite::RedirectWindow(
const Composite::RedirectWindowRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& update = request.update;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 1;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// update
uint8_t tmp0;
tmp0 = static_cast<uint8_t>(update);
buf.Write(&tmp0);
// pad0
Pad(&buf, 3);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::RedirectWindow",
false);
}
Future<void> Composite::RedirectWindow(const Window& window,
const Redirect& update) {
return Composite::RedirectWindow(
Composite::RedirectWindowRequest{window, update});
}
Future<void> Composite::RedirectSubwindows(
const Composite::RedirectSubwindowsRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& update = request.update;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 2;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// update
uint8_t tmp1;
tmp1 = static_cast<uint8_t>(update);
buf.Write(&tmp1);
// pad0
Pad(&buf, 3);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::RedirectSubwindows",
false);
}
Future<void> Composite::RedirectSubwindows(const Window& window,
const Redirect& update) {
return Composite::RedirectSubwindows(
Composite::RedirectSubwindowsRequest{window, update});
}
Future<void> Composite::UnredirectWindow(
const Composite::UnredirectWindowRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& update = request.update;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 3;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// update
uint8_t tmp2;
tmp2 = static_cast<uint8_t>(update);
buf.Write(&tmp2);
// pad0
Pad(&buf, 3);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::UnredirectWindow",
false);
}
Future<void> Composite::UnredirectWindow(const Window& window,
const Redirect& update) {
return Composite::UnredirectWindow(
Composite::UnredirectWindowRequest{window, update});
}
Future<void> Composite::UnredirectSubwindows(
const Composite::UnredirectSubwindowsRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& update = request.update;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 4;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// update
uint8_t tmp3;
tmp3 = static_cast<uint8_t>(update);
buf.Write(&tmp3);
// pad0
Pad(&buf, 3);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::UnredirectSubwindows",
false);
}
Future<void> Composite::UnredirectSubwindows(const Window& window,
const Redirect& update) {
return Composite::UnredirectSubwindows(
Composite::UnredirectSubwindowsRequest{window, update});
}
Future<void> Composite::CreateRegionFromBorderClip(
const Composite::CreateRegionFromBorderClipRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& region = request.region;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 5;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// region
buf.Write(&region);
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(
&buf, "Composite::CreateRegionFromBorderClip", false);
}
Future<void> Composite::CreateRegionFromBorderClip(const XFixes::Region& region,
const Window& window) {
return Composite::CreateRegionFromBorderClip(
Composite::CreateRegionFromBorderClipRequest{region, window});
}
Future<void> Composite::NameWindowPixmap(
const Composite::NameWindowPixmapRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
auto& pixmap = request.pixmap;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 6;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
// pixmap
buf.Write(&pixmap);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::NameWindowPixmap",
false);
}
Future<void> Composite::NameWindowPixmap(const Window& window,
const Pixmap& pixmap) {
return Composite::NameWindowPixmap(
Composite::NameWindowPixmapRequest{window, pixmap});
}
Future<Composite::GetOverlayWindowReply> Composite::GetOverlayWindow(
const Composite::GetOverlayWindowRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 7;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<Composite::GetOverlayWindowReply>(
&buf, "Composite::GetOverlayWindow", false);
}
Future<Composite::GetOverlayWindowReply> Composite::GetOverlayWindow(
const Window& window) {
return Composite::GetOverlayWindow(
Composite::GetOverlayWindowRequest{window});
}
template <>
COMPONENT_EXPORT(X11)
std::unique_ptr<Composite::GetOverlayWindowReply> detail::ReadReply<
Composite::GetOverlayWindowReply>(ReadBuffer* buffer) {
auto& buf = *buffer;
auto reply = std::make_unique<Composite::GetOverlayWindowReply>();
auto& sequence = (*reply).sequence;
auto& overlay_win = (*reply).overlay_win;
// 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);
// overlay_win
Read(&overlay_win, &buf);
// pad1
Pad(&buf, 20);
Align(&buf, 4);
DCHECK_EQ(buf.offset < 32 ? 0 : buf.offset - 32, 4 * length);
return reply;
}
Future<void> Composite::ReleaseOverlayWindow(
const Composite::ReleaseOverlayWindowRequest& request) {
if (!connection_->Ready() || !present())
return {};
WriteBuffer buf;
auto& window = request.window;
// major_opcode
uint8_t major_opcode = info_.major_opcode;
buf.Write(&major_opcode);
// minor_opcode
uint8_t minor_opcode = 8;
buf.Write(&minor_opcode);
// length
// Caller fills in length for writes.
Pad(&buf, sizeof(uint16_t));
// window
buf.Write(&window);
Align(&buf, 4);
return connection_->SendRequest<void>(&buf, "Composite::ReleaseOverlayWindow",
false);
}
Future<void> Composite::ReleaseOverlayWindow(const Window& window) {
return Composite::ReleaseOverlayWindow(
Composite::ReleaseOverlayWindowRequest{window});
}
} // namespace x11