[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: dark images on a dark bad



Katsumi Yamaoka <yamaoka@xxxxxxx> writes:

>>>>>> In [emacs-w3m : No.10300] 青田さん wrote:
>
>> favicon と同じように w3m-create-image() でも画像の背景色を指定できるよう
>> にするといいかな、と思ったのですがいかがでしょうか?
>
> さらに、そのデフォルト値を、Emacs frame の bg 色が dark 系だった
> ら白にするというのは、おせっかいに過ぎる、あるいは逆効果でしょう
> か?
>
> どんなプラットフォームでも正しい background-mode の値が得られる
> かどうか、確信がありませんが。

今回の画像だとうまくいくと思いますが、白系で描かれた透過画像もないとは言
いきれないので逆効果になりそうです :-( それにしても、もともとは
w3m-toggle-*-images に advice をかけて let して使うイメージでいたのですが、
簡単に柔軟に対処できるように関数もとれるようにしたほうがよさそうな気がし
てきました。

> ところで、
>
> (defcustom w3m-image-default-background nil
> [...]
> The null string "" is special, that will be replaced with the
> background color of the buffer.
>
> こんなの、よくご存知でしたね。dark 系の Emacs で試してみたら確か
> に効果があるんですが、その "the background color of the buffer"
> って何の色ですか?  `default' face の fg 色?  いや、違うなあ...。
> これがどんな色が設定された環境でも効果があるなら、上のような変則
> 処理は要らないですね。

これはたしか favicon の透過の時に偶然見つけた裏技みたいなものです :-)

      if (STRINGP (specified_bg))
	/* The user specified `:background', use that.  */
	{
	  /* W32 version incorrectly used COLORREF here!!  ++kfs */
	  XColor color;
	  if (x_defined_color (f, SDATA (specified_bg), &color, 0))
	    {
	      png_color_16 user_bg;

	      bzero (&user_bg, sizeof user_bg);
	      user_bg.red = color.red >> shift;
	      user_bg.green = color.green >> shift;
	      user_bg.blue = color.blue >> shift;

	      fn_png_set_background (png_ptr, &user_bg,
				     PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
	    }
	}

image.c が上のようになってます。背景色が指定されていてもその背景色が
Emacs が認識しない色だと透過色の置換えをしないので、透過がそのまま残るわ
けです。 

;; この下の else のところで frame の背景色に置換えてる処理はいらないと思
;; うのだけどなぁ…。

> (jidanni さんの記事を見て最初に思ったのは Emacs/W3 のことでした。
>  あっちは page が指定した bg 色を (もしかしたら bg 画像をも) 忠
>  実に再現しようとしていましたが、Emacs/W3 が遅い原因の中でも大き
>  な割合を占めていたように思います。)

せめて、 w3m-image-default-background が指定されていない時だけでも page
の背景色を再現できるといいのですけどね…。

--
青田