Question

Je développe une application basée sur des documents pour Mac OS X. C'est une sorte de lecteur multimédia, mais au lieu de lire des fichiers audio ou vidéo, il est censé ouvrir des fichiers texte contenant des méta-données spécifiant des animations OpenGL. Je voudrais imiter le style de fenêtre Apples QuickTime X. Cela signifie que je dois faire tous les dessins de fenêtre moi-même, car Cocoa n'a pas de style de fenêtre approprié.

Il y a une chose qui me donne des maux de tête: les coins arrondis se trouvent généralement sur les fenêtres Mac OS X. J'ai essayé d'utiliser le masque de fenêtre sans bordure et de travailler un peu de magie CGS - il existe des en-têtes Apple privés qui permettent la mise en forme de la fenêtre, mais ils ne sont bien sûr pas documentés. J'ai pu percer des trous rectangulaires dans les bords de mes fenêtres, mais je ne pouvais pas comprendre comment Apple réalise des coins arrondis.

Créer une fenêtre transparente et dessiner le cadre moi-même ne fonctionne pas, car une fenêtre OpenGL est toujours rectangulaire, et la seule façon de la modifier est d'activer NSOpenGLCPSurfaceOpacity pour la transparence alpha et d'utiliser le tampon de pochoir ou les shaders pour découper le bords, ce qui semble être une sacrée surcharge.

Si je mets un OpenGLView dans une fenêtre Cocoa standard avec une barre de titre, les bords inférieurs sont arrondis. Il semble que cela se passe au stade NSThemeFrame de la hiérarchie des vues. Avez-vous des idées sur la façon de procéder?

Était-ce utile?

La solution 2

Puisque la suggestion de Robs n'a pas fonctionné et que personne d'autre n'a contribué à la discussion, j'ai décidé d'utiliser le tampon de pochoir pour recadrer les coins des fenêtres.Je l'ai fait en créant une texture à partir de l'arrière-plan de la fenêtre et en la rendant dans le tampon du pochoir, en supprimant tous les pixels transparents.Ça a l'air bien, mais c'est lent lors du redimensionnement de la fenêtre: /

Autres conseils

Utilisez une vue adossée à un calque et faites votre dessin dans le CALayer sur une fenêtre invisible.Les calques incluent la gestion automatique des coins arrondis et des bordures.


L'arrière-plan de CALayer se trouve dans le Guide de programmation d'animation de base .Pour créer une couche pour NSView, vous devez appeler [view setWantsLayer:YES].Vous créeriez un CAOpenGLLayer et l'assignez à la vue en utilisant setLayer:.

Voir CALayerEssentials pour un exemple de code montrant commentpour utiliser CAOpenGLLayer parmi d'autres types de calques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top