tea 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +674 -0
- data/COPYING.LESSER +165 -0
- data/README.rdoc +93 -0
- data/doc/example/bitmap_draw.rb +21 -0
- data/doc/example/bitmap_load.rb +14 -0
- data/doc/example/bitmap_new.rb +19 -0
- data/doc/example/circle.rb +24 -0
- data/doc/example/circle_alpha.rb +45 -0
- data/doc/example/circle_alpha_bitmap.rb +51 -0
- data/doc/example/circle_bitmap.rb +18 -0
- data/doc/example/clip.rb +46 -0
- data/doc/example/event_app.rb +45 -0
- data/doc/example/event_keyboard.rb +43 -0
- data/doc/example/event_mouse.rb +85 -0
- data/doc/example/font_hello.rb +22 -0
- data/doc/example/font_word_wrap.rb +44 -0
- data/doc/example/grab.rb +28 -0
- data/doc/example/init.rb +10 -0
- data/doc/example/lines.rb +49 -0
- data/doc/example/lines_aa.rb +44 -0
- data/doc/example/lines_alpha.rb +33 -0
- data/doc/example/point.rb +26 -0
- data/doc/example/rect.rb +15 -0
- data/doc/example/rect_alpha.rb +75 -0
- data/doc/example/screen_set_mode.rb +18 -0
- data/doc/example/screen_update.rb +14 -0
- data/doc/example/sfont_hello.rb +22 -0
- data/doc/example/smile.png +0 -0
- data/doc/example/smile_bounce.rb +44 -0
- data/doc/example/smile_move.rb +58 -0
- data/doc/example/smile_move_2.rb +78 -0
- data/doc/example/sound.rb +101 -0
- data/doc/example/state_app.rb +33 -0
- data/doc/example/state_keyboard.rb +23 -0
- data/doc/example/state_mouse.rb +60 -0
- data/doc/key_constants.textile +129 -0
- data/doc/key_modifiers.textile +19 -0
- data/doc/reference.textile +421 -0
- data/lib/tea.rb +34 -0
- data/lib/tea/c_bitmap.rb +122 -0
- data/lib/tea/c_error.rb +11 -0
- data/lib/tea/c_font.rb +302 -0
- data/lib/tea/c_sound.rb +144 -0
- data/lib/tea/m_color.rb +50 -0
- data/lib/tea/m_event.rb +65 -0
- data/lib/tea/m_event_app.rb +96 -0
- data/lib/tea/m_event_dispatch.rb +54 -0
- data/lib/tea/m_event_keyboard.rb +311 -0
- data/lib/tea/m_event_mouse.rb +189 -0
- data/lib/tea/mix_blitting.rb +31 -0
- data/lib/tea/mix_clipping.rb +71 -0
- data/lib/tea/mix_grabbing.rb +86 -0
- data/lib/tea/mix_image_saving.rb +70 -0
- data/lib/tea/mix_primitive.rb +613 -0
- data/lib/tea/o_screen.rb +98 -0
- metadata +137 -0
data/doc/example/clip.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Test that getting, setting and using the clip rectangle all work.
|
2
|
+
# Expected result is a rectangle of smileys, and one at the bottom-right
|
3
|
+
# corner.
|
4
|
+
|
5
|
+
require 'tea'
|
6
|
+
|
7
|
+
puts <<TEST
|
8
|
+
You should see a rectangle of smileys, and one in the bottom-right corner,
|
9
|
+
for 10 seconds.
|
10
|
+
|
11
|
+
Expected output:
|
12
|
+
Clip rect is 0, 0, 400, 300
|
13
|
+
Clip rect is now 50, 50, 290, 185
|
14
|
+
Clip rect is 0, 0, 400, 300 again
|
15
|
+
Clip rect is now 368, 268, 32, 32
|
16
|
+
|
17
|
+
Actual output:
|
18
|
+
TEST
|
19
|
+
|
20
|
+
Tea.init
|
21
|
+
Tea::Screen.set_mode 400, 300
|
22
|
+
|
23
|
+
puts "Clip rect is #{Tea::Screen.clip.join(", ")}"
|
24
|
+
|
25
|
+
smiley = Tea::Bitmap.new('smile.png')
|
26
|
+
|
27
|
+
Tea::Screen.clip(50, 50, 290, 185) do
|
28
|
+
puts "Clip rect is now #{Tea::Screen.clip.join(", ")}"
|
29
|
+
|
30
|
+
for y in 0..(Tea::Screen.h / smiley.h)
|
31
|
+
for x in 0..(Tea::Screen.w / smiley.w)
|
32
|
+
Tea::Screen.blit smiley, x * smiley.w, y * smiley.h
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
puts "Clip rect is #{Tea::Screen.clip.join(", ")} again"
|
38
|
+
|
39
|
+
Tea::Screen.clip Tea::Screen.w - smiley.w, Tea::Screen.h - smiley.h, smiley.w, smiley.h
|
40
|
+
Tea::Screen.blit smiley, Tea::Screen.w - smiley.w, Tea::Screen.h - smiley.h
|
41
|
+
|
42
|
+
puts "Clip rect is now #{Tea::Screen.clip.join(", ")}"
|
43
|
+
|
44
|
+
Tea::Screen.update
|
45
|
+
|
46
|
+
sleep 10
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Test that app events are being picked up.
|
2
|
+
# This test is interactive, and should display messages for:
|
3
|
+
#
|
4
|
+
# * Gaining and losing mouse focus
|
5
|
+
# * Gaining and losing keyboard focus
|
6
|
+
# * Minimising and restoring the screen window
|
7
|
+
# * App exit
|
8
|
+
|
9
|
+
require 'tea'
|
10
|
+
|
11
|
+
puts <<TEST
|
12
|
+
This is an interactive event test. It should display messages for:
|
13
|
+
|
14
|
+
* Gaining and losing mouse focus
|
15
|
+
* Gaining and losing keyboard focus
|
16
|
+
* Minimising and restoring the screen window
|
17
|
+
* App exit
|
18
|
+
|
19
|
+
Go ahead and start doing things like changing focus.
|
20
|
+
|
21
|
+
TEST
|
22
|
+
|
23
|
+
Tea.init
|
24
|
+
Tea::Screen.set_mode 320, 240
|
25
|
+
|
26
|
+
loop do
|
27
|
+
case (e = Tea::Event.get)
|
28
|
+
when Tea::Mouse::Gained
|
29
|
+
puts 'Mouse::Gained event received'
|
30
|
+
when Tea::Mouse::Lost
|
31
|
+
puts 'Mouse::Lost event received'
|
32
|
+
when Tea::Kbd::Gained
|
33
|
+
puts 'Kbd::Gained event received'
|
34
|
+
when Tea::Kbd::Lost
|
35
|
+
puts 'Kbd::Lost event received'
|
36
|
+
when Tea::App::Restored
|
37
|
+
puts 'App::Restored event received'
|
38
|
+
when Tea::App::Minimized
|
39
|
+
puts 'App::Minimized event received'
|
40
|
+
when Tea::App::Exit
|
41
|
+
puts 'App::Exit event received'
|
42
|
+
exit
|
43
|
+
end
|
44
|
+
sleep 0.01
|
45
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Test that keyboard events are being picked up.
|
2
|
+
# Expected results are messages responding to key presses.
|
3
|
+
|
4
|
+
require 'tea'
|
5
|
+
|
6
|
+
puts <<TEST
|
7
|
+
You should see a small window. Try pressing some keys, or Esc to exit.
|
8
|
+
TEST
|
9
|
+
|
10
|
+
Tea.init
|
11
|
+
Tea::Screen.set_mode 320, 240
|
12
|
+
|
13
|
+
loop do
|
14
|
+
e = Tea::Event.get(true)
|
15
|
+
|
16
|
+
break if e.class == Tea::App::Exit
|
17
|
+
next unless e.class == Tea::Kbd::Down || e.class == Tea::Kbd::Up
|
18
|
+
break if e.key == Tea::Kbd::ESCAPE
|
19
|
+
|
20
|
+
out = []
|
21
|
+
|
22
|
+
if e.class == Tea::Kbd::Down
|
23
|
+
out << 'down:'
|
24
|
+
else
|
25
|
+
out << ' up:'
|
26
|
+
end
|
27
|
+
|
28
|
+
out << '(' << e.key.to_s << ')'
|
29
|
+
|
30
|
+
if RUBY_VERSION =~ /1\.8/
|
31
|
+
mods = (e.mods.select { |mod, down| down }).map { |pair| pair[0] }
|
32
|
+
else
|
33
|
+
mods = (e.mods.select { |mod, down| down }).keys
|
34
|
+
end
|
35
|
+
out << "++ #{mods.join(' + ')}" if mods.length > 0
|
36
|
+
|
37
|
+
if e.respond_to?(:char)
|
38
|
+
out << '='
|
39
|
+
out << "\"#{e.char}\""
|
40
|
+
end
|
41
|
+
|
42
|
+
puts out.join(' ')
|
43
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Test that mouse events are being picked up.
|
2
|
+
# Expected output is reporting of mouse move/down/up/scroll events, with
|
3
|
+
# position and relevant buttons.
|
4
|
+
|
5
|
+
require 'tea'
|
6
|
+
|
7
|
+
puts <<TEST
|
8
|
+
Move the mouse in the window. Mouse move/down/up events should be reported,
|
9
|
+
with position and relevant buttons. Mouse wheel scrolling should also be
|
10
|
+
picked up, with at least the cursor position.
|
11
|
+
TEST
|
12
|
+
|
13
|
+
##############################################################################
|
14
|
+
|
15
|
+
# We can avoid flooding the terminal with VT100 codes. Sorry Windows.
|
16
|
+
$windows = RUBY_PLATFORM =~ /w(?:in)?32/
|
17
|
+
SAVE_POSITION = "\x1b[s"
|
18
|
+
RESTORE_POSITION = "\x1b[u"
|
19
|
+
HIDE_CURSOR = "\x1b[?25l"
|
20
|
+
UNHIDE_CURSOR = "\x1b[?25h"
|
21
|
+
CLEAR_TO_LINE_END = "\x1b[K"
|
22
|
+
|
23
|
+
# VT100-enhanced printing function that overwrites the current terminal line.
|
24
|
+
def pr(*args)
|
25
|
+
print HIDE_CURSOR, SAVE_POSITION if !$windows
|
26
|
+
print *args
|
27
|
+
if $windows
|
28
|
+
puts
|
29
|
+
else
|
30
|
+
print CLEAR_TO_LINE_END, RESTORE_POSITION, UNHIDE_CURSOR
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
##############################################################################
|
35
|
+
|
36
|
+
Tea.init
|
37
|
+
Tea::Screen.set_mode 400, 300
|
38
|
+
|
39
|
+
# Event tracking to only put newlines when the event class changes.
|
40
|
+
mouse_events = [Tea::Mouse::Move,
|
41
|
+
Tea::Mouse::Down,
|
42
|
+
Tea::Mouse::Up,
|
43
|
+
Tea::Mouse::Scroll]
|
44
|
+
handled = false
|
45
|
+
last_event_class = Tea::Mouse::Move
|
46
|
+
|
47
|
+
# Track repeated scrolling in the same direction.
|
48
|
+
scroll_pos = 0
|
49
|
+
|
50
|
+
loop do
|
51
|
+
e = Tea::Event.get(true)
|
52
|
+
|
53
|
+
if e.class == Tea::App::Exit
|
54
|
+
puts
|
55
|
+
break
|
56
|
+
end
|
57
|
+
|
58
|
+
# Put a newline when the event class changes.
|
59
|
+
if handled && mouse_events.include?(e.class) && e.class != last_event_class
|
60
|
+
puts
|
61
|
+
last_event_class = e.class
|
62
|
+
scroll_pos = 0
|
63
|
+
end
|
64
|
+
|
65
|
+
handled = true
|
66
|
+
case e
|
67
|
+
when Tea::Mouse::Move
|
68
|
+
if RUBY_VERSION =~ /1\.8/
|
69
|
+
buttons = (e.buttons.select { |button, down| down }).map { |pair| pair[0] }
|
70
|
+
else
|
71
|
+
buttons = (e.buttons.select { |button, down| down }).keys
|
72
|
+
end
|
73
|
+
pr "mouse move : x = #{e.x}, y = #{e.y}, buttons = #{buttons.join(',')}"
|
74
|
+
when Tea::Mouse::Down
|
75
|
+
pr "mouse down : x = #{e.x}, y = #{e.y}, button = #{e.button}"
|
76
|
+
when Tea::Mouse::Up
|
77
|
+
pr "mouse up : x = #{e.x}, y = #{e.y}, button = #{e.button}"
|
78
|
+
when Tea::Mouse::Scroll
|
79
|
+
dir = e.delta == 1 ? 'down' : 'up '
|
80
|
+
scroll_pos += e.delta
|
81
|
+
pr "scroll #{dir}: x = #{e.x}, y = #{e.y}, position = #{scroll_pos} (#{e.delta})"
|
82
|
+
else
|
83
|
+
handled = false
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This tests that fonts can be loaded, rendered and drawn.
|
2
|
+
# Expected result: 'hello' in a small window for 5 seconds.
|
3
|
+
|
4
|
+
require 'tea'
|
5
|
+
|
6
|
+
puts <<TEST
|
7
|
+
You should see 'hello' in a small window for 5 seconds.
|
8
|
+
TEST
|
9
|
+
|
10
|
+
Tea.init
|
11
|
+
Tea::Screen.set_mode 320, 240
|
12
|
+
|
13
|
+
font = Tea::Font.new('font.bmp', Tea::Font::BITMAP_FONT, :transparent_color => Tea::Color::MAGENTA)
|
14
|
+
message = 'hello'
|
15
|
+
|
16
|
+
x = (Tea::Screen.w - font.string_w(message)) / 2
|
17
|
+
y = (Tea::Screen.h - font.h) / 2
|
18
|
+
font.draw_to Tea::Screen, x, y, message
|
19
|
+
|
20
|
+
Tea::Screen.update
|
21
|
+
|
22
|
+
sleep 5
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Test that word-wrapping works.
|
2
|
+
|
3
|
+
require 'tea'
|
4
|
+
|
5
|
+
puts <<TEST
|
6
|
+
You should see several lines of bitmapped and SFont text.
|
7
|
+
Magenta lines indicate the end of the final lines.
|
8
|
+
Press any key to exit.
|
9
|
+
TEST
|
10
|
+
|
11
|
+
Tea.init
|
12
|
+
Tea::Screen.set_mode 400, 300
|
13
|
+
|
14
|
+
message = "This is a long line. " +
|
15
|
+
"I hope it's long enough to wrap around. " +
|
16
|
+
"If it wraps, then font word wrapping is working."
|
17
|
+
|
18
|
+
font_a = Tea::Font.new('font.bmp', Tea::Font::BITMAP_FONT, :transparent_color => Tea::Color::MAGENTA)
|
19
|
+
font_b = Tea::Font.new('sfont.png', Tea::Font::SFONT)
|
20
|
+
|
21
|
+
lines_a = font_a.word_wrap(message, Tea::Screen.w)
|
22
|
+
lines_b = font_b.word_wrap(message, Tea::Screen.w)
|
23
|
+
|
24
|
+
y_pos = 0
|
25
|
+
lines_a.each do |line|
|
26
|
+
break if y_pos + font_a.h >= Tea::Screen.h / 2
|
27
|
+
font_a.draw_to Tea::Screen, 0, y_pos, line
|
28
|
+
y_pos += font_a.h
|
29
|
+
end
|
30
|
+
Tea::Screen.line lines_a.end_x, 0, lines_a.end_x, y_pos, Tea::Color::MAGENTA
|
31
|
+
|
32
|
+
old_y_pos = y_pos
|
33
|
+
lines_b.each do |line|
|
34
|
+
break if y_pos + font_b.h >= Tea::Screen.h
|
35
|
+
font_b.draw_to Tea::Screen, 0, y_pos, line
|
36
|
+
y_pos += font_b.h
|
37
|
+
end
|
38
|
+
Tea::Screen.line lines_b.end_x, old_y_pos, lines_b.end_x, y_pos, Tea::Color::MAGENTA
|
39
|
+
|
40
|
+
Tea::Screen.update
|
41
|
+
|
42
|
+
begin
|
43
|
+
e = Tea::Event.get(true)
|
44
|
+
end until e.class == Tea::App::Exit || e.class == Tea::Kbd::Down
|
data/doc/example/grab.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Test that grabbing from bitmaps works.
|
2
|
+
# Expected results are a smiley on the screen, but with its quarters swapped.
|
3
|
+
|
4
|
+
require 'tea'
|
5
|
+
|
6
|
+
puts <<TEST
|
7
|
+
You should see a smiley in the centre of the screen for 5 seconds, but with its
|
8
|
+
quarters swapped.
|
9
|
+
TEST
|
10
|
+
|
11
|
+
Tea.init
|
12
|
+
Tea::Screen.set_mode 320, 240
|
13
|
+
|
14
|
+
smiley = Tea::Bitmap.new("smile.png")
|
15
|
+
sw2 = smiley.w / 2
|
16
|
+
sh2 = smiley.h / 2
|
17
|
+
top_left = smiley.grab( 0, 0, sw2, sh2)
|
18
|
+
top_right = smiley.grab(sw2, 0, sw2, sh2)
|
19
|
+
bottom_left = smiley.grab( 0, sh2, sw2, sh2)
|
20
|
+
bottom_right = smiley.grab(sw2, sh2, sw2, sh2)
|
21
|
+
|
22
|
+
Tea::Screen.blit bottom_right, Tea::Screen.w / 2 - sw2, Tea::Screen.h / 2 - sh2
|
23
|
+
Tea::Screen.blit bottom_left, Tea::Screen.w / 2, Tea::Screen.h / 2 - sh2
|
24
|
+
Tea::Screen.blit top_right, Tea::Screen.w / 2 - sw2, Tea::Screen.h / 2
|
25
|
+
Tea::Screen.blit top_left, Tea::Screen.w / 2, Tea::Screen.h / 2
|
26
|
+
Tea::Screen.update
|
27
|
+
|
28
|
+
sleep 5
|
data/doc/example/init.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Test that lines of various colours can be drawn.
|
2
|
+
# Expected results are a 400x300 for 5 seconds with:
|
3
|
+
#
|
4
|
+
# * 3 vertical lines on the left: red, green, blue
|
5
|
+
# * 3 horizontal lines at the top-right: yellow, magenta, cyan
|
6
|
+
# * 2 diagonal lines at the bottom-right: white and grey
|
7
|
+
#
|
8
|
+
# The white line should be antialiased.
|
9
|
+
|
10
|
+
require 'tea'
|
11
|
+
|
12
|
+
puts <<TEST
|
13
|
+
You should see a 400x300 window for 5 seconds with:
|
14
|
+
|
15
|
+
* 3 vertical lines on the left: red, green, blue
|
16
|
+
* 3 horizontal lines at the top-right: yellow, magenta, cyan
|
17
|
+
* 2 diagonal lines at the bottom-right: white and grey
|
18
|
+
|
19
|
+
The white line should be antialiased.
|
20
|
+
TEST
|
21
|
+
|
22
|
+
Tea.init
|
23
|
+
Tea::Screen.set_mode 400, 300
|
24
|
+
|
25
|
+
grid_x = Tea::Screen.w / 10
|
26
|
+
grid_y = Tea::Screen.h / 10
|
27
|
+
|
28
|
+
lines = [[1, 1, 1, 9, Tea::Color::RED],
|
29
|
+
[2, 1, 2, 9, Tea::Color::GREEN],
|
30
|
+
[3, 1, 3, 9, Tea::Color::BLUE],
|
31
|
+
[6, 1, 9, 1, Tea::Color::YELLOW],
|
32
|
+
[6, 2, 9, 2, Tea::Color::MAGENTA],
|
33
|
+
[6, 3, 9, 3, Tea::Color::CYAN],
|
34
|
+
[6, 9, 9, 6, Tea::Color::DARK_GRAY]]
|
35
|
+
|
36
|
+
lines.each do |line|
|
37
|
+
Tea::Screen.line grid_x * line[0], grid_y * line[1],
|
38
|
+
grid_x * line[2], grid_y * line[3],
|
39
|
+
line[4]
|
40
|
+
end
|
41
|
+
|
42
|
+
Tea::Screen.line grid_x * 6, grid_y * 6,
|
43
|
+
grid_x * 9, grid_y * 9,
|
44
|
+
Tea::Color::WHITE,
|
45
|
+
:antialias => true
|
46
|
+
|
47
|
+
Tea::Screen.update
|
48
|
+
|
49
|
+
sleep 5
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Test that anti-aliased lines work as expected.
|
2
|
+
# Anti-aliased lines in replace mode should just overwrite the RGBA of the
|
3
|
+
# pixels it affects. In blend mode, the line RGB and destination RGB should be
|
4
|
+
# blended according to their ratio, while the final alpha should be the sum of
|
5
|
+
# the line and destination alpha values.
|
6
|
+
|
7
|
+
require 'tea'
|
8
|
+
|
9
|
+
puts <<TEST
|
10
|
+
You should see 16 green lines in a wheel, with a green dot in the center,
|
11
|
+
against a grey square.
|
12
|
+
|
13
|
+
Press any key to exit.
|
14
|
+
TEST
|
15
|
+
|
16
|
+
Tea.init
|
17
|
+
Tea::Screen.set_mode 400, 300
|
18
|
+
|
19
|
+
b = Tea::Bitmap.new(250, 250, Tea::Color.mix(0, 0, 0, 0))
|
20
|
+
CENTER_X = b.w / 2
|
21
|
+
CENTER_Y = b.h / 2
|
22
|
+
LINE_CENTER_CLEARANCE = 10
|
23
|
+
LINE_LENGTH = 100
|
24
|
+
LINE_COLOR = Tea::Color.mix(0, 255, 0, 128)
|
25
|
+
SPOKES = 16
|
26
|
+
|
27
|
+
Tea::Screen.rect 150, 100, 100, 100, Tea::Color.mix(64, 64, 64)
|
28
|
+
|
29
|
+
b.line CENTER_X, CENTER_Y, CENTER_X, CENTER_Y, LINE_COLOR, :antialias => true, :mix => :replace
|
30
|
+
|
31
|
+
SPOKES.times do |n|
|
32
|
+
angle = n * Math::PI * 2 / SPOKES
|
33
|
+
x1 = CENTER_X + LINE_CENTER_CLEARANCE * Math.cos(angle)
|
34
|
+
y1 = CENTER_Y + LINE_CENTER_CLEARANCE * Math.sin(angle)
|
35
|
+
x2 = CENTER_X + (LINE_CENTER_CLEARANCE + LINE_LENGTH) * Math.cos(angle)
|
36
|
+
y2 = CENTER_Y + (LINE_CENTER_CLEARANCE + LINE_LENGTH) * Math.sin(angle)
|
37
|
+
b.line x1, y1, x2, y2, LINE_COLOR, :antialias => true, :mix => n.even? ? :blend : :replace
|
38
|
+
end
|
39
|
+
|
40
|
+
Tea::Screen.blit b, (Tea::Screen.w - b.w) / 2, (Tea::Screen.h - b.h) / 2
|
41
|
+
Tea::Screen.update
|
42
|
+
begin
|
43
|
+
e = Tea::Event.get(true)
|
44
|
+
end until e.class == Tea::App::Exit || e.class == Tea::Kbd::Down
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Test that line alpha mixes properly.
|
2
|
+
# Expected results:
|
3
|
+
#
|
4
|
+
# * half-red background
|
5
|
+
# * green line, translucent
|
6
|
+
# * blue line, translucent
|
7
|
+
# * white line, solid
|
8
|
+
|
9
|
+
require 'tea'
|
10
|
+
|
11
|
+
puts <<TEST
|
12
|
+
You should see for 5 seconds:
|
13
|
+
|
14
|
+
* half-red background
|
15
|
+
* green line, translucent
|
16
|
+
* blue line, translucent
|
17
|
+
* white line, solid
|
18
|
+
TEST
|
19
|
+
|
20
|
+
Tea.init
|
21
|
+
Tea::Screen.set_mode 400, 300
|
22
|
+
|
23
|
+
tl_green = Tea::Color.mix( 0, 255, 0, 128)
|
24
|
+
tl_blue = Tea::Color.mix( 0, 0, 255, 128)
|
25
|
+
tl_white = Tea::Color.mix(255, 255, 255, 128)
|
26
|
+
|
27
|
+
Tea::Screen.rect 200, 0, 200, 300, Tea::Color::RED
|
28
|
+
20.times { |n| Tea::Screen.line 10, 10 + n, 390, 10 + n, tl_green }
|
29
|
+
20.times { |n| Tea::Screen.line 10, 100 + n, 390, 100 + n, tl_blue, :mix => :blend }
|
30
|
+
20.times { |n| Tea::Screen.line 10, 200 + n, 390, 200 + n, tl_white, :mix => :replace }
|
31
|
+
|
32
|
+
Tea::Screen.update
|
33
|
+
sleep 5
|