Domanda

Sto sviluppando un'applicazione basata su documenti per Mac OS X. È una sorta di lettore multimediale, ma invece di riprodurre file audio o video, si suppone di aprire file di testo contenenti metadati che specificano le animazioni OpenGL. Vorrei imitare le mele QuickTime X Window Style. Ciò significa che devo fare tutti i disegni della finestra da solo, perché il cacao non ha uno stile di finestra appropriato.

C'è una cosa che mi dà mal di testa: gli angoli arrotondati di solito si trovano su Mac OS X Windows. Ho provato a usare la maschera per finestre senza bordi e lavorando un po 'di magia CGS - ci sono alcune intestazioni di mela private che consentono la modellatura della finestra, ma ovviamente non sono documentate. Sono stato in grado di tagliare i fori rettangolari nei bordi delle finestre, ma non riuscivo a capire come Apple raggiungesse gli angoli arrotondati.

La creazione di una finestra trasparente e il disegno della cornice non funziona, perché un vista OpenGL è sempre rettangolare e l'unico modo per cambiarla è attivare Nsopenglcpsurfaceopacity per la trasparenza alfa e usando il buffer di stencil o gli shaders per tagliare i bordi, che i bordi, che i bordi, che i bordi, che Sembra un sacco di grandi dimensioni.

Se metto OpenGlView in una finestra di cacao standard con la barra del titolo, i bordi inferiori sono arrotondati. Sembra che questo stia accadendo nella fase di NsthemeFrame della gerarchia Visualizza. Qualche idea su come è fatto?

È stato utile?

Soluzione 2

Dato che il suggerimento di Robs non ha funzionato e nessun altro ha contribuito alla discussione, ho deciso di usare il buffer di stencil per ritagliare gli angoli delle finestre. L'ho fatto creando una trama dallo sfondo di Windows e rendendola nel buffer dello stencil, scartando tutti i pixel trasparenti. Sembra a posto, ma è lento quando si ridimensiona la finestra:/

Altri suggerimenti

Usa una vista sostenuta dal livello e fai il tuo disegno in CALayer su una finestra invisibile. Gli strati includono la gestione automatica di angoli e bordi arrotondati.


Sfondo per CALayer è nel Guida alla programmazione dell'animazione principale. Per creare un livello per NSView, devi chiamare [view setWantsLayer:YES]. Creeresti un CAOpenGLLayer e assegnarlo alla vista usando setLayer:.

Vedere Calayeressentials per il codice di esempio che dimostra come utilizzare CAOpenGLLayer tra gli altri tipi di strato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top