現(xiàn)已將更多軟件的最新解決方案整理至 Github:wspl/mactype-hack,以下教程方法在新版本中已失效!
很多使用 Atom / Visual Studio Code 的朋友會(huì)發(fā)現(xiàn) MacType 無法正常地渲染,其原因和 Chrome 37+ 失去渲染功能一樣,是因?yàn)?Chromium 默認(rèn)開啟了 DirectWrite 字體渲染功能,所以就造成了 MacType 失效的后果。
通過谷歌參閱了很多資料,Github 上全都是推薦用開啟 CSS3 抗鋸齒的方法,但是我嘗試后效果并不明顯。還有一種辦法就是 Clone 一份源碼主動(dòng)修改 Flags 的設(shè)置,然后重新編譯,我覺得太麻煩就先不考慮這種做法了。返回搜索結(jié)果,有一篇日語的搜索結(jié)果吸引了我的注意:
原文如下:(地址 http://silight.hatenablog.jp/entry/2015/07/02/001518 )
2015年6月26日に1.0.0が公開されたAtom Editorですが、WindowsではDirectWriteがデフォルトで有効になっており、MacTypeなどのgdi++系ソフトとの相性が良くありません。
一応DirectWriteを無効にする方法があるのでここに書いておきます。
Atom Editorは終了しておきます。
「app.asar」をバイナリエディタ(Stirlingがオススメ)で開きます。
場(chǎng)所はC:\Users\(ユーザー名)\AppData\Local\atom\app-1.0.0\resources\app.asar
「'direct-write': true,」で検索し、「'direct-write':false,」に書き換えます。
trueの前の半角スペースは無くてもいいので、半角スペース+trueをfalseに書き換えます。
殘念なことに、app.asarファイルはバージョンアップで更新されるので、バージョンアップの度に毎回やらなければいけません。
一応Atom Editorのソースコードを(Electronも含めて)読みましたが、現(xiàn)時(shí)點(diǎn)ではこれ以外に方法は無さそうです。
翻譯后,大概是這樣的流程(Atom 的解決方案):
- 下載一個(gè) 16進(jìn)制編輯器,原文推薦 Stirling 但是我沒有搜索到,所以我就用了 UltraEdit。
- 用 16進(jìn)制編輯器 打開 Atom 安裝目錄下的
/app-1.0.3/resources/app.asar
(版本號(hào)自己替換),如果顯示的是一堆16進(jìn)制文本,請(qǐng)按快捷鍵Ctrl+H
切換至字符串編輯模式。 - 搜索
'direct-write': true,
,修改為'direct-write':false,
,其中,false
與:
冒號(hào)之間不能留有空格,要保持字符數(shù)目一樣,不然會(huì)導(dǎo)致 Atom無法啟動(dòng)。
(具體原因我也不確定,以前用不同長(zhǎng)度的字符串 Hex 替換過 Java 的 Class 文件并沒有出現(xiàn)過類似的問題,可能是因?yàn)橛蓄愃?Java 的 META-INF 的完整性檢驗(yàn)機(jī)制吧)。
之后就可以啟動(dòng) Atom,會(huì)發(fā)現(xiàn) MacType 已經(jīng)生效了,效果如下:
以下是 VSCode 舊版本的解決方案,新版本請(qǐng)參考文章開頭的 Github 倉庫地址。
然而 Visual Studio Code 就更簡(jiǎn)單了,連 16進(jìn)制編輯器 都不用了!
- 退出 Visual Studio Code
- 用合適的代碼編輯器(VSCode 自己也可以 _(:з」∠)_)打開 VSCode 安裝目錄下的
/app-0.5.0/resources/app/window.js
,找到TicinoWindow
這個(gè)函數(shù),其中有個(gè)叫options
的變量。我們只需要在這個(gè) Object 類型變量的根節(jié)點(diǎn)加上:
'web-preferences': {
'direct-write': false
}
修改后這個(gè)變量的效果就像這樣子(縮進(jìn)我也懶得刪了/ω\):
var options = {
width: this.windowState.width,
height: this.windowState.height,
x: typeof this.windowState.x === 'number' ? this.windowState.x : undefined,
y: typeof this.windowState.x === 'number' ? this.windowState.y : undefined,
'min-width': 200,
'min-height': 80,
show: showDirectly,
title: env.appNameLong,
'web-preferences': {
'direct-write': false
}
};
然后保存退出,啟動(dòng) Visual Studio Code,MacType 可以正常渲染了,效果和 Atom 的一樣。