Glfw: Ignorar eventos de mouse / transparente para entradas / desativar teste de clique

Criado em 20 mar. 2018  ·  3Comentários  ·  Fonte: glfw/glfw

Olá,

Usando uma linha de assunto longa porque não sei qual é a terminologia de plataforma cruzada mais apropriada e as pessoas podem pesquisar isso com nomes diferentes

Esta é uma solicitação de recurso para uma dica de janela, vamos chamá-la provisoriamente de GLFW_MOUSE_PASSTHRU (nomenclatura exata a ser determinada). Estou usando como parte do mesmo trabalho que mencionei em # 1166 (GIF no final deste post).

(Observe, isso não está relacionado à transparência do ponto de vista visual, já discutido muitas vezes aqui: https://github.com/glfw/glfw/issues?utf8=%E2%9C%93&q=transparent)


janelas
O manipulador WndProc faria:

if (msg == WM_NCHITTEST)
    return HTTRANSPARENT;

Mac
Acho que podemos usar a propriedade 'ignoresMouseEvents' de 'NSWindow' (não testado)
https://developer.apple.com/documentation/appkit/nswindow/1419354-ignoresmouseevents?language=objc

Um valor booleano que indica se a janela é transparente aos eventos do mouse.

Wayland
Possivelmente 'wl_surface :: set_input_region' (não testado)
https://wayland.freedesktop.org/docs/html/apa.html#protocol -spec-wl_surface

Os eventos de entrada que acontecem fora desta região tentarão a próxima superfície na pilha de superfície do servidor. O compositor ignora as partes da região de entrada que ficam fora da superfície. [...] O valor inicial para uma região de entrada é infinito. Isso significa que toda a superfície aceitará entrada. A configuração da região de entrada pendente tem semântica de cópia e o objeto wl_region pode ser destruído imediatamente. Um NULL wl_region faz com que a região de entrada seja definida como infinita.

X11
Não tenho certeza de como o X11 funciona. Para referência, Qt usa xcb_xfixes_create_region() + xcb_xfixes_set_window_shape_region_checked :
https://git.merproject.org/mer-core/qtbase/blob/master/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp#L1151


Contexto (gif): Estou arrastando uma janela glfw (que está bem abaixo do cursor do mouse) e preciso detectar a janela abaixo para poder soltar nela. Da mesma forma que # 1166, posso fornecer uma aproximação aproximada (mas utilizável) no lado do cliente usando o tamanho / posição da área de trabalho de todas as minhas janelas, mas é claro que isso contornaria o gerenciador de janelas e ignoraria a ordem z apropriada das janelas (incluindo janelas de aplicação externa).

EDIT Para esclarecer, no momento estou testando isso usando o código específico do win32 e instalando um gancho WndProc.

viewport_20180318


A nomenclatura e meu caso de uso são um pouco complicados porque eu alterno esse recurso em uma janela GLFW existente e agora ainda recebo a posição do mouse capturada atualmente para essa janela, que é ideal e desejável em meu caso de uso, e acho que mais flexível. É por isso que não sugeri um nome como GLFW_IGNORE_MOUSE_INPUTS , porque CursorPosCallback e glfwGetCursorPos () ainda funcionam bem.

Obrigado pela sua consideração,
Omar

Wayland Windows X11 enhancement macOS

Comentários muito úteis

Este recurso foi adicionado como GLFW_MOUSE_PASSTHROUGH com # 1568 por @rokups e será incluído no 3.4.

Todos 3 comentários

Olá,
Existe alguma palavra sobre isso? Acho a ideia ótima e adoraria vê-la no GLFW.

gostaria de ver algo assim também, tendo o problema de que preciso criar uma sobreposição acima de alguma outra janela do aplicativo no Linux, mas ainda quero clicar nas coisas atrás da sobreposição

Este recurso foi adicionado como GLFW_MOUSE_PASSTHROUGH com # 1568 por @rokups e será incluído no 3.4.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Itanq picture Itanq  ·  5Comentários

opengl-tutorial picture opengl-tutorial  ·  3Comentários

elmindreda picture elmindreda  ·  4Comentários

GraemeWilde picture GraemeWilde  ·  3Comentários

leo150 picture leo150  ·  4Comentários