From: Jun Adachi Date: 2000-02-17T15:05:13+09:00 Subject: [ruby-dev:9242] ColorSet Module for Gdk 安達@沖データと申します。 最近、またRuby/Gtkをいじり始めたのですが、末尾に添付したモジュールを作っ て見ました。 #要するに、rgb.txtで定義している名前の表ぐらいは標準で定義しても良い #んじゃなかろうかという話です。 別にこのモジュールやRuby/Gtkの動作に問題があるわけではないのですが、 1) こんな感じのやつをRuby/Gtkの標準配布に組み込んでもらえないだろうか? 2) 機能的には、これで十分? 3) 名前にちょいと違和感がある。 4) 名前空間をちょっと汚すのでモジュールにしたのだが、(Cでなく)rubyのレ ベルでは、別途定義されたモジュールの下にモジュールを定義するってでき ましたっけ? などの疑問があり、メールしています。五十嵐さんを始め識者の方の意見を聞 かせて下さい。 -- gdk_colors.rb #! /usr/local/bin/ruby require 'gtk' module GdkColors class GdkColorSet < Hash def each_color each { | name, color | yield name, color.red, color.green, color.blue } end def colors_by_value (red=Range.new(0, 255), green=Range.new(0, 255), blue=Range.new(0, 255), fazzy=false) f = (fazzy)? fazzy: 0 red = Range.new(red - f, red + f) if (red.type != Range) green = Range.new(green - f, green + f) if (green.type != Range) blue = Range.new(blue - f, blue + f) if (blue.type != Range) colors = Array.new each { | name, color | next if (red == color.red) next if (green == color.green) next if (blue == color.blue) colors.push(name) } colors end end class << GdkColorSet def set_from_rgb (rgb_file="/usr/X11R6/lib/X11/rgb.txt") set = GdkColorSet.new color = nil open(rgb).eachline { | line | next if (line =~ /^\!/o) line.strip! color = line.split(/\s+/o, 4) aColor = Gdk::Color (color[0], color[1], color[2]) set[color[3]] = aColor.dup } set end end GdkStandardColors = GdkColorSet::set_from_rgb end if (__FILE__ == $0) include GdkColors GdkStandardColors.keys.sort.each { | name | color = GdkStandardColors[name] print "#{name}: #{color.red}, #{colo.green}, #{color.blue}\n" } end -- *------* adachi@okidata.co.jp |人∧鷲| 沖データ 第一研究所 | <女> | 安達 淳 |牛∨獅| *------*