SSブログ

macOSのダークモードでステータスバーの文字を反転させたい [プログラミング]

mailpeeper-tlsでStatus barにアイコンを表示させて、それがdark modeでも大丈夫なようになりました。

http://mackuba.eu/2015/03/04/how-to-add-icons-to-menu-bar-on-yosemite/

ここはどこから情報を取ってきているのかわからないけど、きっちり解決したのでありがたかった。やっぱり英語ソースはわりと日本のよりか信頼性あるわ。


でも、メニューバーの右側のステータスバーと言われるところにも、文字列は突っ込むことができて、大体以下のようなソースで入れ込んであった。言い方が他人事なのは自分がインプリしたわけじゃないから。抜粋&改変してあるのでそのままどこかに入れ込んでも使えないかもしれない。
  NSStatusBar *statusBar = [NSStatusBar systemStatusBar];
  NSStatusItem *statusItem = [statusBar statusItemWithLength:NSSquareStatusItemLength];
  NSMutableAttributedString *attStr = [[[NSMutableAttributedString alloc] 
			initWithString:@"hoge"]] autorelease];
  [attStr addAttribute:NSForegroundColorAttributeName 
			value:[NSColor blackColor] range:NSMakeRange(0,[attStr length])];
  statusItem.highlightMode = YES;
  [statusItem setAttributedTitle:attStr];

こんな感じで書いてある。改変したところも大丈夫だと思うが、二つのソースをコンバインして作ったのでコンパイルかけてない。多分手直しすれば大体はいいだろうけど。

そんで、これではダークモードで文字列が沈み込む。NSColorは黒だけど、highlightColorとかにしてもダメだったし、hilightModeも入れてはみたものの入れ込む文字列に反応しなかった。黒いまんま。ステータスバーの他の日付とか、バッテリー残量数とか、文字なのに反転するから根本的にはできるはずなのだが…。

気持ちの悪いことに、クリックされて展開されるメニューに関してはきちんとダークモードに対応している。なんじゃこりゃw。とにかく、ステータスバー直の文字列の色を左右する設定がうまくいっていないことは確かだ。ん〜これもアイコンイメージのダークモードを解決する時みたいに面倒だな。どこかに書いていないだろうか。Xcodeのリファレンスって見難いし、サンプルコードがあまり載っていないんだよな。特にAPI周りは。

ステータスバーのオブジェクトを作って、そのアイテムを作って、そこに文字列を叩き込む、という具合なのは、アイコンイメージと同じだろう。さっきも言ったようにNSColor hilightModeはダメ。

あ…
NSColor textColor
で通っちゃったw。きちんと反転するね。

具体的には
[attStr addAttribute:NSForegroundColorAttributeName
value:[NSColor textColor] range:NSMakeRange(0,[attStr length])];
としただけ。

あ〜あっけないなぁw。こういうの一番頭にくるというか気が抜ける。実装がドキュメントに反映されてないタイプ乗って試行錯誤するしかないから、やってる時は不安で終わったら終わったでこんなのに引っかかってたんだと思ってしまう。

まぁなんにしても解決したのでいいや。mailpeeper-tlsぼちぼち新バージョンリリースします。三週間ぐらいかかっちゃったね。とりあえず、gitをcommitして、githubには上げておこう。ん〜きちんとメールアイコンを作ってからのほうがいいかな。しかし、今回は少し勉強になったな〜。というか、もうObjective-C触りたくないんですけどw。

コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0