/
最近
.rdf
追記
編集
設定
本棚
翌日へ
前日へ
脳log
[20120201]
2012年02月01日 (水)
[SakuraEditor] そういうファイルを正に作ろうとして気付くその存在に >> view/CTextDrawer_DWriteImp.cpp いつからあったん?調べると9か月前だった。9か月前の自分が作ったのと同じ名前のブランチを今日また作成し、9か月前の自分がすでに作ったファイルを今また作ろうとしていたところだった。何やってんの。■ところで、DispTextって文字の数だけ呼ばれるんだけど、こんなんを仮想関数にしても良いものだろうか。9か月前の自分はできるだけ長い GLYPH_RUNを対象にすることで回数を減らそうとしてたみたいだけど(ANSIビルドの ExtTextOutW_AnyBuildにある半角文字1024字制限に引っかかったりしてね)。■■■ @2012-02-02 文字は出た(サンプルコード切り貼りコーディング!……delete[]だけ追加しときました)。ひらがなのカーブのギザギザが消えて、もやっとしてるのが観察できる。GDIだと(※メモ帳と秀丸(HmDWriteオフ)でも同様)謎に縦横比が狂って縦長(半角サイズ)になる、Consolasとリンクしたメイリオの日本語文字も全角サイズで表示された。Consolas+メイリオだとグリフが表示されてなかった一部のUnicode記号も出た。あと最低限やることはフォントの変更についていくこと、なめらかな文字サイズ変更、特性の違うモニタへの書き分け(※でもマルチモニタの経験がない)、文字を書き込んだメモリ上のビットマップとエディタ領域の正しい合成(今はテキトーなサイズのビットマップのテキトーな領域をコピーしてるだけ)。ダイナミックローディングの優先度は最低(XPで実行しないし)。■■■テキストエディタにもタイピングゲームみたいな楽しみがあっていいと思うんだよね。削除した文字が砕け散るとか、貼り付けた文字が後ろの文字を押しのけるとか。インタラクションと打てば響くレスポンスが。■■■@2012-02-03 全角半角を、実際に文字を配置して判断してる部分がある。これは GDIだ。文字を DirectWriteで描いた場合、描画と判定が食い違うことがある。おかしな環境に限った話だと思うけど……。TODO:下線。斜体のオーバーハング。■■■DONE:下線, DPI-aware. TODO:斜体のオーバーハングと背景画像対応。画面内の文字の数に比例してカクついてる……。■ GDIだと描画がおかしくなる環境でしか積極的なメリットを見出しにくい
Consolas 48での比較画像
と
Consolas 14での比較画像
。
MS ゴシックだと
こっちはやらせかってぐらい明らかに違うけど(っていうか違うフォントだよね?※)、表示品質を気にする人は今更使ってないだろう(選択肢が豊富な英字等幅フォントにリンクされて表示されることはわりとあるかもね。日本語部分がMSゴシックになるときのがっかり感ときたら……)。※文字が1000分の100太いのは好みによる味付けです。gdippを使ってもほぼ同じ表示が得られてるのでフォントが違うってことはなかった。「
MS~系のフォントの場合は、サイズが16pt以下の場合、ビットマップフォントが使われるようです
」ということみたい。■DONE:
背景画像対応
。TODO:(背景画像なしのときの)斜体のオーバーハング。ノーマルのサクラは色の切り替わり部分を除いて切り落とさずに表示できてるんだけど。■■■@2012-02-05 Very Sleepyで DWriteCreateFactoryとして表される DWriteモジュール唯一のエントリから呼び出される memcpyで費やされる時間の合計が絶望的に長い。待ち時間の50%がこれ。DirectWriteを(効率的な)ハンコにするには DWriteTextLayoutをキャッシュしても駄目なのはわかっていて、GLYPH_RUNを再利用すべきなんだろうか、RenderTargetを GDIでなく D2Dにしないと駄目なんだろうか。一文字ハンコにするのがもう非現実的で、1以上の長さを持つ GLYPH_RUNを対象にすべきなんだろうか。教えて秀丸さん。■■■@2012-02-08「
gdippの DirectWriteブランチ
」でお勉強。■必要であるか否かに関わらず宣言的に IDWriteBitmapRenderTarget->Resize()を呼んでいたのだけど、これをやめると相当速くなった。それでも、Ctrl+V押しっぱなしの連続貼り付けが時々引っかかる。PageDownキーでの全画面書き換えはやっぱり待ちが入る。ブラックアウトしたまま 10秒以上待たされたりしなくなったというだけのこと。■■■TODO(追加):英字と日本語のベースラインを揃える(今は英字が浮いてる)。■DONE@2012-02-29 baseline揃え。
翌日へ
前日へ