Fix capturing scaled output with wlgrab
This commit is contained in:
@@ -67,7 +67,14 @@ namespace wl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline monitor_t::monitor_t(wl_output *output):
|
inline monitor_t::monitor_t(wl_output *output):
|
||||||
output { output }, listener {
|
output { output },
|
||||||
|
wl_listener {
|
||||||
|
&CLASS_CALL(monitor_t, wl_geometry),
|
||||||
|
&CLASS_CALL(monitor_t, wl_mode),
|
||||||
|
&CLASS_CALL(monitor_t, wl_done),
|
||||||
|
&CLASS_CALL(monitor_t, wl_scale),
|
||||||
|
},
|
||||||
|
xdg_listener {
|
||||||
&CLASS_CALL(monitor_t, xdg_position),
|
&CLASS_CALL(monitor_t, xdg_position),
|
||||||
&CLASS_CALL(monitor_t, xdg_size),
|
&CLASS_CALL(monitor_t, xdg_size),
|
||||||
&CLASS_CALL(monitor_t, xdg_done),
|
&CLASS_CALL(monitor_t, xdg_done),
|
||||||
@@ -99,21 +106,23 @@ namespace wl {
|
|||||||
|
|
||||||
void
|
void
|
||||||
monitor_t::xdg_size(zxdg_output_v1 *, std::int32_t width, std::int32_t height) {
|
monitor_t::xdg_size(zxdg_output_v1 *, std::int32_t width, std::int32_t height) {
|
||||||
|
BOOST_LOG(info) << "Logical size: "sv << width << 'x' << height;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
monitor_t::wl_mode(wl_output *wl_output, std::uint32_t flags,
|
||||||
|
std::int32_t width, std::int32_t height, std::int32_t refresh) {
|
||||||
viewport.width = width;
|
viewport.width = width;
|
||||||
viewport.height = height;
|
viewport.height = height;
|
||||||
|
|
||||||
BOOST_LOG(info) << "Resolution: "sv << width << 'x' << height;
|
BOOST_LOG(info) << "Resolution: "sv << width << 'x' << height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
monitor_t::xdg_done(zxdg_output_v1 *) {
|
|
||||||
BOOST_LOG(info) << "All info about monitor ["sv << name << "] has been send"sv;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
monitor_t::listen(zxdg_output_manager_v1 *output_manager) {
|
monitor_t::listen(zxdg_output_manager_v1 *output_manager) {
|
||||||
auto xdg_output = zxdg_output_manager_v1_get_xdg_output(output_manager, output);
|
auto xdg_output = zxdg_output_manager_v1_get_xdg_output(output_manager, output);
|
||||||
zxdg_output_v1_add_listener(xdg_output, &listener, this);
|
zxdg_output_v1_add_listener(xdg_output, &xdg_listener, this);
|
||||||
|
wl_output_add_listener(output, &wl_listener, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface_t::interface_t() noexcept
|
interface_t::interface_t() noexcept
|
||||||
@@ -137,7 +146,7 @@ namespace wl {
|
|||||||
BOOST_LOG(info) << "Found interface: "sv << interface << '(' << id << ") version "sv << version;
|
BOOST_LOG(info) << "Found interface: "sv << interface << '(' << id << ") version "sv << version;
|
||||||
monitors.emplace_back(
|
monitors.emplace_back(
|
||||||
std::make_unique<monitor_t>(
|
std::make_unique<monitor_t>(
|
||||||
(wl_output *) wl_registry_bind(registry, id, &wl_output_interface, version)));
|
(wl_output *) wl_registry_bind(registry, id, &wl_output_interface, 2)));
|
||||||
}
|
}
|
||||||
else if (!std::strcmp(interface, zxdg_output_manager_v1_interface.name)) {
|
else if (!std::strcmp(interface, zxdg_output_manager_v1_interface.name)) {
|
||||||
BOOST_LOG(info) << "Found interface: "sv << interface << '(' << id << ") version "sv << version;
|
BOOST_LOG(info) << "Found interface: "sv << interface << '(' << id << ") version "sv << version;
|
||||||
|
|||||||
@@ -118,7 +118,19 @@ namespace wl {
|
|||||||
void
|
void
|
||||||
xdg_size(zxdg_output_v1 *, std::int32_t width, std::int32_t height);
|
xdg_size(zxdg_output_v1 *, std::int32_t width, std::int32_t height);
|
||||||
void
|
void
|
||||||
xdg_done(zxdg_output_v1 *);
|
xdg_done(zxdg_output_v1 *) {}
|
||||||
|
|
||||||
|
void
|
||||||
|
wl_geometry(wl_output *wl_output, std::int32_t x, std::int32_t y,
|
||||||
|
std::int32_t physical_width, std::int32_t physical_height, std::int32_t subpixel,
|
||||||
|
const char *make, const char *model, std::int32_t transform) {}
|
||||||
|
void
|
||||||
|
wl_mode(wl_output *wl_output, std::uint32_t flags,
|
||||||
|
std::int32_t width, std::int32_t height, std::int32_t refresh);
|
||||||
|
void
|
||||||
|
wl_done(wl_output *wl_output) {}
|
||||||
|
void
|
||||||
|
wl_scale(wl_output *wl_output, std::int32_t factor) {}
|
||||||
|
|
||||||
void
|
void
|
||||||
listen(zxdg_output_manager_v1 *output_manager);
|
listen(zxdg_output_manager_v1 *output_manager);
|
||||||
@@ -130,7 +142,8 @@ namespace wl {
|
|||||||
|
|
||||||
platf::touch_port_t viewport;
|
platf::touch_port_t viewport;
|
||||||
|
|
||||||
zxdg_output_v1_listener listener;
|
wl_output_listener wl_listener;
|
||||||
|
zxdg_output_v1_listener xdg_listener;
|
||||||
};
|
};
|
||||||
|
|
||||||
class interface_t {
|
class interface_t {
|
||||||
|
|||||||
Reference in New Issue
Block a user