Satoshi Nakamura
ml****@snak*****
2008年 3月 21日 (金) 00:03:39 JST
中村と申します。 IME patch + 半透明 patch を当てたNTEmacsバイナリを使わせていただいています。 このバイナリに当たっているパッチだと、半透明にする設定をしない場合でも半透 明にするためのコードが走ってしまうため、描画のパフォーマンスに悪影響があり ます。 具体的には、半透明にしない場合でも、WS_EX_LAYEREDスタイルが適用されてしま います。このスタイルが適用されると、ウィンドウの背景を描画する前に、その下 にあるウィンドウの再描画順番に行われるため、特にウィンドウのサイズが大きい と描画のパフォーマンスが悪くなります。 以下のパッチを当てると半透明にしない場合にはこのスタイルを適用しなくなりま す。よろしければ取り込んでいただけないでしょうか。 diff -ur emacs-22.1.92.orig/src/w32term.c emacs-22.1.92/src/w32term.c --- emacs-22.1.92.orig/src/w32term.c 2008-03-10 08:54:04.000000000 +0900 +++ emacs-22.1.92/src/w32term.c 2008-03-20 19:24:02.261519600 +0900 @@ -1209,12 +1209,19 @@ if (alpha < 0.0) alpha = 1.0; if (set_layered_window_attributes_fn != NULL) { - SetWindowLong (window, GWL_EXSTYLE, - GetWindowLong (window, GWL_EXSTYLE)|WS_EX_LAYERED); - set_layered_window_attributes_fn (FRAME_W32_WINDOW (f), - RGB(255, 255, 255), - (int)(alpha * 255.0), - LWA_ALPHA); + int a = (int)(alpha * 255.0); + if (a != 255) { + SetWindowLong (window, GWL_EXSTYLE, + GetWindowLong (window, GWL_EXSTYLE)|WS_EX_LAYERED); + set_layered_window_attributes_fn (FRAME_W32_WINDOW (f), + RGB(255, 255, 255), + a, + LWA_ALPHA); + } + else { + SetWindowLong (window, GWL_EXSTYLE, + GetWindowLong (window, GWL_EXSTYLE) & ~WS_EX_LAYERED); + } } } -- Satoshi Nakamura <snak****@snak*****>