New upstream version 26.0.2+dfsg1
This commit is contained in:
parent
bc27b6c1ca
commit
040dcc3fc2
23 changed files with 226 additions and 184 deletions
|
|
@ -137,58 +137,6 @@ struct winrt_capture {
|
|||
BOOL active;
|
||||
struct winrt_capture *next;
|
||||
|
||||
void draw_cursor()
|
||||
{
|
||||
CURSORINFO ci{};
|
||||
ci.cbSize = sizeof(CURSORINFO);
|
||||
if (!GetCursorInfo(&ci))
|
||||
return;
|
||||
|
||||
if (!(ci.flags & CURSOR_SHOWING))
|
||||
return;
|
||||
|
||||
HICON icon = CopyIcon(ci.hCursor);
|
||||
if (!icon)
|
||||
return;
|
||||
|
||||
ICONINFO ii;
|
||||
if (GetIconInfo(icon, &ii)) {
|
||||
POINT win_pos{};
|
||||
if (window) {
|
||||
if (client_area) {
|
||||
ClientToScreen(window, &win_pos);
|
||||
} else {
|
||||
RECT window_rect;
|
||||
if (DwmGetWindowAttribute(
|
||||
window,
|
||||
DWMWA_EXTENDED_FRAME_BOUNDS,
|
||||
&window_rect,
|
||||
sizeof(window_rect)) ==
|
||||
S_OK) {
|
||||
win_pos.x = window_rect.left;
|
||||
win_pos.y = window_rect.top;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
POINT pos;
|
||||
pos.x = ci.ptScreenPos.x - (int)ii.xHotspot - win_pos.x;
|
||||
pos.y = ci.ptScreenPos.y - (int)ii.yHotspot - win_pos.y;
|
||||
|
||||
HDC hdc = (HDC)gs_texture_get_dc(texture);
|
||||
|
||||
DrawIconEx(hdc, pos.x, pos.y, icon, 0, 0, 0, NULL,
|
||||
DI_NORMAL);
|
||||
|
||||
gs_texture_release_dc(texture);
|
||||
|
||||
DeleteObject(ii.hbmColor);
|
||||
DeleteObject(ii.hbmMask);
|
||||
}
|
||||
|
||||
DestroyIcon(icon);
|
||||
}
|
||||
|
||||
void on_closed(
|
||||
winrt::Windows::Graphics::Capture::GraphicsCaptureItem const &,
|
||||
winrt::Windows::Foundation::IInspectable const &)
|
||||
|
|
@ -256,10 +204,6 @@ struct winrt_capture {
|
|||
frame_surface.get());
|
||||
}
|
||||
|
||||
if (capture_cursor && cursor_visible) {
|
||||
draw_cursor();
|
||||
}
|
||||
|
||||
texture_written = true;
|
||||
}
|
||||
|
||||
|
|
@ -342,9 +286,9 @@ static void winrt_capture_device_loss_rebuild(void *device_void, void *data)
|
|||
const winrt::Windows::Graphics::Capture::GraphicsCaptureSession session =
|
||||
frame_pool.CreateCaptureSession(item);
|
||||
|
||||
/* disable cursor capture if possible since ours performs better */
|
||||
if (winrt_capture_cursor_toggle_supported())
|
||||
session.IsCursorCaptureEnabled(false);
|
||||
session.IsCursorCaptureEnabled(capture->capture_cursor &&
|
||||
capture->cursor_visible);
|
||||
|
||||
capture->item = item;
|
||||
capture->device = device;
|
||||
|
|
@ -425,12 +369,13 @@ try {
|
|||
const BOOL cursor_toggle_supported =
|
||||
winrt_capture_cursor_toggle_supported();
|
||||
if (cursor_toggle_supported)
|
||||
session.IsCursorCaptureEnabled(false);
|
||||
session.IsCursorCaptureEnabled(cursor);
|
||||
|
||||
struct winrt_capture *capture = new winrt_capture{};
|
||||
capture->window = window;
|
||||
capture->client_area = client_area;
|
||||
capture->capture_cursor = cursor && cursor_toggle_supported;
|
||||
capture->cursor_visible = cursor;
|
||||
capture->item = item;
|
||||
capture->device = device;
|
||||
d3d_device->GetImmediateContext(&capture->context);
|
||||
|
|
@ -523,7 +468,12 @@ extern "C" EXPORT BOOL winrt_capture_active(const struct winrt_capture *capture)
|
|||
extern "C" EXPORT void winrt_capture_show_cursor(struct winrt_capture *capture,
|
||||
BOOL visible)
|
||||
{
|
||||
capture->cursor_visible = visible;
|
||||
if (capture->capture_cursor) {
|
||||
if (capture->cursor_visible != visible) {
|
||||
capture->session.IsCursorCaptureEnabled(visible);
|
||||
capture->cursor_visible = visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" EXPORT void winrt_capture_render(struct winrt_capture *capture,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue