+
putty+Direct2D+DirectWrite
D2D/DW PuTTY
2023/12/20
D2D/DW PuTTY

GDI バージョンのテキストレンダリングエンジンを Direct2D/DirectWrite へ変更した、アンチエイリアスとか半透明とかの単語に反応する人向け永遠のベータテスト準備中バージョン PuTTY です。

D2D/DW によって、 垂直方向へのアンチエイリアスや自然なポジショニングなど、 より高品質のテキストレンダリングが可能になります。 また、文字やウインドウの半透明を柔軟に適用することもできます。

D2D/DW PuTTY は、 Direct2D/DirectWrite をサポートした Windows 7/10 と GPU 上で動作します。 エラーチェックや例外の処理が酷く省略されているため、 動いている間は動いていますが、動かなくなると動かなくなります。 Consolas と Meiryo フォントで、 英語ときどき日本語なユーザーが支障なく使えることを当面の目標としていますが、 理想のレンダリングは遙かに遠いです。

D2D/DW PuTTY

ダウンロード
DOWNLOAD
ダウンロード

2023/12/20 版 putty-d2ddw-20231220.zip

2023/08/29 版 putty-d2ddw-20230829.zip

2023/03/26 版 putty-d2ddw-20230326.zip

2023/12/20 修正内容
  • 背景の透明度の描画不具合を修正
2023/12/19, 2023/08/29 修正内容
  • GDI PuTTY の 2023/12/19, 2023/08/29 版の修正をマージ
2023/03/26 修正内容
  • カラーフォントに簡易対応。AltFont に Segoe UI Emoji か Noto Color Emoji を指定して、色つき絵文字を表示することを想定しています。カラーフォントは内部的なフォーマットが多種ありますが、Windows 的に TrueType か SVG として取得できるものしか対応していません。また、現在の D2DDW PuTTY の手抜き font metric 処理では Segoe UI Emoji が縦長に表示されてしまうため、そこだけ dirty hack していて、逆に表示がおかしくなっている文字があるかもしれません。Emoji Modifier 系は、おそらく正常に処理できません。
インストール
INSTALL
インストール

適当なディレクトリに putty.exe を (64 ビット版を使う場合は \x64\putty.exe を) コピーしてください。 設定をレジストリではなくファイルに保存する場合は(強く推奨)、 \ini\putty.ini を putty.exe と同じ場所にコピーしてください。 日本語化する場合は、 \ja-JP\putty.lng を、同様にコピーしてください。

puttygen.exe その他の関連ファイルが必要であれば、 GDI PuTTY もしくは PuTTYjp をご利用ください。

特徴
FEATURES
特徴
×
背景設定
Border

GDI 版とほぼ同様に、背景の効果・壁紙・透明度を設定できます。違いは、

  • Effect: Double Glass がありません。
  • Wallpaper: Desktop がありません。
  • 壁紙画像として、*.png や *.jpg などの形式のファイルも扱えます。
  • 背景だけでなく、文字や文字の背景の透明度も指定できます。
  • 枠のスタイルを選択できます。

枠のスタイルは、Effect: Glass 時にのみ有効な設定です。 Window -> Appearance -> Border Style で、以下の 3 つから選択してください。

  • Normal - 普通のウィンドウ枠
  • Square - フラットで四角い枠
  • Rounded - フラットで丸い枠

Normal Square Rounded

透明度は、文字と文字の背景にも設定可能です。 文字の背景とは、たとえば emacs のモード行のように、 デフォルトと違った色を持つ文字の背景のことです。

Transparency
×
アンチエイリアス
AntiAlias

GDI PuTTY 同様に、Default(環境に適した自動設定)、 Non-Antialiasing(アンチエイリアスなし)、 Greyscale(白黒のアンチエイリアス)、 ClearType(液晶ディスプレイの RGB サブピクセルを使ったアンチエイリアス) の中から選択できます。

アンチエイリアスと下記レンダリングモードの組み合わせで、 最終的な描画品質が決まります。

×
レンダリング
Rendering

