Files

27 lines
8.0 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="The native video surface mpv renders into (UR-080 / DR-231)."><title>jellytau_lib::player::video_surface - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-17e0aaed.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="jellytau_lib" data-themes="" data-resource-suffix="" data-rustdoc-version="1.97.1 (8bab26f4f 2026-07-14)" data-channel="1.97.1" data-search-js="search-fd9372ac.js" data-stringdex-js="stringdex-2da4960a.js" data-settings-js="settings-170eb4bf.js" ><script src="../../../static.files/storage-41dd4d93.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-fcd733ba.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-f7c3ffd8.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-044be391.svg"></head><body class="rustdoc mod"><a class="skip-main-content" href="#main-content">Skip to main content</a><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module video_surface</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../jellytau_lib/index.html">jellytau_<wbr>lib</a><span class="version">0.11.2</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module video_<wbr>surface</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#why-there-is-no-overlay-here" title="Why there is no overlay here">Why there is no overlay here</a></li></ul><h3><a href="#structs">Module Items</a></h3><ul class="block"><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#constants" title="Constants">Constants</a></li><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In jellytau_<wbr>lib::<wbr>player</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content" tabindex="-1"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">jellytau_lib</a>::<wbr><a href="../index.html">player</a></div><h1>Module <span>video_<wbr>surface</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/jellytau_lib/player/video_surface.rs.html#1-412">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>The native video surface mpv renders into (UR-080 / DR-231).</p>
<p>Linux-gated because the <em>surface</em> is GTK. Everything around it — the render
context, its lifetime, frame pacing, the device profile — is not.
The native video surface: mpv drawn <em>behind</em> Tauris webview, without
touching the widget tree.</p>
<h2 id="why-there-is-no-overlay-here"><a class="doc-anchor" href="#why-there-is-no-overlay-here">§</a>Why there is no overlay here</h2>
<p>The obvious arrangement — wrap the webview in a <code>GtkOverlay</code> with a
<code>GtkGLArea</code> beneath — attaches cleanly and then aborts the process on the
first click. <code>tauri-runtime-wry</code> connects a button-press handler to the
webview that walks a hard-coded path:</p>
<div class="example-wrap"><pre class="language-text"><code>webview.parent() // &quot;This one should be GtkBox&quot;
.parent() // ...and this one the GtkWindow
.downcast::&lt;gtk::Window&gt;().unwrap()</code></pre></div>
<p>An overlay makes that chain <code>webview → GtkOverlay → GtkBox</code>, the downcast
fails, and because the panic is non-unwinding it takes the app with it.
Nothing in configuration avoids it: on Linux the handler is attached
<em>unconditionally</em> (the Windows path guards it behind <code>is_decorated()</code>), and
the decoration check that would make it inert runs <em>after</em> the unwrap.</p>
<p>So the widget tree is left exactly as Tauri built it. GTK draws a container
before its children, so rendering into the vboxs own <code>draw</code> handler puts the
picture underneath the webview for free — the same z-order, no reparenting,
one less widget, and nothing a Tauri upgrade can invalidate by assuming its
own layout.</p>
<p>TRACES: UR-080 | DR-231, DR-232, DR-233, IR-033</p>
</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.SurfaceState.html" title="struct jellytau_lib::player::video_surface::SurfaceState">Surface<wbr>State</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>Everything the draw handler needs, shared with the GTK callbacks.</dd><dt><a class="struct" href="struct.VideoSurface.html" title="struct jellytau_lib::player::video_surface::VideoSurface">Video<wbr>Surface</a></dt><dd>A live video surface. Dropping it tears the render context down.</dd></dl><h2 id="constants" class="section-header">Constants<a href="#constants" class="anchor">§</a></h2><dl class="item-table"><dt><a class="constant" href="constant.GL_TEXTURE.html" title="constant jellytau_lib::player::video_surface::GL_TEXTURE">GL_<wbr>TEXTURE</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>GL enum for <code>gdk_cairo_draw_from_gl</code>s <code>source_type</code>. GDK takes the GL
constant itself rather than an enum of its own.</dd><dt><a class="constant" href="constant.LIVE_SURFACE.html" title="constant jellytau_lib::player::video_surface::LIVE_SURFACE">LIVE_<wbr>SURFACE</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>The one live surface, on the GTK main thread.</dd></dl><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.attach.html" title="fn jellytau_lib::player::video_surface::attach">attach</a></dt><dd>Start drawing mpvs video underneath the webview.</dd><dt><a class="fn" href="fn.detach.html" title="fn jellytau_lib::player::video_surface::detach">detach</a></dt><dd>Drop the live surface, if there is one. Idempotent.</dd><dt><a class="fn" href="fn.draw.html" title="fn jellytau_lib::player::video_surface::draw">draw</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>Draw the current frame, if there is one.</dd><dt><a class="fn" href="fn.init_gl.html" title="fn jellytau_lib::player::video_surface::init_gl">init_gl</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>Create the GL context and the mpv render context over it.</dd><dt><a class="fn" href="fn.on_mpv_update.html" title="fn jellytau_lib::player::video_surface::on_mpv_update">on_<wbr>mpv_<wbr>update</a><span title="Restricted Visibility">&nbsp;🔒</span> <sup title="unsafe function"></sup></dt><dd>mpvs update callback. Runs on an mpv thread, so it does the least possible:
flags the state and asks GTK to redraw on the main loop.</dd></dl></section></div></main></body></html>