You must override the drawRect: method (inherited from NSView) if you want to customize the appearance of your NSBox objects. Depending on the visual effect you're trying to achieve, you may have to invokesuper's implementation first. For example, if you are compositing a small image in a corner of the box, you would invoke the superclass implementation first. If you're adding a new style of line, you would provide a way to store a request for this line type (such as a boolean instance variable and related accessor methods). Then, in drawRect:, if a request for this line type exists, you would draw the entire view yourself (that is, without calling super). Otherwise, you would invoke the superclass implementation.
Pour les dégragée utilise NSGradient.
Pour les lignes utilise NSBezierPath.
Pour le titre utilise drawAtPoint de NSAttributedString.
Oui, j'ai une version qui utilise tout ça, il y a juste... comment faire le bézier du "demi-rectangle arrondi"? Par exemple, la "barre de titre" est arrondie en haut mais plate en bas. On fait comment?
J'ai regardé vos exemples, tâtonné comme un idiot avec les coordonnées des arcs avant de me souvenir que le rayon d'un cercle est constant
Pour le gradient, c'est joli comme tout (j'ai failli dire simple... avant d'inverser les couleurs de départ et d'arrivée) et ça donne ceci pour l'instant. Je me rapproche du but, grâce à vous!
J'ai revu le gradient pour qu'il soit plus conforme, et détourné la propriété de NSBox titleLocation pour n'avoir qu'une classe, avec ou sans barre inférieure.
Les classes NSBezierPath et NSColor sont assez complètes et permettent de faire beaucoup de choses. A la rigueur tu complètes avec CoreImage si tu as besoin d'effets spéciaux (monochrome, filtres variés, effets, etc.), mais lis la doc de NSBezierPath, elle est bien faite.
Réponses
Pour les dégragée utilise NSGradient.
Pour les lignes utilise NSBezierPath.
Pour le titre utilise drawAtPoint de NSAttributedString.
Merci mpergand,
Oui, j'ai une version qui utilise tout ça, il y a juste... comment faire le bézier du "demi-rectangle arrondi"? Par exemple, la "barre de titre" est arrondie en haut mais plate en bas. On fait comment?
Le mieux AMHA serait de contruire un NSBezierPath en utilisant la fonction appendBezierPathWithArcFromPoint:toPoint:radius: pour les coins arrondis.
Cela peut être intéressant de télécharger la version démo de PaintCode. Cela permet d'apprendre pas mal de choses sur CoreGraphics.
Tu construis un path avec la méthode appendBezierPathWithArcFromPoint:toPoint:radius: pour les coins arrondis.
Matt Gemmel avait un box arrondi dans ce style,
voir ici http://mattgemmell.com/2005/11/02/roundedbox-nsbox-subclass/
Merci à vous trois !
J'ai regardé vos exemples, tâtonné comme un idiot avec les coordonnées des arcs avant de me souvenir que le rayon d'un cercle est constant
Pour le gradient, c'est joli comme tout (j'ai failli dire simple... avant d'inverser les couleurs de départ et d'arrivée) et ça donne ceci pour l'instant. Je me rapproche du but, grâce à vous!
Les classes NSBezierPath et NSColor sont assez complètes et permettent de faire beaucoup de choses. A la rigueur tu complètes avec CoreImage si tu as besoin d'effets spéciaux (monochrome, filtres variés, effets, etc.), mais lis la doc de NSBezierPath, elle est bien faite.
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40003290
Comment indiquer [Résolu] sur un sujet?
Selon mon souvenir, tu édites ton premier post avec option avancée (ou un truc dans le genre) et là tu met à jour ton titre.
Bonne mémoire, Kubernan! ça marche, merci!