现已将更多软件的最新解决方案整理至 Github:wspl/mactype-hack,以下教程方法在新版本中已失效!
很多使用 Atom / Visual Studio Code 的朋友会发现 MacType 无法正常地渲染,其原因和 Chrome 37+ 失去渲染功能一样,是因为 Chromium 默认开启了 DirectWrite 字体渲染功能,所以就造成了 MacType 失效的后果。
通过谷歌参阅了很多资料,Github 上全都是推荐用开启 CSS3 抗锯齿的方法,但是我尝试后效果并不明显。还有一种办法就是 Clone 一份源码主动修改 Flags 的设置,然后重新编译,我觉得太麻烦就先不考虑这种做法了。返回搜索结果,有一篇日语的搜索结果吸引了我的注意:
原文如下:(地址 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がオススメ)で開きます。
場所は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も含めて)読みましたが、現時点ではこれ以外に方法は無さそうです。
翻译后,大概是这样的流程(Atom 的解决方案):
- 下载一个 16进制编辑器,原文推荐 Stirling 但是我没有搜索到,所以我就用了 UltraEdit。
- 用 16进制编辑器 打开 Atom 安装目录下的
/app-1.0.3/resources/app.asar
(版本号自己替换),如果显示的是一堆16进制文本,请按快捷键Ctrl+H
切换至字符串编辑模式。 - 搜索
'direct-write': true,
,修改为'direct-write':false,
,其中,false
与:
冒号之间不能留有空格,要保持字符数目一样,不然会导致 Atom无法启动。
(具体原因我也不确定,以前用不同长度的字符串 Hex 替换过 Java 的 Class 文件并没有出现过类似的问题,可能是因为有类似 Java 的 META-INF 的完整性检验机制吧)。
之后就可以启动 Atom,会发现 MacType 已经生效了,效果如下:
以下是 VSCode 旧版本的解决方案,新版本请参考文章开头的 Github 仓库地址。
然而 Visual Studio Code 就更简单了,连 16进制编辑器 都不用了!
- 退出 Visual Studio Code
- 用合适的代码编辑器(VSCode 自己也可以 _(:з」∠)_)打开 VSCode 安装目录下的
/app-0.5.0/resources/app/window.js
,找到TicinoWindow
这个函数,其中有个叫options
的变量。我们只需要在这个 Object 类型变量的根节点加上:
'web-preferences': {
'direct-write': false
}
修改后这个变量的效果就像这样子(缩进我也懒得删了/ω\):
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
}
};
然后保存退出,启动 Visual Studio Code,MacType 可以正常渲染了,效果和 Atom 的一样。