Direct2D/DirectWrite では、 アンチエイリアス時のレンダリングモードを選択できます。

Default(環境に適した自動設定)、 GDI Natural(より自然な bi-level 配置)、 GDI Classic(bi-level 配置)、 Natural(サブピクセル配置)、 Symmetric(サブピクセル配置+縦方向アンチエイリアス)、 Outline(おそらくヒンティングなしの描画。違うかも。 Cleartype との組み合わせは無効で、Default 扱いになります) が、選べます。

NoAntiAliasing GDI Natural Symmetric Outline

一般に、 フォントサイズの大きなところでは Symmetric が最も綺麗な結果を得られますが、 16px 以下では GDI 系のほうが視認性が高いかもしれません。 液晶ディスプレイの dpi やウインドウの背景色といった外的要因と、 ビットマップフォント経験の長さや個人の美的感覚など主観的要因とで 美しさの基準は様々に変わるため、一概にどのモードが良いとは言い切れません。

より技術的な詳細は DWRITE_RENDERING_MODE を参照してください。

×
コントラスト等
Enhanced Contrast

アンチエイリアス時の描画パラメーターとして、 文字のコントラストと ClearType レベルを設定できます。 いずれの数値もデフォルトは 50% が標準的ですが、環境に依存します。

Gamma は文字のガンマ値で、1000 ~ 3000 程度の数値を指定してください。 指定した数字を 1000 で割った値になります。 画像は、左右それぞれ 1 と 9999 を指定した場合の極端な例です。

Gamma

Enhanced Contrast は文字の濃さで、0 ~ 100% の数値を指定してください。

ClearType Level は ClearType 時のサブピクセルの使用率で、 0 ~ 100% の数値を指定してください。 0% で Greyscale と同等になり、100% でフルにサブピクセルを使います。 画像は、左右それぞれ 0 と 100 を指定した例です。

ClearType Level

×
全角フォント
FULLWIDTH

通常のフォント指定とは別に、 全角(Fullwidth)文字用のフォントを指定することができます。 設定は Window -> Font から。

たとえば通常フォントに Consolas を選択すると、 Consolas は日本語の全角フォントを持たないため、 日本語が豆腐? になってしまいます。 以前の D2D/DW 版では、 Windows の font link 機構により自動的に Meiryo で代替されていましたが、 現在の描画ルーチンは font link が無効になっているため、 この全角フォント指定が事実上必須となっています。

なお、現在のバージョンでは、全角フォントのサイズ指定は無視され、 自動的に通常フォントのものに揃えられます。

×
行間
LineGap

Window -> Appearance から、Line Gap を数値指定することができます。 ここで指定した数値のピクセル数だけ、行と行の間隔が拡がります。 負数を指定すると、逆に縮まります。

Line Gap

×
ベースライン
BaseLine

通常フォントと全角フォントのメトリックの相違から、 ベースラインが揃わないことがあります。

Baseline Mismatch

本来はフォントのメトリックから正確な描画位置を計算すべきですが、 さしあたって簡易的に対処する手段として、 Window -> Appearance から Baseline Offset を数値指定して調整できます。 半角と全角のそれぞれの文字について、ここで指定したピクセル数だけ、 ベースラインが上に移動します。負数を指定すると、逆に下に移動します。

×
フレームレート
FPS

GDI PuTTY はスクリーン上の変更のあった部分のみを再描画しますが、 現在の D2D/DW PuTTY では、 一部(カーソルや文字の点滅なども含む)でも変更があれば全ての文字を再描画します。 再描画の最大レート fps は Window -> Screen update rate で設定できます。

FPS を大きくするとカーソルの移動などで反応が良くなるように見えます。 GPU や CPU の処理能力が不足する環境では、 fps を下げたほうが負荷が小さくなります。 液晶ディスプレイのリフレッシュレートより大きな数値は意味がありません。

制限
RESTRICTIONS
制限
×
動作速度
Speed

