tung-tea 0.4.0 → 0.4.2
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/README.rdoc +1 -1
- data/doc/example/bitmap_new.rb +2 -2
- data/doc/example/circle.rb +3 -3
- data/doc/example/circle_alpha.rb +10 -9
- data/doc/example/circle_alpha_bitmap.rb +12 -11
- data/doc/example/circle_bitmap.rb +2 -2
- data/doc/example/lines.rb +8 -8
- data/doc/example/lines_aa.rb +3 -3
- data/doc/example/lines_alpha.rb +8 -4
- data/doc/example/point.rb +4 -4
- data/doc/example/rect.rb +1 -1
- data/doc/example/rect_alpha.rb +13 -9
- data/doc/reference.textile +42 -5
- data/lib/tea.rb +1 -0
- data/lib/tea/m_color.rb +50 -0
- data/lib/tea/mix_grabbing.rb +5 -5
- data/lib/tea/mix_primitive.rb +26 -19
- metadata +2 -1
data/README.rdoc
CHANGED
data/doc/example/bitmap_new.rb
CHANGED
@@ -8,9 +8,9 @@ You should see a red square in a cyan square for 2 seconds.
|
|
8
8
|
TEST
|
9
9
|
|
10
10
|
Tea.init
|
11
|
-
a = Tea::Bitmap.new(200, 200,
|
11
|
+
a = Tea::Bitmap.new(200, 200, Tea::Color::CYAN)
|
12
12
|
Tea::Screen.set_mode 400, 300
|
13
|
-
b = Tea::Bitmap.new(150, 150,
|
13
|
+
b = Tea::Bitmap.new(150, 150, Tea::Color::RED)
|
14
14
|
|
15
15
|
Tea::Screen.blit a, 100, 50
|
16
16
|
Tea::Screen.blit b, 125, 75
|
data/doc/example/circle.rb
CHANGED
@@ -15,9 +15,9 @@ TEST
|
|
15
15
|
Tea.init
|
16
16
|
Tea::Screen.set_mode 400, 300
|
17
17
|
|
18
|
-
Tea::Screen.circle 200, 150, 100,
|
19
|
-
Tea::Screen.circle 100, 150, 50,
|
20
|
-
Tea::Screen.circle 300, 150, 50,
|
18
|
+
Tea::Screen.circle 200, 150, 100, Tea::Color::WHITE
|
19
|
+
Tea::Screen.circle 100, 150, 50, Tea::Color::GREEN, :antialias => true
|
20
|
+
Tea::Screen.circle 300, 150, 50, Tea::Color::RED, :outline => true
|
21
21
|
|
22
22
|
Tea::Screen.update
|
23
23
|
|
data/doc/example/circle_alpha.rb
CHANGED
@@ -23,18 +23,19 @@ TEST
|
|
23
23
|
Tea.init
|
24
24
|
Tea::Screen.set_mode 400, 300
|
25
25
|
|
26
|
-
Tea::Screen.rect 100, 75, 200, 150,
|
26
|
+
Tea::Screen.rect 100, 75, 200, 150, Tea::Color::WHITE
|
27
27
|
|
28
|
-
Tea::
|
29
|
-
Tea::Screen.circle
|
30
|
-
Tea::Screen.circle
|
28
|
+
translucent_green = Tea::Color.mix(0, 255, 0, 128)
|
29
|
+
Tea::Screen.circle 100, 75, 25, translucent_green, :outline => false, :antialias => false, :mix => :blend
|
30
|
+
Tea::Screen.circle 200, 75, 25, translucent_green, :outline => false, :antialias => false, :mix => :replace
|
31
|
+
Tea::Screen.circle 300, 75, 25, translucent_green, :outline => false, :antialias => true, :mix => :blend
|
31
32
|
|
32
|
-
Tea::Screen.circle 100, 150, 25,
|
33
|
-
Tea::Screen.circle 300, 150, 25,
|
33
|
+
Tea::Screen.circle 100, 150, 25, translucent_green, :outline => false, :antialias => true, :mix => :replace
|
34
|
+
Tea::Screen.circle 300, 150, 25, translucent_green, :outline => true, :antialias => false, :mix => :blend
|
34
35
|
|
35
|
-
Tea::Screen.circle 100, 225, 25,
|
36
|
-
Tea::Screen.circle 200, 225, 25,
|
37
|
-
Tea::Screen.circle 300, 225, 25,
|
36
|
+
Tea::Screen.circle 100, 225, 25, translucent_green, :outline => true, :antialias => false, :mix => :replace
|
37
|
+
Tea::Screen.circle 200, 225, 25, translucent_green, :outline => true, :antialias => true, :mix => :blend
|
38
|
+
Tea::Screen.circle 300, 225, 25, translucent_green, :outline => true, :antialias => true, :mix => :replace
|
38
39
|
|
39
40
|
Tea::Screen.update
|
40
41
|
|
@@ -24,21 +24,22 @@ TEST
|
|
24
24
|
Tea.init
|
25
25
|
Tea::Screen.set_mode 400, 300
|
26
26
|
|
27
|
-
Tea::Screen.rect 100, 75, 200, 150,
|
27
|
+
Tea::Screen.rect 100, 75, 200, 150, Tea::Color::WHITE
|
28
28
|
|
29
|
-
b = Tea::Bitmap.new(Tea::Screen.w, Tea::Screen.h,
|
30
|
-
b.rect 105, 80, 190, 140,
|
29
|
+
b = Tea::Bitmap.new(Tea::Screen.w, Tea::Screen.h, Tea::Color.mix(0, 0, 0, 0))
|
30
|
+
b.rect 105, 80, 190, 140, Tea::Color.mix(0, 0, 255)
|
31
31
|
|
32
|
-
|
33
|
-
b.circle
|
34
|
-
b.circle
|
32
|
+
translucent_green = Tea::Color.mix(0, 255, 0, 128)
|
33
|
+
b.circle 100, 75, 25, translucent_green, :outline => false, :antialias => false, :mix => :blend
|
34
|
+
b.circle 200, 75, 25, translucent_green, :outline => false, :antialias => false, :mix => :replace
|
35
|
+
b.circle 300, 75, 25, translucent_green, :outline => false, :antialias => true, :mix => :blend
|
35
36
|
|
36
|
-
b.circle 100, 150, 25,
|
37
|
-
b.circle 300, 150, 25,
|
37
|
+
b.circle 100, 150, 25, translucent_green, :outline => false, :antialias => true, :mix => :replace
|
38
|
+
b.circle 300, 150, 25, translucent_green, :outline => true, :antialias => false, :mix => :blend
|
38
39
|
|
39
|
-
b.circle 100, 225, 25,
|
40
|
-
b.circle 200, 225, 25,
|
41
|
-
b.circle 300, 225, 25,
|
40
|
+
b.circle 100, 225, 25, translucent_green, :outline => true, :antialias => false, :mix => :replace
|
41
|
+
b.circle 200, 225, 25, translucent_green, :outline => true, :antialias => true, :mix => :blend
|
42
|
+
b.circle 300, 225, 25, translucent_green, :outline => true, :antialias => true, :mix => :replace
|
42
43
|
|
43
44
|
Tea::Screen.blit b, 0, 0
|
44
45
|
|
@@ -10,8 +10,8 @@ TEST
|
|
10
10
|
Tea.init
|
11
11
|
Tea::Screen.set_mode 320, 240
|
12
12
|
|
13
|
-
b = Tea::Bitmap.new(320, 240,
|
14
|
-
b.circle 160, 120, 100,
|
13
|
+
b = Tea::Bitmap.new(320, 240, Tea::Color.mix(0, 0, 0, 0))
|
14
|
+
b.circle 160, 120, 100, Tea::Color::WHITE, :mix => :replace
|
15
15
|
Tea::Screen.blit b, 0, 0
|
16
16
|
|
17
17
|
Tea::Screen.update
|
data/doc/example/lines.rb
CHANGED
@@ -25,13 +25,13 @@ Tea::Screen.set_mode 400, 300
|
|
25
25
|
grid_x = Tea::Screen.w / 10
|
26
26
|
grid_y = Tea::Screen.h / 10
|
27
27
|
|
28
|
-
lines = [[1, 1, 1, 9,
|
29
|
-
[2, 1, 2, 9,
|
30
|
-
[3, 1, 3, 9,
|
31
|
-
[6, 1, 9, 1,
|
32
|
-
[6, 2, 9, 2,
|
33
|
-
[6, 3, 9, 3,
|
34
|
-
[6, 9, 9, 6,
|
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
35
|
|
36
36
|
lines.each do |line|
|
37
37
|
Tea::Screen.line grid_x * line[0], grid_y * line[1],
|
@@ -41,7 +41,7 @@ end
|
|
41
41
|
|
42
42
|
Tea::Screen.line grid_x * 6, grid_y * 6,
|
43
43
|
grid_x * 9, grid_y * 9,
|
44
|
-
|
44
|
+
Tea::Color::WHITE,
|
45
45
|
:antialias => true
|
46
46
|
|
47
47
|
Tea::Screen.update
|
data/doc/example/lines_aa.rb
CHANGED
@@ -16,15 +16,15 @@ TEST
|
|
16
16
|
Tea.init
|
17
17
|
Tea::Screen.set_mode 400, 300
|
18
18
|
|
19
|
-
b = Tea::Bitmap.new(250, 250,
|
19
|
+
b = Tea::Bitmap.new(250, 250, Tea::Color.mix(0, 0, 0, 0))
|
20
20
|
CENTER_X = b.w / 2
|
21
21
|
CENTER_Y = b.h / 2
|
22
22
|
LINE_CENTER_CLEARANCE = 10
|
23
23
|
LINE_LENGTH = 100
|
24
|
-
LINE_COLOR =
|
24
|
+
LINE_COLOR = Tea::Color.mix(0, 255, 0, 128)
|
25
25
|
SPOKES = 16
|
26
26
|
|
27
|
-
Tea::Screen.rect 150, 100, 100, 100,
|
27
|
+
Tea::Screen.rect 150, 100, 100, 100, Tea::Color.mix(64, 64, 64)
|
28
28
|
|
29
29
|
b.line CENTER_X, CENTER_Y, CENTER_X, CENTER_Y, LINE_COLOR, :antialias => true, :mix => :replace
|
30
30
|
|
data/doc/example/lines_alpha.rb
CHANGED
@@ -20,10 +20,14 @@ TEST
|
|
20
20
|
Tea.init
|
21
21
|
Tea::Screen.set_mode 400, 300
|
22
22
|
|
23
|
-
Tea::
|
24
|
-
|
25
|
-
|
26
|
-
|
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 }
|
27
31
|
|
28
32
|
Tea::Screen.update
|
29
33
|
sleep 5
|
data/doc/example/point.rb
CHANGED
@@ -16,10 +16,10 @@ TEST
|
|
16
16
|
Tea.init
|
17
17
|
Tea::Screen.set_mode 400, 300
|
18
18
|
|
19
|
-
Tea::Screen
|
20
|
-
Tea::Screen
|
21
|
-
Tea::Screen
|
22
|
-
Tea::Screen
|
19
|
+
Tea::Screen[100, 75] = Tea::Color::RED
|
20
|
+
Tea::Screen[300, 75] = Tea::Color::GREEN
|
21
|
+
Tea::Screen[100, 225] = Tea::Color::BLUE
|
22
|
+
Tea::Screen[300, 225] = Tea::Color::WHITE
|
23
23
|
|
24
24
|
Tea::Screen.update
|
25
25
|
|
data/doc/example/rect.rb
CHANGED
data/doc/example/rect_alpha.rb
CHANGED
@@ -25,23 +25,27 @@ TEST
|
|
25
25
|
Tea.init
|
26
26
|
Tea::Screen.set_mode 400, 300
|
27
27
|
|
28
|
+
TL_GREEN = Tea::Color.mix( 0, 255, 0, 128)
|
29
|
+
TL_BLUE = Tea::Color.mix( 0, 0, 255, 128)
|
30
|
+
TL_WHITE = Tea::Color.mix(255, 255, 255, 128)
|
31
|
+
|
28
32
|
x, y = 205, 15
|
29
33
|
up, down, left, right = false, false, false, false
|
30
34
|
wait_for_event = true
|
31
35
|
|
32
|
-
b = Tea::Bitmap.new(180, 130,
|
33
|
-
b.rect 45, 32, 90, 65,
|
34
|
-
b.rect 0, 0, 90, 65,
|
35
|
-
b.rect 90, 65, 90, 65,
|
36
|
-
b.rect 0, 65, 90, 65,
|
36
|
+
b = Tea::Bitmap.new(180, 130, Tea::Color::CLEAR)
|
37
|
+
b.rect 45, 32, 90, 65, Tea::Color::RED
|
38
|
+
b.rect 0, 0, 90, 65, TL_GREEN, :mix => :blend
|
39
|
+
b.rect 90, 65, 90, 65, TL_BLUE, :mix => :replace
|
40
|
+
b.rect 0, 65, 90, 65, TL_WHITE
|
37
41
|
|
38
42
|
begin
|
39
43
|
Tea::Screen.clear
|
40
44
|
|
41
|
-
Tea::Screen.rect 100, 75, 200, 150,
|
42
|
-
Tea::Screen.rect 0, 0, 200, 150,
|
43
|
-
Tea::Screen.rect 200, 150, 200, 150,
|
44
|
-
Tea::Screen.rect 0, 150, 200, 150,
|
45
|
+
Tea::Screen.rect 100, 75, 200, 150, Tea::Color::RED
|
46
|
+
Tea::Screen.rect 0, 0, 200, 150, TL_GREEN, :mix => :blend
|
47
|
+
Tea::Screen.rect 200, 150, 200, 150, TL_BLUE, :mix => :replace
|
48
|
+
Tea::Screen.rect 0, 150, 200, 150, TL_WHITE
|
45
49
|
|
46
50
|
Tea::Screen.blit b, x, y
|
47
51
|
|
data/doc/reference.textile
CHANGED
@@ -14,6 +14,39 @@ This is the exception class raised when Bad Things happen in any of Tea's object
|
|
14
14
|
|
15
15
|
h1. Graphics
|
16
16
|
|
17
|
+
h2. Tea::Color
|
18
|
+
|
19
|
+
This module holds utility methods for working with colours. It exists for convenience; colours can still be passed around in the form 0xRRGGBBAA.
|
20
|
+
|
21
|
+
There are some pre-mixed colour constants available in it:
|
22
|
+
|
23
|
+
|_. Color |_. Red |_. Green |_. Blue |_. Alpha |
|
24
|
+
| CLEAR |>. 0 |>. 0 |>. 0 |>. 0 |
|
25
|
+
| BLACK |>. 0 |>. 0 |>. 0 |>. 255 |
|
26
|
+
| DARK_RED |>. 128 |>. 0 |>. 0 |>. 255 |
|
27
|
+
| DARK_GREEN |>. 0 |>. 128 |>. 0 |>. 255 |
|
28
|
+
| DARK_YELLOW |>. 128 |>. 128 |>. 0 |>. 255 |
|
29
|
+
| DARK_BLUE |>. 0 |>. 0 |>. 128 |>. 255 |
|
30
|
+
| DARK_MAGENTA |>. 128 |>. 0 |>. 128 |>. 255 |
|
31
|
+
| DARK_CYAN |>. 0 |>. 128 |>. 128 |>. 255 |
|
32
|
+
| DARK_GRAY |>. 128 |>. 128 |>. 128 |>. 255 |
|
33
|
+
| GRAY |>. 192 |>. 192 |>. 192 |>. 255 |
|
34
|
+
| RED |>. 255 |>. 0 |>. 0 |>. 255 |
|
35
|
+
| GREEN |>. 0 |>. 255 |>. 0 |>. 255 |
|
36
|
+
| YELLOW |>. 255 |>. 255 |>. 0 |>. 255 |
|
37
|
+
| BLUE |>. 0 |>. 0 |>. 255 |>. 255 |
|
38
|
+
| MAGENTA |>. 255 |>. 0 |>. 255 |>. 255 |
|
39
|
+
| CYAN |>. 0 |>. 255 |>. 255 |>. 255 |
|
40
|
+
| WHITE |>. 255 |>. 255 |>. 255 |>. 255 |
|
41
|
+
|
42
|
+
h3. Tea::Color.mix(red, green, blue, alpha=255)
|
43
|
+
|
44
|
+
Create a colour of the form 0xRRGGBBAA. Each argument should be an integer between 0..255 inclusive. The colours returned by this method can be used throughout the graphics API.
|
45
|
+
|
46
|
+
h3. Tea::Color.split(color)
|
47
|
+
|
48
|
+
Split a colour of the form 0xRRGGBBAA into its red, green, blue and alpha parts. A 4-element array is returned, of the form [red, green, blue, alpha], where each element is between 0..255 inclusive.
|
49
|
+
|
17
50
|
h2. Tea::Bitmap
|
18
51
|
|
19
52
|
A Bitmap is a grid of pixels that holds graphics. It can be drawn onto and drawn with.
|
@@ -44,12 +77,13 @@ The save method saves the Bitmap as an image file. Supported formats: BMP, PNG.
|
|
44
77
|
|
45
78
|
Tea::Primitive:
|
46
79
|
* clear()
|
47
|
-
*
|
80
|
+
* [x, y]
|
81
|
+
* [x, y] = color
|
48
82
|
* rect(x, y, w, h, color[, {:mix => :blend (alt. :replace)}])
|
49
83
|
* line(x1, y1, x2, y2, color[, {:antialias => false, :mix => :blend (alt. :replace)}])
|
50
84
|
* circle(x, y, radius, color[, {:outline => false, :antialias => false, :mix => :blend (alt. :replace)}])
|
51
85
|
|
52
|
-
Note that colours are of the form 0xRRGGBBAA.
|
86
|
+
Note that colours are of the form 0xRRGGBBAA, and can be conveniently made using Tea::Color.mix().
|
53
87
|
|
54
88
|
h3. Tea::Bitmap.new(*args)
|
55
89
|
|
@@ -98,12 +132,13 @@ The save method saves the Screen as an image file. Supported formats: BMP, PNG.
|
|
98
132
|
|
99
133
|
Tea::Primitive:
|
100
134
|
* clear()
|
101
|
-
*
|
135
|
+
* [x, y]
|
136
|
+
* [x, y] = color
|
102
137
|
* rect(x, y, w, h, color[, {:mix => :blend (alt. :replace)}])
|
103
138
|
* line(x1, y1, x2, y2, color[, {:antialias => false, :mix => :blend (alt. :replace)}])
|
104
139
|
* circle(x, y, radius, color[, {:outline => false, :antialias => false, :mix => :blend (alt. :replace)}])
|
105
140
|
|
106
|
-
Note that colours are of the form 0xRRGGBBAA.
|
141
|
+
Note that colours are of the form 0xRRGGBBAA, and can be conveniently made with Tea::Color.mix().
|
107
142
|
|
108
143
|
h3. Tea::Screen.set_mode(width, height)
|
109
144
|
|
@@ -182,7 +217,9 @@ require 'tea'
|
|
182
217
|
|
183
218
|
class MyEventHandler
|
184
219
|
attr_reader :done
|
185
|
-
def initialize
|
220
|
+
def initialize
|
221
|
+
@done = false
|
222
|
+
end
|
186
223
|
|
187
224
|
include Tea::Event::Dispatch
|
188
225
|
|
data/lib/tea.rb
CHANGED
data/lib/tea/m_color.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# This file holds the Color module.
|
2
|
+
|
3
|
+
#
|
4
|
+
module Tea
|
5
|
+
|
6
|
+
# The Color module holds utility methods that can mix and split colors.
|
7
|
+
module Color
|
8
|
+
|
9
|
+
# Create a color from red, green, blue and optionally alpha parts.
|
10
|
+
# All values passed in should be within 0..255 inclusive.
|
11
|
+
def Color.mix(red, green, blue, alpha=255)
|
12
|
+
((red & 0xff) << 24) |
|
13
|
+
((green & 0xff) << 16) |
|
14
|
+
((blue & 0xff) << 8) |
|
15
|
+
(alpha & 0xff)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Break a colour up into its red, green, blue and alpha parts.
|
19
|
+
# Returns a 4-element array of the form [red, green, blue, alpha], where
|
20
|
+
# each element is within 0..255 inclusive.
|
21
|
+
def Color.split(color)
|
22
|
+
[(color & 0xff000000) >> 24,
|
23
|
+
(color & 0x00ff0000) >> 16,
|
24
|
+
(color & 0x0000ff00) >> 8,
|
25
|
+
(color & 0x000000ff)]
|
26
|
+
end
|
27
|
+
|
28
|
+
CLEAR = Color.mix( 0, 0, 0, 0)
|
29
|
+
|
30
|
+
BLACK = Color.mix( 0, 0, 0)
|
31
|
+
DARK_RED = Color.mix(128, 0, 0)
|
32
|
+
DARK_GREEN = Color.mix( 0, 128, 0)
|
33
|
+
DARK_YELLOW = Color.mix(128, 128, 0)
|
34
|
+
DARK_BLUE = Color.mix( 0, 0, 128)
|
35
|
+
DARK_MAGENTA = Color.mix(128, 0, 128)
|
36
|
+
DARK_CYAN = Color.mix( 0, 128, 128)
|
37
|
+
DARK_GRAY = Color.mix(128, 128, 128)
|
38
|
+
|
39
|
+
GRAY = Color.mix(192, 192, 192)
|
40
|
+
RED = Color.mix(255, 0, 0)
|
41
|
+
GREEN = Color.mix( 0, 255, 0)
|
42
|
+
YELLOW = Color.mix(255, 255, 0)
|
43
|
+
BLUE = Color.mix( 0, 0, 255)
|
44
|
+
MAGENTA = Color.mix(255, 0, 255)
|
45
|
+
CYAN = Color.mix( 0, 255, 255)
|
46
|
+
WHITE = Color.mix(255, 255, 255)
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/lib/tea/mix_grabbing.rb
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
require 'sdl'
|
5
5
|
|
6
6
|
require 'tea/c_bitmap'
|
7
|
+
require 'tea/m_color'
|
7
8
|
|
8
9
|
#
|
9
10
|
module Tea
|
@@ -48,12 +49,11 @@ module Tea
|
|
48
49
|
raise ArgumentError, "wrong number of arguments (#{box.length} for 0 or 4)", caller
|
49
50
|
end
|
50
51
|
|
51
|
-
bitmap = Bitmap.new(w, h,
|
52
|
+
bitmap = Bitmap.new(w, h, Tea::Color::CLEAR)
|
52
53
|
|
53
|
-
for buf_y in y
|
54
|
-
for buf_x in x
|
55
|
-
|
56
|
-
bitmap.point buf_x - x, buf_y - y, ((red << 24) | (green << 16) | (blue << 8) | alpha)
|
54
|
+
for buf_y in y...(y + h)
|
55
|
+
for buf_x in x...(x + w)
|
56
|
+
bitmap[buf_x - x, buf_y - y] = Color.mix(*buffer.get_rgba(buffer[buf_x, buf_y]))
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
data/lib/tea/mix_primitive.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'sdl'
|
4
4
|
|
5
|
+
require 'tea/m_color'
|
6
|
+
|
5
7
|
#
|
6
8
|
module Tea
|
7
9
|
|
@@ -24,16 +26,30 @@ module Tea
|
|
24
26
|
primitive_color(0x000000ff)
|
25
27
|
end
|
26
28
|
|
29
|
+
# Get the color (0xRRGGBBAA) at the point (x, y) on the Bitmap.
|
30
|
+
#
|
31
|
+
# Raises Tea::Error if (x, y) is outside of the Bitmap's area.
|
32
|
+
def [](x, y)
|
33
|
+
buffer = primitive_buffer
|
34
|
+
w = buffer.w
|
35
|
+
h = buffer.h
|
36
|
+
if x < 0 || x >= w || y < 0 || y >= h
|
37
|
+
raise Tea::Error, "can't get color at (#{x}, #{y}), not within #{w}x#{h}", caller
|
38
|
+
end
|
39
|
+
Color.mix(*buffer.get_rgba(buffer[x, y]))
|
40
|
+
end
|
41
|
+
|
27
42
|
# Plot a point at (x, y) with the given color (0xRRGGBBAA) on the Bitmap.
|
28
43
|
#
|
29
|
-
# Raises Tea::Error if (x, y) is outside of the
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
44
|
+
# Raises Tea::Error if (x, y) is outside of the Bitmap's area.
|
45
|
+
def []=(x, y, color)
|
46
|
+
buffer = primitive_buffer
|
47
|
+
w = buffer.w
|
48
|
+
h = buffer.h
|
49
|
+
if x < 0 || x >= w || y < 0 || y >= h
|
34
50
|
raise Tea::Error, "can't plot point (#{x}, #{y}), not within #{w}x#{h}", caller
|
35
51
|
end
|
36
|
-
|
52
|
+
buffer[x, y] = primitive_color(color)
|
37
53
|
end
|
38
54
|
|
39
55
|
# Mixer for alpha blend mix strategy.
|
@@ -68,7 +84,7 @@ module Tea
|
|
68
84
|
raise Tea::Error, "can't draw rectangle of size #{w}x#{h}", caller
|
69
85
|
end
|
70
86
|
|
71
|
-
r, g, b, a =
|
87
|
+
r, g, b, a = Color.split(color)
|
72
88
|
|
73
89
|
if options == nil || options[:mix] == nil
|
74
90
|
mix = (a < 0xff) ? :blend : :replace
|
@@ -105,7 +121,7 @@ module Tea
|
|
105
121
|
# +:replace+ writes over the RGBA parts of the line
|
106
122
|
# destination pixels.
|
107
123
|
def line(x1, y1, x2, y2, color, options=nil)
|
108
|
-
r, g, b, a =
|
124
|
+
r, g, b, a = Color.split(color)
|
109
125
|
|
110
126
|
if options == nil
|
111
127
|
antialias = false
|
@@ -149,7 +165,7 @@ module Tea
|
|
149
165
|
raise Tea::Error, "can't draw circle with radius #{radius}", caller
|
150
166
|
end
|
151
167
|
|
152
|
-
r, g, b, a =
|
168
|
+
r, g, b, a = Color.split(color)
|
153
169
|
|
154
170
|
if options == nil
|
155
171
|
outline = false
|
@@ -198,16 +214,7 @@ module Tea
|
|
198
214
|
# Convert hex_color of the form 0xRRGGBBAA to a color value the
|
199
215
|
# primitive_buffer understands.
|
200
216
|
def primitive_color(hex_color)
|
201
|
-
primitive_rgba_to_color(*
|
202
|
-
end
|
203
|
-
|
204
|
-
# Break hex_color from the form 0xRRGGBBAA to [red, green, blue, alpha].
|
205
|
-
def primitive_hex_to_rgba(hex_color)
|
206
|
-
red = (hex_color & 0xff000000) >> 24
|
207
|
-
green = (hex_color & 0x00ff0000) >> 16
|
208
|
-
blue = (hex_color & 0x0000ff00) >> 8
|
209
|
-
alpha = (hex_color & 0x000000ff)
|
210
|
-
[red, green, blue, alpha]
|
217
|
+
primitive_rgba_to_color(*Color.split(hex_color))
|
211
218
|
end
|
212
219
|
|
213
220
|
# Generate a colour compatible with the primitive buffer.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tung-tea
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- lib/tea/c_bitmap.rb
|
81
81
|
- lib/tea/c_error.rb
|
82
82
|
- lib/tea/c_sound.rb
|
83
|
+
- lib/tea/m_color.rb
|
83
84
|
- lib/tea/m_event.rb
|
84
85
|
- lib/tea/m_event_app.rb
|
85
86
|
- lib/tea/m_event_dispatch.rb
|