Attention! Translated article might be found on my English blog.

2015年8月23日日曜日

ディスプレイがHiDPIかどうかざっくり確認するコード

main.mを以下のように作成。
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

int main( int argc, char** argv ) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [[NSScreen screens] enumerateObjectsUsingBlock:^(NSScreen *screen, NSUInteger idx, BOOL *stop) {
        NSLog(@"%lu - backingScaleFactor:%lf", idx, [screen backingScaleFactor]);
    }];

    [pool release];
    return 0;

}
ビルドして実行。
$ gcc -Wall -std=c99 main.m -o ScaleFactors -framework Foundation -framework AppKit
$ ./ScaleFactors  
2015-08-23 16:47:08.594 ScaleFactors[16437:1688844] 0 - backingScaleFactor:2.000000
2015-08-23 16:47:08.595 ScaleFactors[16437:1688844] 1 - backingScaleFactor:1.000000

スクリーン0はMacBookPro Retinaモデルのディスプレイ、スクリーン1はUSBディスプレイです。
スクリーン0のbackingScaleFactorが2でHiDPIになっていることが確認できます。

システム環境設定のディスプレイ設定で"スペースを拡大"ってありますよね。

この設定だとHiDPIが無効になるのか確認したかったんですが、
どうやら有効のままのようでした。

なお、SwitchResXでHiDPIになってない項目を選ぶと、期待通りbackingScaleFactorが1になります。

参考: NSScreen Class Reference
参考: SwitchResX - The Most Versatile Tool For Controlling Screen Resolutions On Your Mac