Direct2D/DirectWrite は、 高性能な GPU による高速なレンダリングを実現する技術ですが、 そもそも GDI PuTTY ではレンダリングの負荷が小さいことや、 充分に高性能な GPU が必ずしも一般的ではないことから、 D2D/DW PuTTY が GDI PuTTY よりも低負荷で高速であるとは限りません。

現在のバージョンでは、 スクリーンの一部に変更があった場合にも全ての文字を書き直すため、 スクリーンサイズが大きいと速度低下が感じられるかもしれません。 また、レンダリングモードによっては非常に重くなることがあります。

×
使用可能フォント
Font

(ビットマップ埋め込みを含む) TrueType/OpenType 形式のフォントのみサポートしています。 フォント選択ダイアログが D2D/DW に未対応のため、 *.fnt や *.fon 形式のビットマップフォントも選択できてしまいますが、 PuTTY が異常終了するかもしれません。 修復には putty.ini を直接編集して、 フォント指定を Font="Consolas" などに変更してください。

×
半透明
Transparency

アンチエイリアスやレンダリングの設定によっては、 カラー #000000 のテキストが Foreground Alpha の設定に関係なく Alpha 0 の透明で描画されて見えなくなることがあります。 アンチエイリアス設定を greyscale にすると回避できるかもしれません。

妄想
TODO
妄想
  • ホットキーによる文字の拡大縮小
  • フォントメトリックを考慮した拡大縮小/平行移動マトリクス
  • シャドウやグロー、アウトライン等の装飾的な文字描画
  • vttest による互換性チェック
  • 字間の設定
  • GDI コードからの完全な脱却
  • TSF のサポート
  • 半透明スクロールバー
  • タブ化
  • 複数端末への入力キー一斉送信
  • アウトラインなアイコン
  • Wall Movie のサポート
ライセンス
LICENSE
ライセンス

PuTTY is copyrighted by Simon Tatham.

PuTTYjp is copyrighted by Hideki EIRAKU.

PuTTY ごった煮版 is copyrighted by 蛭子屋 双六.

reconnect patch is copyrighted by warp13.

Unless explicitly stated, PuTTY patch provided by this page is covered by the PuTTY License (see LICENCE file in zip).

改変履歴
HISTORY
改変履歴
2022/05/30 2021/07/19 2021/05/15 修正内容
  • GDI PuTTY の 2022/05/30 版の修正をマージ
  • GDI PuTTY の 2021/07/19 版の修正をマージ
  • GDI PuTTY の 2021/05/12 版の修正をマージ
  • まだ動作に微妙なところがあるかもしれません。むしろ、なぜ動作しているのか分からない。
2020/06/28 修正内容
  • GDI PuTTY の 2020/06/28 版の修正をマージ
  • バックグラウンドのスタイルが plain の場合、環境によっては半透明を指定してもそうならないバグがあるのは分かっているのですが、しばらく前から ID2D1HwndRenderTarget->Clear(D2D1::ColorF(0.0f, 0.0f, 0.0f, 0.0f)) が透明にならず、原因が分かりません。もともと direct2d のドキュメントがロクに存在しない時代に勘で作成したコードなので、まったく現代的ではなく、direct2d の仕様変更にも追随できておらず、一度ゼロから作り直さないとどうにもならないかもしれません…。
2019/10/01 2019/07/24 2019/03/21 2018/04/13 2017/07/11 2017/04/30 2017/02/21 212016/03/06 2015/11/09 2015/11/08 修正内容
  • GDI PuTTY の 2019/10/01 版の修正をマージ
  • GDI PuTTY の 2019/07/24 版の修正をマージ
  • GDI PuTTY の 2019/03/21 版の修正をマージ
  • GDI PuTTY の 2018/04/13 版の修正をマージ
  • GDI PuTTY の 2017/07/11 版の修正をマージ
  • GDI PuTTY の 2017/04/30 版の修正をマージ
  • GDI PuTTY の 2017/02/21 版の修正をマージ
  • GDI PuTTY の 2016/03/06 版の修正をマージ
  • GDI PuTTY の 2015/11/09 版の修正をマージ
