J'ai plusieurs Windows X imbriqués - disons - une fenêtre déroulante dans une fenêtre déroulante (voir l'exemple ci-dessous). Dans ce cas, la fenêtre principale contient (au moins) les barres de défilement principales et la zone de dessin (principale) qu'elles contrôlent. Cette zone de dessin contient à son tour (au moins) un lot de fenêtres défilant - une fenêtre principale (mineure) contenant une barre de défilement et une zone de dessin secondaire. Pendant le défilement en direct d'une zone de dessin interne, la procédure de rafraîchissement est endommagée, car j'utilise XCopyArea pour accélérer le processus et déplacer le contenu qui est valide et appeler la routine de rafraîchissement pour le contenu nouvellement apparu. Cela fonctionne correctement lorsque le lot de dessin interne est en lui-même, mais lorsqu'il est imbriqué dans un autre, un problème survient - lorsque le défilement interne est partiellement visible (la zone de dessin principale est défilée). dessin zone et jamais réellement redessiné, mais considéré comme tel. Lorsque XCopyArea obtient le rectangle suivant, il est vide. Finalement, cette zone vide apparaît sur le défilement interne partiellement visible et elle est vide. Sur le premier message redraw général ils sont corrigés. Si je peux obtenir le masque d'écrêtage pour ce qui est réellement visible depuis (ma) zone de dessin interne, je peux ajuster l'appel XCopyArea() et redessiner l'appel et surmonter le problème sans le plan "B" qui redessine tout le contenu chaque mouvement de barre de défilement. Exemple: Développer un plugin pour Mozilla Firefox et avoir besoin de déterminer la région qui décrit la zone visible de "ma" fenêtre, c'est-à-dire celle qui est passée depuis le système Mozilla en tant que plugin viewport.Comment déterminer la région visible d'un Windows dans X Windows/Linux?
Répondre
Si vous obtenez vraiment une fenêtre X, et non un widget d'une boîte à outils spécifique (comme GTK + peut-être?), Vous pouvez utiliser l'appel de fonction XGetWindowAttributes.
Ceci remplit une structure XWindowAttributes fournie, qui inclut des entiers pour les positions x et y de la fenêtre ainsi que sa largeur et hauteur et d'autres faits utiles. Mais en réalité je pense que vous utilisez probablement l'API du plugin Mozilla héritée de Netscape, alias NSAPI, et dans ce cas vous obtenez un appel à votre fonction NPP_SetWindow() au moins une fois (et encore si nécessaire parce que quelque chose changé) avec une structure qui contient les informations que vous recherchez. Essayez de regarder http://www.mozilla.org/projects/plugins/ pour plus d'informations sur les API que vous devriez utiliser.
Oui, il s'agit d'une fenêtre transmise à partir d'un appel NSAPI, mais utilisée dans un processus séparé (enfant) dans lequel le plugin fonctionne réellement. XGetWindowAttributes donne des informations mais pas si la fenêtre est couverte, ou - le plus important - défiler vers le bas et partiellement visible, ce dont j'ai besoin. – theJonan
C'est le système X Window ou juste X, pas "X Windows". – postfuturist