もりきゅうです。

Yasushi Shoji さんは書きました:
>sample/diamond-event.rbを試しただけなんですが、closeすると coreを吐いた
>り expose eventで、exposeされた領域以外が真っ黒になったりしてるのですが、
>これってうちの環境のせいでしょうか?

ふむぅ。
Xlib::Display.visuals の free で落ちてるわけですか。
困った。手元で再現できない。
# お使いの Ruby/Xlib は ruby-xlib-0.6.8.tar.gz ですよね?

display.c:166 xlib_display_get_visuals() において
--
  t_visual *vinfa, vinfo;
  ...
  vinfa = XGetVisualInfo( ... );
  ary = rb_ary_new2(num);
  for (i=0; i<num; i++) {
    visual = Data_Wrap_Struct(cXlib_visual, 0, xlib_visual_free,
      &vinfa[i] );
  }
--
というふうになってるんですが,この vinfa[i] は X によって
開放されないなずなんです。理由は man XGetVisualInfo(3X11) に
  To free the data returned by this function, use XFree.
って書いてあるから。
今の実装法では何かまずい点があるのかなあ。
vinfa が NULL を返していて num > 0 だったらまずいな。

応急処置としては display.c:280
- rb_iv_set(obj, "@visuals", xlib_display_get_visuals(obj));
+ rb_iv_set(obj, "@visuals", Qnil);
とすればいいでしょう。何も解決しないけど。^^;
# Visual に関して勉強不足な私。
実は,今の Ruby/Xlib はどこも visual を見てないんです。^^;;;
# 使うのは Ruby/Imlib を利用するときだけ。

expose event で expose された領域以外が真っ黒になるときの
領域以外というのはどの部分のことですか?

黒くなるのは,expose されると window の全領域が
Window.background で指定した色で clear されるからです。
これは Xlib の仕様だと思われます。
# だから Pixmap に描画して copy_area win しないといけない。

----
Kazuhiro Yoshida  moriq.kazuhiro / nifty.ne.jp