Donnez à  une NSWindow un look "iTunes 9"

Bonjour,

Ayant souhaité me mettre à  la mode iTunes 9 pour la nouvelle version de Poker Manager, j'ai concocté une petite propriété qui vous permettra de donner à  vos fenêtre le dégradé de gris d'iTunes 9 en appelant tout simplement :

[myWindow setITunes9Style];

NSWindow+iTunes9.h
<br />@interface NSWindow (iTunes9)<br /><br />+ (NSColor*)iTunesBackgroundColor;<br />+ (NSColor*)iTunesBackgroundColorInactive;<br />- (void)setITunes9style; //nécessite de faire un appel à  [[NSNotificationCenter defaultCenter] removeObserver:theWindow] dans le dealloc<br /><br />@end<br />


NSWindow+iTunes9.m
#import &quot;NSWindow+iTunes9.m&quot;<br /><br /><br />@implementation NSWindow (iTunes9)<br /><br />+ (NSColor*)iTunesBackgroundColor<br />{<br />	NSImage *bg = [[NSImage alloc] initWithSize:NSMakeSize(10, 10000)];<br />	[bg lockFocus];<br /><br />	<br />	NSColor *grayBlue = [NSColor colorWithCalibratedRed:155.0/255.0 green:157.0/255.0 blue:161.0/255.0 alpha:1.0];<br />	NSColor *lighterGrayBlue = [NSColor colorWithCalibratedRed:192.0/255.0 green:194.0/255.0 blue:195.0/255.0 alpha:1.0];<br />	NSColor *darkerGrayBlue =&nbsp; [NSColor colorWithCalibratedRed:135.0/255.0 green:137.0/255.0 blue:141.0/255.0 alpha:1.0];<br />	[darkerGrayBlue set];<br />	[[NSBezierPath bezierPathWithRect:NSMakeRect(0,0, 10, 10000)] fill];<br />	<br />	NSGradient *gradient = [[NSGradient alloc] initWithColors:[NSArray arrayWithObjects:<br />															&nbsp;  [NSColor colorWithCalibratedWhite:230.0/255.0 alpha:1.0],<br />															&nbsp;  lighterGrayBlue,<br />															&nbsp;  grayBlue, <br />															&nbsp;  darkerGrayBlue,nil]];<br />	[gradient drawInRect:NSMakeRect(0, 10000-100, 10, 100) angle:-90];<br />	<br />	<br />	[bg unlockFocus];<br />	<br />	NSColor *color = [NSColor colorWithPatternImage:bg];<br />	<br />	[gradient release];<br />	[bg release];<br />	<br />	return color;<br />}<br /><br />+ (NSColor*)iTunesBackgroundColorInactive<br />{<br />	NSImage *bg = [[NSImage alloc] initWithSize:NSMakeSize(10, 10000)];<br />	[bg lockFocus];<br />	<br />	NSColor *gray = [NSColor colorWithCalibratedWhite:0.75 alpha:1.0];<br />	[gray set];<br />	[[NSBezierPath bezierPathWithRect:NSMakeRect(0,0, 10, 10000)] fill];<br />	<br />	NSGradient *gradient = [[NSGradient alloc] initWithColors:[NSArray arrayWithObjects:<br />															&nbsp;  [NSColor colorWithCalibratedWhite:230.0/255.0 alpha:1.0],<br />															&nbsp;  gray, nil]];<br />	<br />	[gradient drawInRect:NSMakeRect(0, 10000-70, 10, 70) angle:-90];<br />	<br />	<br />	[bg unlockFocus];<br />	<br />	NSColor *color = [NSColor colorWithPatternImage:bg];<br />	<br />	[gradient release];<br />	[bg release];<br />	<br />	return color;<br />}<br /><br />- (void)setITunes9style<br />{<br /><br />	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidBecomeMain:) name:NSWindowDidBecomeMainNotification object:self];<br />	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResignMain:) name:NSWindowDidResignMainNotification object:self];<br />	<br />	[self setBackgroundColor:[NSWindow iTunesBackgroundColor]];<br /><br />	<br />}<br /><br />- (void)windowDidBecomeMain:(NSNotification *)notification {<br />	<br />	[self setBackgroundColor:[NSWindow iTunesBackgroundColor]];<br />	<br />}<br /><br /><br />- (void)windowDidResignMain:(NSNotification *)notification {<br />	<br />	[self setBackgroundColor:[NSWindow iTunesBackgroundColorInactive]];<br />}<br /><br /><br /><br />@end<br />



