fix(vst-gui): borderless fx-gui window + anchored re-show (mouse stable)
- RenderFxJob: offscreen fx-gui window now WS_POPUP (borderless) so GetWindowRect == client rect; anchored placement over the embed panel is exact. WS_OVERLAPPEDWINDOW put the client ~31px lower/right -> cursor jumped on hover and clicks hit the webview (relay rejected). - AdjustWindowRect sizes to the window's own style (no caption for POPUP). - FxGuiServer: mousemove only SetCursorPos while dragging (buttons!=0); hover no longer teleports the cursor. - FxGuiServer /show: skip SetWindowPos/resize when rect unchanged (frontend now re-POSTs /show every ~500ms to re-anchor on scroll/resize). - app.jsx VstGuiEmbed: drop shownRef one-shot; re-POST /show each refresh. - Rebuilt bridge (6 locations) + Tauri release (embedded sidecar) + v=202608190002.
This commit is contained in:
@@ -11909,7 +11909,6 @@ const ExportModal = ({ open, onClose, exportSettings, setExportSettings, isExpor
|
||||
const boxRef = React.useRef(null);
|
||||
const deadRef = React.useRef(false);
|
||||
const screenRectRef = React.useRef(null);
|
||||
const shownRef = React.useRef(false);
|
||||
const [dead, setDead] = React.useState(false);
|
||||
const post = (payload) => { try { fetch(url + '/input', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }).catch(() => {}); } catch (e) {} };
|
||||
React.useEffect(() => {
|
||||
@@ -11936,10 +11935,10 @@ const ExportModal = ({ open, onClose, exportSettings, setExportSettings, isExpor
|
||||
let alive = true;
|
||||
const maybeShow = () => {
|
||||
const r = screenRectRef.current;
|
||||
if (!shownRef.current && r && r.w >= 4 && r.h >= 4) {
|
||||
shownRef.current = true;
|
||||
// Show the native window anchored over the panel (bridge stays
|
||||
// alive; hidden again by /hide on unmount).
|
||||
if (r && r.w >= 4 && r.h >= 4) {
|
||||
// Re-POST /show on every refresh (~500ms) so the native window
|
||||
// re-anchors over the panel on scroll/drag/resize. Idempotent: the
|
||||
// bridge skips SetWindowPos/resize when nothing moved.
|
||||
try { fetch(url + '/show', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ rect: r }) }).catch(() => {}); } catch (e) {}
|
||||
}
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user