2015/08/16 修正内容
  • GDI PuTTY の 2015/08/16 版の修正をマージ
  • Windows 10 で Aero Glass な Blur ありの半透明背景に、ひとまず対応。ただし Windows Vista/7 とは方法が違うため、まだいろいろと問題があります。また Windows 8 には対応しません。
2015/07/26 2015/02/28 修正内容
  • GDI PuTTY の 2015/07/26 版の修正をマージ
  • GDI PuTTY の 2015/02/28 版の修正をマージ
2015/01/09 修正内容
  • 高 dpi 環境で文字のサイズが不適切だったのを修正。津守さま、ありがとうございます。
  • GDI PuTTY の 2015/01/09 版の修正をマージ
2014/11/17, 2014/11/18 修正内容
  • GDI PuTTY の 2014/11/18 版の修正をマージ
  • GDI PuTTY の 2014/11/17 版の修正をマージ
2014/09/02, 2014/09/09, 2014/09/10, 2014/10/02 修正内容
  • GDI PuTTY の 2014/10/02 版の修正をマージ
  • GDI PuTTY の 2014/09/10 版の修正をマージ
  • GDI PuTTY の 2014/09/09 版の修正をマージ
  • GDI PuTTY の 2014/09/02 版の修正をマージ
2013/08/07 修正内容
  • GDI PuTTY の 2013/08/07 版の修正をマージ
2013/03/18 修正内容
  • 2012/10/05 のパッチが取り込まれていなかったのを修正
  • スクリーンのアンロック時にD2Dを初期化してみた
2013/03/06, 2013/03/04, 2013/03/01 修正内容
  • GDI PuTTY の修正をマージ
  • Windows 8 では、フォントレンダリングの Gamma 設定値が期待したように反映されていない (濃く描画される) ように見えるようです。デフォルトの 1800 を極端に小さい 1 などに変更すると、Windows 7 に似た結果が得られそうです。
2012/10/05
2012/04/30 追記
  • 「例外コード: c0000005」のため起動しない場合は、 Window -> Font から Use fallback font のチェックを外すか、 Arial Unicode MS 以外のフォントを指定してみてください。
2012/02/11 修正内容
  • GDI PuTTY の 2012/02/11 版の修正をマージ
  • GDI 版と同様の壁紙表示に対応。一部に機能しない設定の組み合わせがあります。GDI 版の "Double Glass" Effect や "Desktop" Wallpaper 設定が無いかわり、文字そのものの透過率や *.bmp 形式以外の画像ファイルに対応などの利点があります。
  • サロゲートペアと IVS の表示に対応。いい加減な実装なので、描画の正しくないケースがあるかもしれません。
  • フォールバック用フォントの設定を追加。通常フォントにグリフが存在しない場合、代替します。以前は暗黙に Arial Unicode MS を使っていましたが、Windows 8 TP では存在しないためにクラッシュしていました。
  • なお D2DDW 版のパッチは、GDI 版同様に VC++ でのみコンパイルを確認しています。未だにパッチの品質はテストコードそのままレベルです。
  • テキストの Gamma 設定を追加
2011/12/29 修正内容
  • GDI PuTTY の 2011/12/29 版の修正をマージ
2011/07/21 修正内容
  • 起動時のウィンドウ表示を改善
  • 文字コードによっては FULLWIDTH フォントが無効になっていたのを修正
  • 描画方法を完全に一新。 かなり無茶かつ強引な手法で描画していましたが、 最近の Windows 7 とビデオドライバでは妥当な方法が支障なく使えるようなので、 変更しました。これにより表示速度が大幅に (特に可変幅フォントで) 改善しました。 なお、文字の stretch オプションは現在のところ機能していません。 また、baseline offset は再調整の必要があるかもしれません。 その他、オプションや環境によっては不具合がありそうですので、 挙動がおかしいようであれば 2011/07/13 版を使ってみてください。
2011/12/29 修正内容
  • GDI PuTTY の 2011/12/29 版の修正をマージ
