rubygoo 0.0.7 → 0.0.8
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/History.txt +9 -0
- data/Manifest.txt +2 -7
- data/README.txt +1 -8
- data/Rakefile +6 -23
- data/TODO +2 -0
- data/lib/inflections.rb +52 -0
- data/lib/inflector.rb +279 -0
- data/lib/rubygoo/adapters/gosu_render_adapter.rb +22 -0
- data/lib/rubygoo/adapters/rubygame_render_adapter.rb +21 -2
- data/lib/rubygoo/app.rb +9 -4
- data/lib/rubygoo/button.rb +54 -33
- data/lib/rubygoo/check_box.rb +20 -8
- data/lib/rubygoo/container.rb +40 -5
- data/lib/rubygoo/icon.rb +9 -1
- data/lib/rubygoo/label.rb +1 -0
- data/lib/rubygoo/radio_button.rb +2 -2
- data/lib/rubygoo/text_field.rb +7 -6
- data/lib/rubygoo/widget.rb +80 -20
- data/samples/create_gui.rb +6 -14
- data/samples/rubygame_app.rb +1 -0
- data/test/test_setup.rb +1 -0
- data/test/widget_spec.rb +10 -2
- data/themes/default/config.yml +2 -0
- metadata +6 -11
- data/docs/Picture 1.png +0 -0
- data/docs/ui/UI.hpp +0 -425
- data/docs/ui/abutton.png +0 -0
- data/docs/ui/background.png +0 -0
- data/docs/ui/button.png +0 -0
- data/docs/ui/moveable.png +0 -0
- data/docs/ui/textbutton.png +0 -0
@@ -10,6 +10,11 @@ module Rubygoo
|
|
10
10
|
@screen.draw_box [x1,y1], [x2,y2], convert_color(color)
|
11
11
|
end
|
12
12
|
|
13
|
+
def draw_line(x1,y1,x2,y2,color)
|
14
|
+
c = convert_color(color)
|
15
|
+
@screen.draw_line_a [x1, y1], [x2, y2], c
|
16
|
+
end
|
17
|
+
|
13
18
|
def draw_circle(cx,cy,radius,color)
|
14
19
|
@screen.draw_circle_a [cx,cy],radius,convert_color(color)
|
15
20
|
end
|
@@ -36,8 +41,22 @@ module Rubygoo
|
|
36
41
|
@screen.flip
|
37
42
|
end
|
38
43
|
|
39
|
-
def draw_image(img,
|
40
|
-
img.blit @screen, [
|
44
|
+
def draw_image(img, to_x, to_y, color=nil)
|
45
|
+
img.blit @screen, [to_x,to_y]
|
46
|
+
end
|
47
|
+
|
48
|
+
def draw_partial_image(img, to_x, to_y,
|
49
|
+
from_x=nil,from_y=nil,from_w=nil,from_h=nil, color=nil)
|
50
|
+
if from_x
|
51
|
+
if from_w
|
52
|
+
from = [from_x,from_y,from_w,from_h]
|
53
|
+
else
|
54
|
+
from = [from_x,from_y]
|
55
|
+
end
|
56
|
+
img.blit @screen, [to_x,to_y], from
|
57
|
+
else
|
58
|
+
img.blit @screen, [to_x,to_y]
|
59
|
+
end
|
41
60
|
end
|
42
61
|
|
43
62
|
def size_text(text, font_file, font_size)
|
data/lib/rubygoo/app.rb
CHANGED
@@ -9,7 +9,7 @@ module Rubygoo
|
|
9
9
|
DEFAULT_PARAMS = {:theme=>'default',:x=>10,:y=>10,:data_dir=>File.join(File.dirname(__FILE__),"..","..","themes"),:mouse_cursor => true}
|
10
10
|
attr_accessor :theme_name, :theme, :data_dir, :theme_dir, :renderer, :tab_groups, :mouse
|
11
11
|
|
12
|
-
def initialize(opts={})
|
12
|
+
def initialize(opts={}, &block)
|
13
13
|
merged_opts = DEFAULT_PARAMS.merge opts
|
14
14
|
@widgets = []
|
15
15
|
@tab_groups = []
|
@@ -20,7 +20,6 @@ module Rubygoo
|
|
20
20
|
@theme_name = theme_name
|
21
21
|
@theme = load_theme theme_name
|
22
22
|
@renderer = merged_opts[:renderer]
|
23
|
-
super merged_opts
|
24
23
|
|
25
24
|
# should this go here?
|
26
25
|
@mouse_cursor = merged_opts[:mouse_cursor]
|
@@ -31,6 +30,8 @@ module Rubygoo
|
|
31
30
|
@mouse.added
|
32
31
|
end
|
33
32
|
@mouse_dragging = false
|
33
|
+
|
34
|
+
super merged_opts, &block
|
34
35
|
end
|
35
36
|
|
36
37
|
def app()
|
@@ -160,7 +161,11 @@ module Rubygoo
|
|
160
161
|
def update(time)
|
161
162
|
_update(time)
|
162
163
|
end
|
163
|
-
|
164
|
-
|
165
164
|
end
|
166
165
|
end
|
166
|
+
#class Object
|
167
|
+
# p "DEFINING IN OBJECT"
|
168
|
+
# def app(*args, &block)
|
169
|
+
# ::Rubygoo::App.new(*args,&block)
|
170
|
+
# end
|
171
|
+
#end
|
data/lib/rubygoo/button.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
module Rubygoo
|
2
2
|
class Button < Widget
|
3
3
|
can_fire :pressed
|
4
|
-
def initialize(text, opts={})
|
5
|
-
super opts
|
6
4
|
|
7
|
-
|
5
|
+
attr_reader :text
|
6
|
+
goo_prop :icon_image, :image, :hover_image
|
7
|
+
|
8
|
+
def initialize(new_text, opts={})
|
9
|
+
@icon_image = opts[:icon]
|
10
|
+
@image = opts[:image]
|
11
|
+
@hover_image = opts[:hover_image]
|
12
|
+
@text = new_text
|
8
13
|
|
9
|
-
|
14
|
+
super opts
|
10
15
|
end
|
11
16
|
|
12
17
|
def added()
|
@@ -21,12 +26,19 @@ module Rubygoo
|
|
21
26
|
@disabled_color = theme_property :disabled_color
|
22
27
|
|
23
28
|
@font_file = File.join(@app.theme_dir,font)
|
24
|
-
@rendered_text ||= @app.renderer.render_text @text, @font_file, @font_size, @color
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
@rendered_text ||= @app.renderer.render_text @text, @font_file, @font_size, @color if @text and !@text.empty?
|
30
|
+
|
31
|
+
if @image
|
32
|
+
@w = @image.width+2*@padding_left
|
33
|
+
@h = @image.height+2*@padding_top
|
34
|
+
@x = @x - @padding_left
|
35
|
+
@y = @y - @padding_top
|
36
|
+
else
|
37
|
+
@w = @rendered_text.width+2*@padding_left
|
38
|
+
@h = @rendered_text.height+2*@padding_top
|
39
|
+
@x = @x - @padding_left
|
40
|
+
@y = @y - @padding_top
|
41
|
+
end
|
30
42
|
|
31
43
|
update_rect
|
32
44
|
end
|
@@ -55,33 +67,42 @@ module Rubygoo
|
|
55
67
|
x2 = @rect[2] + x1
|
56
68
|
y2 = @rect[3] + y1
|
57
69
|
|
58
|
-
|
59
|
-
if @
|
60
|
-
adapter.
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
+
img = @image.nil? ? @rendered_text : @image
|
71
|
+
if @image
|
72
|
+
adapter.draw_image @image, @x+@padding_left, @y+@padding_top, @color
|
73
|
+
else
|
74
|
+
|
75
|
+
if @focussed
|
76
|
+
adapter.fill x1, y1, x2, y2, @focus_color
|
77
|
+
elsif @bg_color
|
78
|
+
adapter.fill x1, y1, x2, y2, @bg_color
|
79
|
+
end
|
80
|
+
if @border_color
|
81
|
+
adapter.draw_box x1, y1, x2, y2, @border_color
|
82
|
+
end
|
83
|
+
|
84
|
+
if @disabled_color and !enabled?
|
85
|
+
adapter.fill x1, y1, x2, y2, @disabled_color
|
86
|
+
end
|
87
|
+
|
88
|
+
if @icon_image
|
89
|
+
# TODO center icon
|
90
|
+
ix = x1#+((x2-x1)-@icon.w)
|
91
|
+
iy = y1#+((y2-y1)-@icon.h)
|
92
|
+
adapter.draw_image @icon_image, ix+@padding_left,iy+@padding_top
|
93
|
+
end
|
94
|
+
|
95
|
+
adapter.draw_image @rendered_text, @x+@padding_left, @y+@padding_top, @color
|
70
96
|
end
|
71
97
|
|
72
|
-
if
|
73
|
-
|
98
|
+
if mouse_over? and (@hover_image or @hover_color)
|
99
|
+
if @hover_image
|
100
|
+
adapter.draw_image @hover_image, @x+@padding_left, @y+@padding_top, @color
|
101
|
+
else
|
102
|
+
adapter.fill x1, y1, x2, y2, @hover_color
|
103
|
+
end
|
74
104
|
end
|
75
105
|
|
76
|
-
if @icon
|
77
|
-
# TODO center icon
|
78
|
-
ix = x1#+((x2-x1)-@icon.w)
|
79
|
-
iy = y1#+((y2-y1)-@icon.h)
|
80
|
-
adapter.draw_image @icon, ix+@x_pad,iy+@y_pad
|
81
|
-
end
|
82
|
-
|
83
|
-
adapter.draw_image @rendered_text, @x+@x_pad, @y+@y_pad, @color
|
84
|
-
|
85
106
|
end
|
86
107
|
end
|
87
108
|
end
|
data/lib/rubygoo/check_box.rb
CHANGED
@@ -2,17 +2,22 @@ require 'label'
|
|
2
2
|
module Rubygoo
|
3
3
|
class CheckBox < Widget
|
4
4
|
attr_accessor :checked
|
5
|
+
attr_reader :label_text
|
5
6
|
can_fire :checked
|
7
|
+
|
6
8
|
DEFAULT_PARAMS = {:align=>:right}
|
9
|
+
DEFAULT_PARAMS.keys.each do |k|
|
10
|
+
goo_prop k
|
11
|
+
end
|
12
|
+
|
7
13
|
def initialize(opts={})
|
8
14
|
opts = DEFAULT_PARAMS.merge opts
|
9
|
-
super opts
|
10
15
|
@checked = opts[:checked]
|
11
16
|
|
12
|
-
|
13
|
-
# TODO maybe I should do this in added
|
14
|
-
@label_text = opts[:label]
|
17
|
+
@label_text = opts[:label_text]
|
15
18
|
@label_alignment = opts[:align]
|
19
|
+
|
20
|
+
super opts
|
16
21
|
end
|
17
22
|
|
18
23
|
def added()
|
@@ -23,18 +28,18 @@ module Rubygoo
|
|
23
28
|
@checked_color = theme_property :checked_color
|
24
29
|
@hover_color = theme_property :hover_color
|
25
30
|
|
26
|
-
@rect = Rect.new [@x-@
|
31
|
+
@rect = Rect.new [@x-@padding_left,@y-@padding_top,@w+2*@padding_left,@h+2*@padding_top]
|
27
32
|
unless @label_text.nil? or @label_text.empty?
|
28
33
|
@label = Label.new @label_text, :x=>0,:y=>0, :relative=>@relative, :visible=>false
|
29
34
|
@parent.add @label
|
30
35
|
|
31
36
|
case @label_alignment
|
32
37
|
when :right
|
33
|
-
lx = @x+2*@
|
38
|
+
lx = @x+2*@padding_left+@w
|
34
39
|
ly = @y
|
35
40
|
when :left
|
36
41
|
ly = @y
|
37
|
-
lx = @x-2*@
|
42
|
+
lx = @x-2*@padding_left-@label.w
|
38
43
|
end
|
39
44
|
@label.x = lx
|
40
45
|
@label.y = ly
|
@@ -94,7 +99,7 @@ module Rubygoo
|
|
94
99
|
end
|
95
100
|
|
96
101
|
if @checked
|
97
|
-
rect = @rect.inflate(-@
|
102
|
+
rect = @rect.inflate(-@padding_left,-@padding_top)
|
98
103
|
cx1 = rect[0]
|
99
104
|
cy1 = rect[1]
|
100
105
|
cx2 = rect[2] + x1
|
@@ -110,6 +115,13 @@ module Rubygoo
|
|
110
115
|
adapter.draw_box x1, y1, x2, y2, @border_color
|
111
116
|
end
|
112
117
|
end
|
118
|
+
|
119
|
+
# DSL methods
|
120
|
+
def label_text(new_val=nil)
|
121
|
+
@label_text = new_val if new_val
|
122
|
+
@label_text
|
123
|
+
end
|
124
|
+
|
113
125
|
end
|
114
126
|
end
|
115
127
|
|
data/lib/rubygoo/container.rb
CHANGED
@@ -3,12 +3,14 @@ module Rubygoo
|
|
3
3
|
attr_accessor :widgets, :bg_color, :rect, :queued_widgets
|
4
4
|
|
5
5
|
def initialize(opts={})
|
6
|
-
|
6
|
+
@auto_resize = opts[:auto_resize]
|
7
7
|
# cannot get this if we don't have an app yet
|
8
8
|
@bg_color = theme_property :bg_color if self.app
|
9
9
|
@queued_widgets = []
|
10
10
|
@widgets = []
|
11
11
|
@modal_widgets = []
|
12
|
+
|
13
|
+
super opts
|
12
14
|
end
|
13
15
|
|
14
16
|
# called when we are added to another container
|
@@ -36,8 +38,10 @@ module Rubygoo
|
|
36
38
|
end
|
37
39
|
w.added
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
+
if @auto_resize
|
42
|
+
w.when :resized do |resized_widget|
|
43
|
+
resize resized_widget
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
@widgets << w
|
@@ -61,6 +65,17 @@ module Rubygoo
|
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
68
|
+
# Remove all our children from the container.
|
69
|
+
def clear()
|
70
|
+
death_widgets = @widgets + @queued_widgets + @modal_widgets
|
71
|
+
@widgets = []
|
72
|
+
@queued_widgets = []
|
73
|
+
@modal_widgets = []
|
74
|
+
death_widgets.each do |w|
|
75
|
+
w.removed
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
64
79
|
# draw ourself and our children
|
65
80
|
def _draw(adapter)
|
66
81
|
# any container specific code here (border_colors?)
|
@@ -115,6 +130,14 @@ module Rubygoo
|
|
115
130
|
end
|
116
131
|
end
|
117
132
|
|
133
|
+
# called when there is motion w/ the mouse button down
|
134
|
+
def _mouse_dragging(event)
|
135
|
+
mouse_dragging event
|
136
|
+
@widgets.select{|w| w.contains? event.data[:x],event.data[:y] and w.enabled?}.each do |w|
|
137
|
+
w._mouse_dragging event
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
118
141
|
# pass on the key press to our widgets
|
119
142
|
def _key_pressed(event)
|
120
143
|
key_pressed event
|
@@ -156,10 +179,22 @@ module Rubygoo
|
|
156
179
|
max_w = w_width if w_width > max_w
|
157
180
|
max_h = w_height if w_height > max_h
|
158
181
|
end
|
159
|
-
@w = max_w - @x + 2*@
|
160
|
-
@h = max_h - @y + 2*@
|
182
|
+
@w = max_w - @x + 2*@padding_left
|
183
|
+
@h = max_h - @y + 2*@padding_top
|
161
184
|
update_rect
|
162
185
|
end
|
186
|
+
|
187
|
+
# def self.inherited(by_obj)
|
188
|
+
# Widget.inherited(by_obj)
|
189
|
+
# end
|
190
|
+
|
191
|
+
# returns the child widget with the id passed in
|
192
|
+
def get(id)
|
193
|
+
@widgets.each do |w|
|
194
|
+
found_w = w.get(id)
|
195
|
+
return found_w if found_w
|
196
|
+
end
|
197
|
+
end
|
163
198
|
end
|
164
199
|
end
|
165
200
|
|
data/lib/rubygoo/icon.rb
CHANGED
@@ -19,8 +19,16 @@ module Rubygoo
|
|
19
19
|
# TODO center icon
|
20
20
|
ix = x1#+((x2-x1)-@icon.w)
|
21
21
|
iy = y1#+((y2-y1)-@icon.h)
|
22
|
-
adapter.draw_image @icon, ix+@
|
22
|
+
adapter.draw_image @icon, ix+@padding_left,iy+@padding_top
|
23
23
|
end
|
24
|
+
|
25
|
+
#DSL methods
|
26
|
+
def icon_image(new_val=nil)
|
27
|
+
@icon = new_val if new_val
|
28
|
+
@icon
|
29
|
+
end
|
30
|
+
|
24
31
|
end
|
32
|
+
|
25
33
|
end
|
26
34
|
|
data/lib/rubygoo/label.rb
CHANGED
data/lib/rubygoo/radio_button.rb
CHANGED
@@ -17,11 +17,11 @@ module Rubygoo
|
|
17
17
|
end
|
18
18
|
|
19
19
|
if @checked
|
20
|
-
adapter.draw_circle_filled @rect.centerx, @rect.centery, radius-@
|
20
|
+
adapter.draw_circle_filled @rect.centerx, @rect.centery, radius-@padding_left, @checked_color
|
21
21
|
end
|
22
22
|
|
23
23
|
if mouse_over? and @hover_color
|
24
|
-
adapter.draw_circle_filled @rect.centerx, @rect.centery, radius-@
|
24
|
+
adapter.draw_circle_filled @rect.centerx, @rect.centery, radius-@padding_left, @hover_color
|
25
25
|
end
|
26
26
|
|
27
27
|
if @border_color
|
data/lib/rubygoo/text_field.rb
CHANGED
@@ -2,6 +2,7 @@ module Rubygoo
|
|
2
2
|
class TextField < Widget
|
3
3
|
SPACE = " "
|
4
4
|
|
5
|
+
attr_reader :text
|
5
6
|
def initialize(text, opts={})
|
6
7
|
super opts
|
7
8
|
@text = text
|
@@ -58,14 +59,14 @@ module Rubygoo
|
|
58
59
|
|
59
60
|
def render()
|
60
61
|
if @text.empty?
|
61
|
-
w = [@w,@min_w].max + @
|
62
|
-
h = [@h,@min_h].max + @
|
62
|
+
w = [@w,@min_w].max + @padding_left
|
63
|
+
h = [@h,@min_h].max + @padding_top
|
63
64
|
@rendered_text = nil
|
64
65
|
@rect = Rect.new [@x,@y,w,h]
|
65
66
|
else
|
66
67
|
@rendered_text = @app.renderer.render_text @text, @font_file, @font_size, @color
|
67
|
-
w = [@rendered_text.width,@min_w].max + @
|
68
|
-
h = [@rendered_text.height,@min_h].max + @
|
68
|
+
w = [@rendered_text.width,@min_w].max + @padding_left
|
69
|
+
h = [@rendered_text.height,@min_h].max + @padding_top
|
69
70
|
if @max_length
|
70
71
|
w = [w,@max_w].min
|
71
72
|
h = [h,@max_h].min
|
@@ -287,9 +288,9 @@ module Rubygoo
|
|
287
288
|
end
|
288
289
|
|
289
290
|
when K_DELETE
|
290
|
-
if @select_pos != @caret_pos
|
291
|
+
if @select_pos != @caret_pos
|
291
292
|
delete_selected()
|
292
|
-
elsif @caret_pos < @text.length
|
293
|
+
elsif @caret_pos < @text.length
|
293
294
|
@text = @text.slice(0,@caret_pos) + @text.slice(@caret_pos+1,@text.length-@caret_pos-1)
|
294
295
|
@select_pos = @caret_pos
|
295
296
|
end
|
data/lib/rubygoo/widget.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'publisher'
|
2
2
|
require 'goo_color'
|
3
3
|
require 'rect'
|
4
|
+
require 'inflector'
|
4
5
|
module Rubygoo
|
5
6
|
class Widget
|
6
7
|
extend Publisher
|
8
|
+
include Inflector
|
7
9
|
|
8
10
|
# fire resized whenever a dimensional variable changes
|
9
11
|
can_fire :resized, :mouse_enter, :mouse_exit, :focus, :unfocus,
|
@@ -11,7 +13,7 @@ module Rubygoo
|
|
11
13
|
:mouse_dragging, :mouse_motion, :enable, :disable, :hide, :show
|
12
14
|
|
13
15
|
attr_accessor :enabled, :parent, :container, :opts,
|
14
|
-
:x, :y, :w, :h, :app, :
|
16
|
+
:x, :y, :w, :h, :app, :padding_left, :padding_top, :focussed, :goo_id,
|
15
17
|
:focus_priority, :relative, :mouse_over, :visible
|
16
18
|
|
17
19
|
DEFAULT_PARAMS = {
|
@@ -19,27 +21,60 @@ module Rubygoo
|
|
19
21
|
:y => 0,
|
20
22
|
:w => 1,
|
21
23
|
:h => 1,
|
22
|
-
:
|
23
|
-
:
|
24
|
+
:padding_left => 2,
|
25
|
+
:padding_right => 2,
|
26
|
+
:padding_top => 2,
|
27
|
+
:padding_bottom => 2,
|
24
28
|
:relative => false,
|
25
29
|
:enabled => true,
|
26
30
|
:visible => true,
|
27
31
|
}
|
28
|
-
|
32
|
+
|
33
|
+
|
34
|
+
def self.goo_prop(*keys)
|
35
|
+
for k in keys
|
36
|
+
define_method k do |*args|
|
37
|
+
v = args.shift
|
38
|
+
ivar = "@#{k.to_s}"
|
39
|
+
instance_variable_set(ivar,v) if v
|
40
|
+
instance_variable_get(ivar)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
DEFAULT_PARAMS.keys.each do |k|
|
46
|
+
goo_prop k
|
47
|
+
end
|
48
|
+
|
49
|
+
def initialize(opts={}, &block)
|
29
50
|
merged_opts = DEFAULT_PARAMS.merge opts
|
30
51
|
@x = merged_opts[:x]
|
31
52
|
@y = merged_opts[:y]
|
32
|
-
@
|
33
|
-
@
|
53
|
+
@padding_left = merged_opts[:padding_left]
|
54
|
+
@padding_right = merged_opts[:padding_right]
|
55
|
+
@padding_top = merged_opts[:padding_top]
|
56
|
+
@padding_bottom = merged_opts[:padding_bottom]
|
34
57
|
@w = merged_opts[:w]
|
35
58
|
@h = merged_opts[:h]
|
36
59
|
@relative = merged_opts[:relative]
|
37
60
|
@enabled = merged_opts[:enabled]
|
38
61
|
@visible = merged_opts[:visible]
|
62
|
+
@goo_id = merged_opts[:id]
|
39
63
|
|
40
64
|
@opts = merged_opts
|
41
65
|
|
42
66
|
update_rect
|
67
|
+
|
68
|
+
instance_eval &block if block_given?
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.inherited(by_obj)
|
72
|
+
meth = Inflector.underscore(Inflector.demodulize(by_obj)).to_sym
|
73
|
+
if meth == :app
|
74
|
+
Object.class_eval "def goo_app(*args, &block);#{by_obj}.new(*args,&block);end"
|
75
|
+
else
|
76
|
+
Widget.class_eval "def #{meth}(*args, &block);obj=#{by_obj}.new(*args,&block);add(obj) if self.respond_to?(:add);obj;end"
|
77
|
+
end
|
43
78
|
end
|
44
79
|
|
45
80
|
def update_rect()
|
@@ -80,19 +115,40 @@ module Rubygoo
|
|
80
115
|
# it will walk up the object hierarchy if needed
|
81
116
|
def theme_property(prop_key)
|
82
117
|
prop = nil
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
118
|
+
return @opts[prop_key] if @opts and @opts[prop_key]
|
119
|
+
|
120
|
+
|
121
|
+
# look up based on :id
|
122
|
+
if @goo_id
|
123
|
+
id_theme = app.theme[@goo_id]
|
124
|
+
if id_theme
|
125
|
+
id_prop = id_theme[prop_key]
|
126
|
+
if id_prop
|
127
|
+
return nil if id_prop == :none
|
128
|
+
prop = id_prop
|
92
129
|
end
|
93
130
|
end
|
94
|
-
|
131
|
+
|
95
132
|
end
|
133
|
+
|
134
|
+
unless prop
|
135
|
+
# look up based on class
|
136
|
+
parent = self.class
|
137
|
+
until parent == Object
|
138
|
+
class_theme = app.theme[parent.to_s]
|
139
|
+
if class_theme
|
140
|
+
class_prop = class_theme[prop_key]
|
141
|
+
if class_prop
|
142
|
+
return nil if class_prop == :none
|
143
|
+
prop = class_prop
|
144
|
+
break
|
145
|
+
end
|
146
|
+
end
|
147
|
+
parent = parent.superclass
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# replace colors w/ GooColor
|
96
152
|
if prop_key.to_s.match(/color/i) and prop
|
97
153
|
get_color prop
|
98
154
|
else
|
@@ -152,15 +208,15 @@ module Rubygoo
|
|
152
208
|
end
|
153
209
|
|
154
210
|
# sets x padding and fires resized event
|
155
|
-
def
|
156
|
-
@
|
211
|
+
def padding_left=(val)
|
212
|
+
@padding_left = val
|
157
213
|
update_rect
|
158
214
|
fire :resized, self
|
159
215
|
end
|
160
216
|
|
161
217
|
# sets y padding and fires resized event
|
162
|
-
def
|
163
|
-
@
|
218
|
+
def padding_top=(val)
|
219
|
+
@padding_top = val
|
164
220
|
update_rect
|
165
221
|
fire :resized, self
|
166
222
|
end
|
@@ -331,5 +387,9 @@ module Rubygoo
|
|
331
387
|
def unfocus()
|
332
388
|
end
|
333
389
|
|
390
|
+
def get(id)
|
391
|
+
@goo_id == id ? self : nil
|
392
|
+
end
|
393
|
+
|
334
394
|
end
|
335
395
|
end
|