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

[mgp-users-jp 01382] Re: 1.11aのリ リース



In article <>, nishida@csl.sony.co.jp writes:
>>  ちょっと気をつけなければいけないのは、 -o で起動した上で mgp 
>>  の window の一部をスクリーンから外に出している状態だと、
>>  XGetImage が BadMatch (だっけな?)のエラーを起こすことです。
>>  このエラーを避けようとするとちょっと面倒なので、上記のような
>>  場合だけは、現在のコードを使うようにするのが良いと思います。
>>  どうせ実際のプレゼンの場ではそんな状況にはならないはずなので。

> なるほど。こんな感じにしてみました。

えっと、これは基本的に window を作ってそれを移動させるという
点は何も変っていなくって、単に「%grad で横や斜め方向に色を変
えていると背景の処理が変になる」というのを fix したというも
のですよね。

僕の提案は subwindow は作らずに、直接 state->target に draw 
して、XFlush&usleep 後に予め XGetImage していたimage のうち 
draw されたエリアに対応する部分のみ XPutImage で元に戻すとい
うものです。

それはともかくとして

> + 	XTranslateCoordinates(display, window, DefaultRootWindow(display), 
> + 		0, 0, &root_x ,&root_y, &junkwin);
> + 	use_copy = 1;
> + 	if ((root_x + window_width > xa.width) || (root_y + window_height > xa.height))
> + 		use_copy = 0;
> + 

root_x と root_y が負の場合も use_copy = 0 だと思います。

> + 	if (use_copy) copywin = XGetImage(display, window, 0, 0, 
> + 						window_width, window_height, AllPlanes, ZPixmap);
> + 

これはさすがに無駄が多いとおもうんですが。必要な image の領
域 (X, Y, WIDTH, HEIGHT) は

X = sate->xoff + MIN (sx, lx)
Y = state->yoff + ly
WIDTH = state_line_width + ABS (sx - lx)
HEIGHT = state->max_ascent + state->max_descent

だけですから。

−− 半田@AIST
      handa@m17n.org