feat(desktop): contexto visual no chat flutuante e captura sem fantasma - #14
Merged
Conversation
…e magnetico Leva a selecao de contexto do chat do painel para o chat flutuante, com o mesmo seletor nativo de janelas e telas listado pelo Rust. O gatilho e o chip do anexo viraram componentes compartilhados para as duas telas nao divergirem. O recorte magnetico estava quebrado em quatro frentes: - Escala: o overlay misturava pixels fisicos (Rust) com pixels CSS (webview), entao a imagem aparecia ampliada e cortada em monitor com DPI != 100% e a selecao caia na regiao errada. A conversao agora sai da medida real do palco, via ResizeObserver -- medir uma vez so pegava o tamanho anterior, porque a janela e redimensionada antes de o webview acompanhar. - Magnetismo: consultava ElementFromPoint a cada movimento do mouse com o proprio overlay na frente de tudo, logo respondia sempre "o overlay" e nunca distinguia janela nem monitor. O Rust passa a enumerar os retangulos antes de o overlay subir (EnumWindows, sem as nossas janelas, ignorando cloaked e tool windows, usando o frame estendido do DWM) e o hit-test e local. Mesma estrategia do WindowsRectangleList do ShareX. - Peso: o frame congelado (~15 MB crus) atravessava o barramento de eventos em base64, duas vezes -- na abertura e de novo na confirmacao. Isso deixava a captura lenta e travava o emit do resultado, e como o closeCaptureOverlay vinha logo abaixo, o overlay nao fechava e a janela nunca voltava. Agora o frame fica no Rust, so a regiao trafega e o recorte vem pronto por IPC binario. O overlay deixou de desenhar o frame: mostra a tela ao vivo escurecida, como a Ferramenta de Captura do Windows. - Fantasma: esconder a janela pelo front nao esperava o compositor, entao ela entrava na propria captura. Esconder, aguardar e congelar agora acontece todo no Rust, em ordem, e cobre tambem a pilula flutuante durante captura no painel. Enter sem selecao captura a tela inteira, em vez de nao fazer nada e deixar o usuario preso com a tela tomada pelo overlay. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Usa WDA_EXCLUDEFROMCAPTURE para tirar as janelas do Linvo da superficie que o BitBlt le, e deixa o restore com capture_overlay_region depois da captura. Fechar o overlay no confirm com restore imediato devolvia o chat a tempo de ele sair dentro do proprio print. Co-authored-by: Cursor <cursoragent@cursor.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_8e1f6809-1204-4801-9626-c6f097c87f78) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
WDA_EXCLUDEFROMCAPTUREe move o restore das janelas para depois decapture_overlay_region, para o chat nao reaparecer dentro da propria captura.Test plan
pnpm --filter @linvo/desktop test -- src/CaptureOverlayApp.test.tsx src/hooks/use-display-snapshot.test.tsxMade with Cursor