2011/07/21 修正内容
  • 起動時のウィンドウ表示を改善
  • 文字コードによっては FULLWIDTH フォントが無効になっていたのを修正
  • 描画方法を完全に一新。 かなり無茶かつ強引な手法で描画していましたが、 最近の Windows 7 とビデオドライバでは妥当な方法が支障なく使えるようなので、 変更しました。これにより表示速度が大幅に (特に可変幅フォントで) 改善しました。 なお、文字の stretch オプションは現在のところ機能していません。 また、baseline offset は再調整の必要があるかもしれません。 その他、オプションや環境によっては不具合がありそうですので、 挙動がおかしいようであれば 2011/07/13 版を使ってみてください。
2011/07/13 修正内容
  • GDI PuTTY の 2011/07/13 版の修正をマージ
2011/07/06 修正内容
  • GDI PuTTY の 2011/07/06 版の修正をマージ。これはxterm/bitmap 背景での不具合を修正するもので、未対応の D2D/DW 版では関係しないはずですが、もしかすると起動時の背景描画に改善があるかもしれません
2011/06/21 修正内容
  • 全角フォントを使用しない設定でクラッシュしていたのを修正
2011/06/11 修正内容
  • GDI PuTTY の 2011/06/11 版の修正をマージ
2011/06/02 修正内容
  • GDI PuTTY の 2011/06/02 版の修正をマージ
  • GDI PuTTY の 2011/06/01 版の修正をマージ
  • GDI PuTTY の 2011/05/30 版の修正をマージ。ベースのコードを 2011/05/20 頃の svn 9169 に変更したものですが、可変幅フォントには当初から対応済み。半角フォントとして可変幅のものを指定すると描画が微妙に遅くなるのは、現時点では仕様です。
2011/01/07 修正内容
  • GDI PuTTY の 2011/01/07 版の修正をマージ
  • 全角フォントの指定で正しく機能しないケースを修正
  • リサイズ時の描画崩れに対処する BugResize をデフォルトで有効に
2010/11/29 修正内容
  • ベースのコードを 2010/11/29 頃の svn 9020 に変更
2010/08/28 2010/08/02 2010/08/01 2010/07/13 2010/07/07 修正内容
  • GDI PuTTY の 2010/08/28 版の修正をマージ
  • GDI PuTTY の 2010/08/02 版の修正をマージ
  • GDI PuTTY の 2010/08/01 版の修正をマージ
  • GDI PuTTY の 2010/07/13 版の修正をマージ
  • GDI PuTTY の 2010/07/07 版の修正をマージ
2010/06/30 修正内容
  • ベースのコードを 2010/06/15 頃の svn 8965 に変更
  • リサイズ時の不具合に対応する BugReize=1 オプション追加
  • Aero Shake 後の再描画
  • 64ビット版の実行ファイルを同梱
2010/04/30 修正内容
  • 環境によってはクラッシュすることがあったのを修正
2010/04/26 修正内容
  • RTL 文字を GDI で描画していたのを修正
  • Anti-aliasing のパラメーターで Enhanced Contrast と ClearType Level を追加
2010/03/28 修正内容
  • 壊れていた文字コード設定を修正
  • 正しくないボールドとアンダーラインを修正
2010/03/21 修正内容
  • ベースのコードを 2007/04/29 の putty 0.60 から 2010/03/20 頃の svn 最新に変更
  • 幅の狭い文字の表示に、 横に引き伸ばすのではなく左右にスペースを詰める設定を追加
  • 全角用フォントの指定を可能に
2010/03/07 修正内容
  • ベースライン位置調節で半角と全角の取り違えを修正
  • IME 入力時のカーソル位置修正
  • 全画面拡大時等の背景塗り忘れ修正
2010/03/06 修正内容
  • 半角全角それぞれでベースライン位置調節を追加
  • 行間の設定を追加
  • カーソルが画面右下にあるときの枠色バグを修正
2010/02/20 修正内容
  • 初出。完成には程遠いですが、しばらく更新できなくなりそうなので、公開。