Et voilà   ce qu'on peut obtenir en fignolant les détails du reste de l'interface :
iTunes9NSWindow.png

;)

Réponses

  • muqaddarmuqaddar Administrateur
    05:31 modifié #2
    Super !

    Tiens, dis-moi comment fais-tu pour avoir de belles icones ?
    Tu les achètes ? Tu fais appel à  un graphiste ? Ou toi-même ?
  • Nebuchad34Nebuchad34 Membre
    05:31 modifié #3
    Je fais tout moi-même comme un grand.
    Je suis content que tu les trouves belles, parce que je sais pas trop quoi en penser moi-même, je manque de recul. Mais tu es quand même la deuxième personne à  me le dire, alors ça flatte mon égo  :)
  • muqaddarmuqaddar Administrateur
    05:31 modifié #4
    Bravo alors. Je fonctionne un peu de la même manière.
    D'une façon plus générale, je trouve ton travail propre et clair, ce qu'on demande à  une appli développée pour Mac OS X mais que l'on ne retrouve pas toujours sur l'iPhone...
  • Nebuchad34Nebuchad34 Membre
    novembre 2009 modifié #5
    Bien, bien, ma quête vers iTunes 9 continue, j'ai arrangé mes tableview headers, mes ascenseurs, et mes boutons de la barre du bas pour pousser la cohérence avec iTunes :

    PokerManageriTunes9style.png

    iTunes9bottomBar.png

    En espérant qu'apple ne change pas encore le look d'iTunes dans la prochaine version. C'est n'est pas toujours évident de suivre, bien que la nouvelle tendance me plaise bien.

  • muqaddarmuqaddar Administrateur
    05:31 modifié #6
    iTunes est devenu un laboratoire d'UI pour Apple depuis quelques années. Attends-toi à  ce que ça bouge dans iTunes 10.0.

    Dommage qu'on ait encore les ascenseurs bleus de Mac OS 10.0 dans 10.6... Ceux di'Tunes me plaisent beaucoup plus.
  • Nebuchad34Nebuchad34 Membre
    05:31 modifié #7
    Il est certain que les ascenseurs et boutons Aqua commencent sérieusement à  faire tâche.

    J'aurais pensé qu'ils en change discrètement avec 10.6, mais non, surement 10.7 !
  • sisopetronsisopetron Membre
    05:31 modifié #8
    Bonsoir,

    Ton code m'intéresse bcp.  Mais étant débutant, je n'arrive évidemment  :( pas à  l'utiliser.

    Tout d'abord, dans ton NSWindow+iTunes9.m, je suppose qu'il faut lire #import "NSWindow+iTunes9.h" et non #import "NSWindow+iTunes9.m".

    Ensuite, j'ai malheureusement un warning sur [window setITunes9Style]; qui dit : 'NSWindow' may not respond to '-setiTunes9Style'.  J'ai pourtant importé le header de la classe NSWindow+iTunes9.

    Qu'ai-je fait de mal ?

    Didier
  • zoczoc Membre
    05:31 modifié #9
    dans 1274725528:

    'NSWindow' may not respond to '-setiTunes9Style'.  J'ai pourtant importé le header de la classe NSWindow+iTunes9.

    Qu'ai-je fait de mal ?

    Si tu as pris tel quel le code cité, c'est setiTunes9style, pas setiTunes9Style ;)

  • sisopetronsisopetron Membre
    05:31 modifié #10
    Rhooo, merci Zoc, je n'ai pas pensé à  vérifier la casse.  Il faut vraiment penser à  tout dans cocoa !  :P

    A+
  • Nebuchad34Nebuchad34 Membre
    05:31 modifié #11
    Cela dit, en toute logique, ce devrait être un S majuscule, m'enfin bon  :D
Connectez-vous ou Inscrivez-vous pour répondre.