2014-08-27 104 views
0

NSTextView中的豐富文本顯示在我的屏幕上(27「Mac),雖然它的打印正確,但比字體大小要小很多,並且如果粘貼到另一個應用程序(例如OpenOffice),它的大小正確。相同的行爲。 在awakeFromNib修復了這個或多或少與下面的代碼行。如何縮放NSTextView以顯示實際大小的富文本?

[myTextView scaleUnitSquareToSize:NSMakeSize(96.0/72, 96.0/72)]; 
myTextView.layoutManager.usesScreenFonts = NO; 

所以它看起來好像屏幕每英寸使用96點。如果我沒有二號線,文本顯然我不應該對比例因子進行硬編碼,但是我在哪裏可以找到放在那裏的因子呢?從[NSScreen mainScreen].deviceDescription(字典)我得到NSDeviceResolution = {72,72}「,所以它被輕微地壓扁了似乎這不是正在使用的。

回答

0

我不知道這是明智的,但你可以從顯示模式得到了「真正的」 DPI:

CGDirectDisplayID displayID = [window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue]; 
CGSize size = CGDisplayScreenSize(displayID); 
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(displayID); 
NSSize dpi; 
dpi.width = CGDisplayModeGetWidth(mode) * 25.4/size.width; 
dpi.height = CGDisplayModeGetHeight(mode) * 25.4/size.height; 
CGDisplayModeRelease(mode); 

[myTextView scaleUnitSquareToSize:NSMakeSize(dpi.width/72, dpi.height/72)]; 
myTextView.layoutManager.usesScreenFonts = NO; 

一些顯示模式是信箱。這些將可能永遠不會被用作Mac GUI的一般模式;他們只能用於全屏遊戲。但是,如果您希望應用處理這種模式,則應考慮到模式大小與一維中的全屏大小不符的事實,並且上面的DPI計算將關閉。我不認爲有一個直接的方法來解決這個問題。您必須檢查所有可用的顯示模式,以查看是否存在與當前模式相同的屬性(大小,像素編碼等),但其IOKit標誌指示它已被拉伸(CGDisplayModeGetIOFlags(mode) & kDisplayModeStretchedFlag != 0),而當前模式不是。在這種情況下,您可能想要假設像素是正方形,並選擇dpi.widthdpi.height中的較小者用於兩者。

+0

所以我們必須計算它! (順便說一下,unsignedIntValue的點符號不會爲我編譯。) – AlexT 2014-08-28 22:22:11

+0

修復了'-unsignedIntValue'的問題。謝謝。 – 2014-08-28 22:25:57

+0

不幸的是,我得到每英寸109個點的計算方式,109/72因素稍大。感謝您指點道路;我將開始閱讀核心圖形。 – AlexT 2014-08-28 22:29:21

相關問題