トップ «前の日記 最新 次の日記»

2020-03-14 (Sa) [長年日記]

_ テキスト描画

何が表示されているかわからない場所へ、テキストを描画する。 もちろん、目立つように。背景は白っぽいかもしれないし、 黒っぽいかも知れない。ごちゃごちゃ何かいろいろ書いてある かもしれない。

これがなかなか難しい。

  • テキストは Bold 体。
  • テキストの周りに白いアウトラインを太めに。
  • その右下に少し影を付ける。

アウトラインは、テキストを、本来の位置から少しずらして、 ずらす角度を 0〜360° 変化させながら、16回描画。

テキスト+アウトラインを一枚の絵として、色は全体を黒として、 alpha だけ持たせる。alpha は元々の値の 5% とする。 それを、アウトラインと同じ要領で16回描画。ただし、全体的に 右下にずらしておく。これがテキスト+アウトラインの影。

で、テキストは、その場で入力するので、テキストカーソルが必要になる。 カーソルが一色のみだと、周囲の色に溶け込んでしまって、見づらいかもしれない。 なので、カーソルにも影を付けることにした。

基本は、カーソルは黒一色。ただし、それを白に変えて 5% の alpha で 同じ要領で16回描画して、カーソルの影とする。

一応これで、背景がどんな色でもカーソルが見えるようになる。

ただし、このカーソルの描画時、実はテキストを alpha 0% で完全透明にして、 カーソルのある位置だけ背景を黒で完全不透明にしてるので、ここでもやっぱり テキストを描画している。

さて、結局テキストは何回描画してるんだろう? sweat_drops cairo surface を pattern として何回描画してるんだろう? sweat_drops

いちおう、長〜〜いテキストを描画してみた。重いのは重いけど、 そんなに馬鹿重くはないな。

最近の PC はすごいね。こんな無茶な処理しても、結構平気でこなしてしまう。

ところで。

PangoAttribute の background alpha や foreground alpha の仕様に憮然。

普通は 0 で完全透明、MAX で完全不透明だと思うんだけど…

引数仕様としては 1〜65536 ということになってる。 使った感じ、おそらく 0 が完全不透明。というか alpha の処理をしない指定なんだと思う。 そして、65536 なんて渡せない。uint16_t だから。最大でも 65535。

たぶん、0 が完全不透明、1 が完全透明、65535 が完全不透明一歩手前、なんだろうと思う。

更には、background color / foreground color の方は、普通に 0〜65535 だった。

なんてややこしい…


編集 パスワード変更