gfw の該当文字に斜体や太字が効かない #294

Closed
koron opened this Issue Jan 18, 2013 · 16 comments

2 participants

@koron
vim-jp member

gfw を設定している時に、gfwに該当する文字がシンタックスにより
太字や斜体で表示されるべき場合、太字や斜体では表示されない。

Vimは内部で標準、太字、斜体フォントをそれぞれ異なるフォントインスタンスとして管理している。
しかし gfw のフォントについては太字や斜体フォントは生成されないため、
gui.c において gfw のフォントを適用する際にそれらの情報がロストしてしまう。

@koron
vim-jp member

上記の「DirectWriteで描画したい」は関係ない。あやまってリンクを貼ってしまいました。

@k-takata
vim-jp member

Windows専用ですが、試しにパッチを作ってみました。
https://bitbucket.org/k_takata/vim-win32-mq/src/9b55538d0f46e58c5b2b6b5698a3baf6578cedd4/gfw-bold-italic.patch?at=default
(kaoriyaパッチが当たっていない場合、gui_w32.c でうまく当たらないかもしれませんが無視でよいと思われます。)

なお、Make_mvc.mak は gui.h の依存関係に不備があり、パッチ適用後はフルビルドしないと正常動作しませんでした。

@koron
vim-jp member

Win以外についても、ここだけ実装すれば良いよ、的な風にしたほうが良くないですか?

具体的には ifndef FEAT_GUI_GTK なところを消したいのです。

@koron
vim-jp member

あと if 文の羅列がパフォーマンスに与える影響がきになるところ。

@k-takata
vim-jp member

具体的には ifndef FEAT_GUI_GTK なところを消したいのです。

FEAT_GUI_GTK な部分は、(wideではない)guifont の処理に合わせただけのつもりなので、どうすべきか良い方法が思い浮かびません。

あと if 文の羅列がパフォーマンスに与える影響がきになるところ。

guifont の if 文で一緒に判別した方が良さそうですが、今度は FEAT_MBYTE がとても邪魔なことになりそうで…

@koron
vim-jp member

手直ししました: https://bitbucket.org/koron/vim-kaoriya-vim-mq-ex/src/091540207bb3fe5e09c07fe87cf20e9d1a2d3125/patch-gfw-bold-italic.patch?at=default

修正内容は以下を狙っています。

  • 不要なdiffは生成させない
    • wide_font の名前はそのままにする
    • もともとなかったifdef の前のスペーシング削除: 論理的に間違っていたのはわかっているが、本質的な修正ではないためこのパッチでやるべきではない。
  • *_wide_font を wide_*_font に変更: wideなフォントセットはalternativeである、ということを強調するため
  • コメントを追加
    • if文の羅列に対する excuse を追加
    • 他のプラットホームでサポートする場合を考慮したメモを追加
@k-takata
vim-jp member

もともとなかったifdef の前のスペーシング削除: 論理的に間違っていたのはわかっているが、本質的な修正ではないためこのパッチでやるべきではない。

私は、これは一緒に入れてしまいたいです。大した量ではないですし、逆にこういうことでもないと直す機会が無いかと思います。

if文の羅列に対する excuse を追加

typoがあったのと、インデントがスペースになっていたのを tab に修正。

https://bitbucket.org/k_takata/vim-win32-mq/src/2eb9b3d7a8403a02b14cd025c8ac129f91f8fad3/gfw-bold-italic.patch

@k-takata
vim-jp member

gui_mch_wide_font_changed() の中と、そこから呼んでいる update_im_font() の中の両方で、GetObject() を呼んでいるので、もう少しきれいにまとめられないかというのも気になっていますが、今回は何もしていません。

@koron
vim-jp member

もともとなかったifdef の前のスペーシング削除: 論理的に間違っていたのはわかっているが、本質的な修正ではないためこのパッチでやるべきではない。

私は、これは一緒に入れてしまいたいです。大した量ではないですし、逆にこういうことでもないと直す機会が無いかと思います。

そんなことはないですよ、ってことでそこだけ切り出して先に投稿しました。

https://groups.google.com/d/msg/vim_dev/D4mMcMFP7ak/N-Yy8y3lpLwJ

typoだけとかワーニングの解消だけとか、この手のインデントの修正だけとかそういうパッチもチラホラありますし、
何を臆することがあるものかということでw

# 欲を言えば、初めての人がvim_devに投げる題材としてはうってつけなので、
# 我々が潰してしまうのもどうかというところですがw

@koron
vim-jp member

gui_mch_wide_font_changed() の中と、そこから呼んでいる update_im_font() の中の両方で、GetObject() を呼んでいるので、もう少しきれいにまとめられないかというのも気になっていますが、今回は何もしていません。

これはやってることは同じでも目的が違いますから、下手にまとめるのはよろしくないでしょう。

@k-takata
vim-jp member

そんなことはないですよ、ってことでそこだけ切り出して先に投稿しました。

パッチの数を増やして、7.4のリリースをせかす訳ですね、わかりますw
このままだとパッチがコンフリクトするので、そっちのパッチを先に当ててから当てるような形に直してから出しますか。

@koron
vim-jp member

(・ω<)

@k-takata
vim-jp member

todo.txt 入りしました。

Patch to use bold/italic fonts when 'guifontewide' is set. (Ken Takata, 2013
Mar 31)

@k-takata k-takata closed this Apr 7, 2013
@k-takata
vim-jp member
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment