This is a multi-part message in MIME format.

--Multipart_Fri__11_May_2001_23:44:03_+0900_081d03d0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

むとうです。

今日は Gdk::GC#set_dashes(offset, dash_list) のdash_listについて
ご相談があります。


このdash_listは波線を際の点線の幅を指定するのですが;
、Stringになっているので以下のようにコーディングする必要があります。

---
require 'gtk'
      
window  tk::Window.new.set_usize(100,100)
window.set_app_paintable(true).realize

gc  dk::GC.new(window.window).set_line_attributes(3,
          Gdk::LINE_ON_OFF_DASH, Gdk::CAP_NOT_LAST, Gdk::JOIN_ROUND)

window.signal_connect(Gtk::Widget::SIGNAL_EXPOSE_EVENT) do |win, evt|
  dash  %c%c" % [20, 10]           #(1)
  gc.set_dashes(0, dash)
  window.window.draw_line(gc, 0, 30, 99, 30)

  dash2  " << 10 << 5 << 3 << 5    #(2)
  gc.set_dashes(0, dash2)
  window.window.draw_line(gc, 0, 50, 99, 50)
end

window.show_all

Gtk.main
---

意図としては、

(1)前景色で20, 背景色で10の繰り返しで線を引く
(2)前景色で10, 背景色で5, 前景色で3, 背景色で5 の繰り返しで線を引く

です。一応、二通りの方え惰蝌銛  囈鱸鈑にしていますがイマイチ
直感的ではない気がします。
#もっとわかりやすい方法があったらごめんなさい。

--
実装の方がなぜStringになっているかというと、gdk_gc_set_dashes()の
第3引数がgchar dash_list[]になっているからだと思います。
しかし、実際にXのチュートリアル等(でXSetDashes()の使い方)を参照すると、
ここは、

  char dashed[]   10, 20 };

等のように、数値として扱った例が多かったように思いますし、
このような使い方の方が直感的なような気がします。


#GTK+のスでは
#
#gtkclist.c:      gdk_gc_set_dashes (clist->xor_gc, 0, "\4\4", 2);
#
#と文字列で指定していますが、これだとXの例よりもさらに直感的でないものに
#なっていると思います。

--
で、ここは、Fixnumの配列を指定するようにしたいです。
すれば、上記コードは、

  :
  :

window.signal_connect(Gtk::Widget::SIGNAL_EXPOSE_EVENT) do |win, evt|
  dash  20, 10]                     #(1')
  gc.set_dashes(0, dash)
  window.window.draw_line(gc, 0, 30, 99, 30)

  dash2  10, 5, 3, 5]               #(2')
  gc.set_dashes(0, dash2)
  window.window.draw_line(gc, 0, 50, 99, 50)
end

  :
  :

と記任るので、の実装より直感的に韻襪里任呂覆いと思います;

なわけで上記に対応したパッチを添付します。
一応、互換性を維持するために、のコード(Stringのまま)でも動作するよう
にしときました。
#StringのままのときはWarningを垢茲Δ砲靴泙靴拭

以上、問題ないようでしたら取り込んでいただけないでしょうか。>五鬚気鵝

では。

----
○● むとう まさお(MUTOH Masao)    
●○ E-Mail:mutoh / highway.ne.jp


--Multipart_Fri__11_May_2001_23:44:03_+0900_081d03d0
Content-Type: application/octet-stream;
 namebgdk.c.patch"
Content-Disposition: attachment;
 filenamebgdk.c.patch"
Content-Transfer-Encoding: base64

LS0tIHNyYy9yYmdkay5jLm9yZwlGcmkgTWF5IDExIDIyOjA1OjA1IDIwMDEKKysrIHNyYy9yYmdk
ay5jCUZyaSBNYXkgMTEgMjM6MjY6NTIgMjAwMQpAQCAtODI2LDggKzgyNiwyNSBAQAogZ2RrZ2Nf
c2V0X2Rhc2hlcyhzZWxmLCBkYXNoX29mZnNldCwgZGFzaF9saXN0KQogICAgIFZBTFVFIHNlbGYs
IGRhc2hfb2Zmc2V0LCBkYXNoX2xpc3Q7CiB7Ci0gICAgZ2RrX2djX3NldF9kYXNoZXMoZ2V0X2dk
a2djKHNlbGYpLCBOVU0ySU5UKGRhc2hfb2Zmc2V0KSwKLQkJICAgICAgUlNUUklORyhkYXNoX2xp
c3QpLT5wdHIsIFJTVFJJTkcoZGFzaF9saXN0KS0+bGVuKTsKKyAgICBnY2hhciAqYnVmOworICAg
IGludCAgIGk7CisKKyAgICBpZiAocmJfb2JqX2lzX2luc3RhbmNlX29mKGRhc2hfbGlzdCwgcmJf
Y1N0cmluZykpIHsKKyAgICAgICAgZ2RrX2djX3NldF9kYXNoZXMoZ2V0X2dka2djKHNlbGYpLCBO
VU0ySU5UKGRhc2hfb2Zmc2V0KSwKKyAgICAgICAgICAgICBSU1RSSU5HKGRhc2hfbGlzdCktPnB0
ciwgUlNUUklORyhkYXNoX2xpc3QpLT5sZW4pOworICAgICAgICByYl93YXJuKCJHZGs6OkdDLnNl
dF9kYXNoZXMoZGFzaF9vZmZzZXQsIGRhc2hfbGlzdCk6IGRhc2hfbGlzdCB3aXRoIFN0cmluZyBp
cyBvYnNvbGV0ZWQuIFVzZSBkYXNoX2xpc3Qgd2l0aCBBcnJheS4iKTsKKyAgICB9IGVsc2UgaWYg
KHJiX29ial9pc19pbnN0YW5jZV9vZihkYXNoX2xpc3QsIHJiX2NBcnJheSkpIHsKKyAgICAgICAg
YnVmID0gQUxMT0NBX04oZ2NoYXIsIFJBUlJBWShkYXNoX2xpc3QpLT5sZW4pOworICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgUkFSUkFZKGRhc2hfbGlzdCktPmxlbjsgaSsrKSB7CisgICAgICAgICAg
ICBDaGVja19UeXBlKFJBUlJBWShkYXNoX2xpc3QpLT5wdHJbaV0sIFRfRklYTlVNKTsKKyAgICAg
ICAgICAgIGJ1ZltpXSA9IChnY2hhcilOVU0yQ0hSKFJBUlJBWShkYXNoX2xpc3QpLT5wdHJbaV0p
OworICAgICAgICB9CisgICAgICAgIGdka19nY19zZXRfZGFzaGVzKGdldF9nZGtnYyhzZWxmKSwg
TlVNMklOVChkYXNoX29mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgUlNU
UklORyhkYXNoX2xpc3QpLT5sZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIENoZWNrX1R5cGUo
ZGFzaF9saXN0LCBUX0FSUkFZKTsKKyAgICB9CisKICAgICByZXR1cm4gc2VsZjsKIH0KIAo-Multipart_Fri__11_May_2001_23:44:03_+0900_081d03d0--