commit 79300209f78a6af90e896bcec2d121118647b506
parent 19ec6573cc0b6a0189326e57d7ea163efef15a1d
Author: William Morgan <wmorgan-sup@masanjin.net>
Date: Tue, 5 Jan 2010 13:03:59 -0800
Merge branch 'colors' into next
Diffstat:
| A |
contrib/colorpicker.rb |
| |
104 |
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
1 file changed, 104 insertions(+), 0 deletions(-)
diff --git a/contrib/colorpicker.rb b/contrib/colorpicker.rb
@@ -0,0 +1,104 @@
+require 'rubygems'
+
+begin
+ require 'ncursesw'
+rescue LoadError
+ require 'ncurses'
+end
+
+Ncurses.initscr
+Ncurses.noecho
+Ncurses.cbreak
+Ncurses.start_color
+
+Ncurses.curs_set 0
+Ncurses.move 0, 0
+Ncurses.clear
+Ncurses.refresh
+cc = Ncurses.COLORS
+
+Ncurses::keypad(Ncurses::stdscr, 1)
+Ncurses::mousemask(Ncurses::ALL_MOUSE_EVENTS | Ncurses::REPORT_MOUSE_POSITION, [])
+
+fail "color count is #{cc}, expected 256" unless cc == 256
+
+1.upto(255) do |c|
+ Ncurses.init_pair(c, 0, c)
+end
+
+def cell y, x, c
+ @map[[y,x]] = c
+ Ncurses.attron(Ncurses.COLOR_PAIR(c))
+ Ncurses.mvaddstr(y, x, " ")
+ Ncurses.attroff(Ncurses.COLOR_PAIR(c))
+end
+
+def handle_click y, x
+ c = @map[[y,x]] or return
+ name = case c
+ when 0...16
+ c.to_s
+ when 16...232
+ 'c' + (c-16).to_s(6).rjust(3,'0')
+ when 232...256
+ 'g' + (c-232).to_s
+ end
+
+ Ncurses.mvaddstr 11, 0, "#{name} "
+
+ Ncurses.attron(Ncurses.COLOR_PAIR(c))
+ 10.times do |i|
+ 20.times do |j|
+ y = 13 + i
+ x = j
+ Ncurses.mvaddstr(y, x, " ")
+ end
+ end
+ Ncurses.attroff(Ncurses.COLOR_PAIR(c))
+end
+
+@map = {}
+@fg = @bg = 0
+
+begin
+ 16.times do |i|
+ cell 0, i, i
+ end
+
+ 6.times do |i|
+ 6.times do |j|
+ 6.times do |k|
+ c = 16 + 6*6*i + 6*j + k
+ y = 2 + j
+ x = 7*i + k
+ cell y, x, c
+ end
+ end
+ end
+
+ 16.times do |i|
+ c = 16 + 6*6*6 + i
+ cell 9, i, c
+ end
+
+ handle_click 0, 0
+ Ncurses.refresh
+
+ while (c = Ncurses.getch)
+ case c
+ when 113 #q
+ break
+ when Ncurses::KEY_MOUSE
+ mev = Ncurses::MEVENT.new
+ Ncurses.getmouse(mev)
+ case(mev.bstate)
+ when Ncurses::BUTTON1_CLICKED
+ handle_click mev.y, mev.x
+ end
+ end
+ Ncurses.refresh
+ end
+
+ensure
+ Ncurses.endwin
+end