rubygoo 0.0.6 → 0.0.7

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 CHANGED
@@ -25,3 +25,15 @@
25
25
  * small rendering bugs fixed
26
26
  * added relative positioning of widgets
27
27
  * added RadioButton and RadioGroup
28
+
29
+ === 0.0.7 / 2008-12-6
30
+
31
+ * Getting closer to a 1.0 release
32
+ * added none options in themes
33
+ * added Icon widget
34
+ * cleaned up internals
35
+ * added show/hide and enable/disable to widgets
36
+ * added :label option to checkboxes
37
+ * added mouse_enter/exit events and hover states for button/checkboxes
38
+ * new color theme from nedric
39
+ * bug fixes
data/Manifest.txt CHANGED
@@ -3,9 +3,7 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  TODO
6
- docs/.DS_Store
7
6
  docs/Picture 1.png
8
- docs/ui/.DS_Store
9
7
  docs/ui/UI.hpp
10
8
  docs/ui/abutton.png
11
9
  docs/ui/background.png
@@ -28,6 +26,7 @@ lib/rubygoo/css_colors.rb
28
26
  lib/rubygoo/dialog.rb
29
27
  lib/rubygoo/goo_color.rb
30
28
  lib/rubygoo/goo_event.rb
29
+ lib/rubygoo/icon.rb
31
30
  lib/rubygoo/label.rb
32
31
  lib/rubygoo/mouse_cursor.rb
33
32
  lib/rubygoo/radio_button.rb
data/README.txt CHANGED
@@ -16,114 +16,114 @@ Rubygoo is a theme-able gui framework for use with rubygame and soon gosu. It ha
16
16
  * modal dialogs
17
17
 
18
18
  == SYNOPSIS:
19
- require 'rubygems'
20
- $: << './lib'
21
- $: << File.dirname(__FILE__)
22
- require 'rubygoo'
23
- require 'rubygame'
24
- require 'create_gui'
25
- include Rubygame
26
- include Rubygoo
27
19
 
28
- if $0 == __FILE__
20
+ require 'rubygems'
21
+ $: << './lib'
22
+ $: << File.dirname(__FILE__)
23
+ require 'rubygoo'
24
+ require 'rubygame'
25
+ include Rubygame
26
+ include Rubygoo
29
27
 
30
- screen = Screen.new [600,480]
31
- screen.show_cursor = false
28
+ if $0 == __FILE__
32
29
 
33
- factory = AdapterFactory.new
34
- render_adapter = factory.renderer_for :rubygame, screen
35
- icon = Surface.load File.dirname(__FILE__) + "/icon.png"
30
+ screen = Screen.new [600,480]
31
+ screen.show_cursor = false
36
32
 
37
- app = App.new :renderer => renderer
33
+ factory = AdapterFactory.new
34
+ render_adapter = factory.renderer_for :rubygame, screen
35
+ icon = Surface.load File.dirname(__FILE__) + "/icon.png"
38
36
 
39
- label = Label.new "click the button to set the time", :x=>20, :y=>30
37
+ app = App.new :renderer => render_adapter
40
38
 
41
- button = Button.new "Click Me!", :x=>70, :y=>80, :x_pad=>20, :y_pad=>20, :icon => icon
42
- button.on :pressed do |*opts|
43
- label.set_text(Time.now.to_s)
44
- end
39
+ label = Label.new "click the button to set the time", :x=>20, :y=>30
45
40
 
46
- check = CheckBox.new :x=>370, :y=>70, :w=>20, :h=>20
47
- check.on :checked do
48
- label.set_text("CHECKED [#{check.checked?}]")
49
- end
41
+ button = Button.new "Click Me!", :x=>70, :y=>80, :x_pad=>20, :y_pad=>20, :icon => icon
42
+ button.on :pressed do |*opts|
43
+ label.set_text(Time.now.to_s)
44
+ end
50
45
 
51
- text_field = TextField.new "initial text", :x => 70, :y => 170, :max_length => 20, :min_length => 6
46
+ check = CheckBox.new :x=>370, :y=>70, :w=>20, :h=>20
47
+ check.on :checked do
48
+ label.set_text("CHECKED [#{check.checked?}]")
49
+ end
52
50
 
53
- text_field.on_key K_RETURN, K_KP_ENTER do |evt|
54
- puts "BOO-YAH"
55
- end
51
+ text_field = TextField.new "initial text", :x => 70, :y => 170, :max_length => 20, :min_length => 6
56
52
 
57
- modal_button = Button.new "Modal dialogs", :x=>270, :y=>280, :x_pad=>20, :y_pad=>20
58
- modal_button.on :pressed do |*opts|
59
- modal = Dialog.new :modal => app, :x=>60, :y=>110, :w=>250, :h=>250
53
+ text_field.on_key K_RETURN, K_KP_ENTER do |evt|
54
+ puts "BOO-YAH"
55
+ end
60
56
 
61
- modal.add Label.new("Message Here", :x=>20, :y=>70, :x_pad=>20, :y_pad=>20, :relative=>true)
57
+ modal_button = Button.new "Modal dialogs", :x=>270, :y=>280, :x_pad=>20, :y_pad=>20
58
+ modal_button.on :pressed do |*opts|
59
+ modal = Dialog.new :modal => app, :x=>60, :y=>110, :w=>250, :h=>250
62
60
 
63
- ok_butt = Button.new("OK", :x=>70, :y=>180, :x_pad=>20, :y_pad=>20,:relative=>true)
64
- ok_butt.on :pressed do |*opts|
65
- app.remove_modal(modal)
66
- end
67
- modal.add ok_butt
61
+ modal.add Label.new("Message Here", :x=>20, :y=>70, :x_pad=>20, :y_pad=>20, :relative=>true)
68
62
 
69
- modal.show
70
- end
63
+ ok_butt = Button.new("OK", :x=>70, :y=>180, :x_pad=>20, :y_pad=>20,:relative=>true)
64
+ ok_butt.on :pressed do |*opts|
65
+ app.remove_modal(modal)
66
+ end
67
+ modal.add ok_butt
68
+
69
+ modal.display
70
+ end
71
71
 
72
- grp = RadioGroup.new :x=>10, :y=>380, :x_pad=>20, :y_pad=>20, :w=> 500, :h=>80
73
- grp_label = Label.new "RadioGroups are fun!", :x=>40, :y=>10, :w=>20, :h=>20, :relative=>true
74
- grp_radio_one = RadioButton.new :x=>40, :y=>40, :w=>20, :h=>20, :relative=>true
75
- grp_radio_two = RadioButton.new :x=>90, :y=>40, :w=>20, :h=>20, :relative=>true
76
- grp_radio_three = RadioButton.new :x=>140, :y=>40, :w=>20, :h=>20, :relative=>true
77
-
78
- grp.add grp_label, grp_radio_one, grp_radio_two, grp_radio_three
79
-
80
- # implicit tab ordering based on order of addition, can
81
- # specify if you want on widget creation
82
-
83
- # can add many or one at a time
84
- app.add text_field, label, button, modal_button, grp
85
- app.add check
86
-
87
- # pulldown = Pulldown.new {:x=>70, :y=>80}
88
- # pulldown.on :changed do |*opts|
89
- # label.set_text(opts.first)
90
- # end
91
- #
92
- # app.add pulldown
93
-
94
- app_adapter = factory.app_for :rubygame, app
95
-
96
- # rubygame standard stuff below here
97
- queue = EventQueue.new
98
- queue.ignore = [
99
- ActiveEvent, JoyAxisEvent, JoyBallEvent, JoyDownEvent,
100
- JoyHatEvent, JoyUpEvent, ResizeEvent
101
- ]
102
- clock = Clock.new
103
- clock.target_framerate = 20
104
-
105
- catch(:rubygame_quit) do
106
- loop do
107
- queue.each do |event|
108
- case event
109
- when KeyDownEvent
110
- case event.key
111
- when K_ESCAPE
72
+ grp = RadioGroup.new :x=>10, :y=>380, :x_pad=>20, :y_pad=>20, :w=> 500, :h=>80
73
+ grp_label = Label.new "RadioGroups are fun!", :x=>40, :y=>10, :w=>20, :h=>20, :relative=>true
74
+ grp_radio_one = RadioButton.new :x=>40, :y=>40, :w=>20, :h=>20, :relative=>true
75
+ grp_radio_two = RadioButton.new :x=>90, :y=>40, :w=>20, :h=>20, :relative=>true
76
+ grp_radio_three = RadioButton.new :x=>140, :y=>40, :w=>20, :h=>20, :relative=>true
77
+
78
+ grp.add grp_label, grp_radio_one, grp_radio_two, grp_radio_three
79
+
80
+ # implicit tab ordering based on order of addition, can
81
+ # specify if you want on widget creation
82
+
83
+ # can add many or one at a time
84
+ app.add text_field, label, button, modal_button, grp
85
+ app.add check
86
+
87
+ # pulldown = Pulldown.new {:x=>70, :y=>80}
88
+ # pulldown.on :changed do |*opts|
89
+ # label.set_text(opts.first)
90
+ # end
91
+ #
92
+ # app.add pulldown
93
+
94
+ app_adapter = factory.app_for :rubygame, app
95
+
96
+ # rubygame standard stuff below here
97
+ queue = EventQueue.new
98
+ queue.ignore = [
99
+ ActiveEvent, JoyAxisEvent, JoyBallEvent, JoyDownEvent,
100
+ JoyHatEvent, JoyUpEvent, ResizeEvent
101
+ ]
102
+ clock = Clock.new
103
+ clock.target_framerate = 20
104
+
105
+ catch(:rubygame_quit) do
106
+ loop do
107
+ queue.each do |event|
108
+ case event
109
+ when KeyDownEvent
110
+ case event.key
111
+ when K_ESCAPE
112
+ throw :rubygame_quit
113
+ end
114
+ when QuitEvent
112
115
  throw :rubygame_quit
113
116
  end
114
- when QuitEvent
115
- throw :rubygame_quit
117
+
118
+ # pass on our events to the GUI
119
+ app_adapter.on_event event
116
120
  end
117
121
 
118
- # pass on our events to the GUI
119
- app_adapter.on_event event
122
+ app_adapter.update clock.tick
123
+ app_adapter.draw render_adapter
120
124
  end
121
-
122
- app_adapter.update clock.tick
123
- app_adapter.draw render_adapter
124
125
  end
125
126
  end
126
- end
127
127
 
128
128
  == REQUIREMENTS:
129
129
 
data/Rakefile CHANGED
@@ -4,16 +4,16 @@ require 'rubygems'
4
4
  require 'hoe'
5
5
 
6
6
  module Rubygoo
7
- VERSION = '0.0.6'
7
+ VERSION = '0.0.7'
8
8
  end
9
9
  Hoe.new('rubygoo', Rubygoo::VERSION) do |p|
10
10
  p.developer('Shawn Anderson', 'shawn42@gmail.com')
11
11
  p.author = "Shawn Anderson"
12
12
  p.description = "GUI library for use with Gosu or Rubygame"
13
- p.email = 'boss@topfunky.com'
14
- p.summary = "Beautiful graphs for one or multiple datasets."
13
+ p.email = 'shawn42@gmail.com'
14
+ p.summary = "Easy to use gui library for Rubygame or Gosu."
15
15
  p.url = "http://rubygoo.googlecode.com"
16
- p.changes = p.paragraphs_of('History.txt', 6..7).join("\n\n")
16
+ p.changes = p.paragraphs_of('History.txt', 8..8).join("\n\n")
17
17
  p.remote_rdoc_dir = '' # Release to root
18
18
  p.extra_deps << ['constructor']
19
19
  p.extra_deps << ['publisher']
data/TODO CHANGED
@@ -1,8 +1,10 @@
1
1
  TODO
2
+ - enabled?/disabled? effect on tabbing?
3
+ - add show/hide effect on tabbing?
4
+ - tool tips
5
+
2
6
  - KEYTOASCII in gosu adapter
3
7
  - image icons for buttons
4
8
  - create GooImage for agnostic access to image sizes, have renderer handle loading of images?
5
- - double-check the tab focus stuff on modal dialogs (tab focus of containers?)
6
- - can still tab through other widgets when modal dialog is up
7
9
  - make clicking on a component focus it
8
- - add more listener types (when mouse_enter, mouse_leave, mouse_click, focus, key_pressed...)
10
+ - add key-call backs (alt-h, shift-L, ESC)
data/lib/rubygoo/app.rb CHANGED
@@ -1,8 +1,13 @@
1
+ require 'publisher'
2
+
1
3
  module Rubygoo
2
4
  class App < Container
5
+ extend Publisher
6
+
7
+ can_fire :evented
3
8
 
4
9
  DEFAULT_PARAMS = {:theme=>'default',:x=>10,:y=>10,:data_dir=>File.join(File.dirname(__FILE__),"..","..","themes"),:mouse_cursor => true}
5
- attr_accessor :theme_name, :theme, :data_dir, :theme_dir, :renderer, :tab_groups
10
+ attr_accessor :theme_name, :theme, :data_dir, :theme_dir, :renderer, :tab_groups, :mouse
6
11
 
7
12
  def initialize(opts={})
8
13
  merged_opts = DEFAULT_PARAMS.merge opts
@@ -39,8 +44,8 @@ module Rubygoo
39
44
 
40
45
  def draw(screen)
41
46
  @renderer.start_drawing
42
- super @renderer
43
- @mouse.draw @renderer if @mouse_cursor
47
+ _draw @renderer
48
+ @mouse._draw @renderer if @mouse
44
49
  @renderer.finish_drawing
45
50
  end
46
51
 
@@ -65,9 +70,10 @@ module Rubygoo
65
70
  end
66
71
 
67
72
  def on_event(event)
73
+ fire :evented, event
68
74
  case event.event_type
69
75
  when :key_released
70
- modal_keyboard_call :key_released, event
76
+ modal_keyboard_call :_key_released, event
71
77
  when :key_pressed
72
78
  case event.data[:key]
73
79
  when K_TAB
@@ -77,10 +83,10 @@ module Rubygoo
77
83
  focus_forward
78
84
  end
79
85
  else
80
- modal_keyboard_call :key_pressed, event
86
+ modal_keyboard_call :_key_pressed, event
81
87
  end
82
88
  when :mouse_down
83
- modal_mouse_call :mouse_down, event
89
+ modal_mouse_call :_mouse_down, event
84
90
  # TODO: I know this is simplistic and doesn't account for which button
85
91
  # is being pressed/released
86
92
  @mouse_start_x = event.data[:x]
@@ -89,9 +95,11 @@ module Rubygoo
89
95
  x = event.data[:x]
90
96
  y = event.data[:y]
91
97
  if @mouse_start_x == x and @mouse_start_y == y
92
- modal_mouse_call :mouse_up, event
98
+ modal_mouse_call :_mouse_up, event
93
99
  else
94
- modal_mouse_call :mouse_drag, event
100
+ event.data[:start_x] = @mouse_start_x
101
+ event.data[:start_y] = @mouse_start_y
102
+ modal_mouse_call :_mouse_drag, event
95
103
  end
96
104
  @mouse_start_x = nil
97
105
  @mouse_start_y = nil
@@ -99,11 +107,13 @@ module Rubygoo
99
107
  x = event.data[:x]
100
108
  y = event.data[:y]
101
109
  if @mouse_start_x
102
- modal_mouse_call :mouse_dragging, event
110
+ event.data[:start_x] = @mouse_start_x
111
+ event.data[:start_y] = @mouse_start_y
112
+ modal_mouse_call :_mouse_dragging, event
103
113
  else
104
- modal_mouse_call :mouse_motion, event
114
+ modal_mouse_call :_mouse_motion, event
105
115
  end
106
- @mouse.mouse_motion event if @mouse_cursor
116
+ @mouse._mouse_motion event if @mouse
107
117
  end
108
118
  end
109
119
 
@@ -128,8 +138,8 @@ module Rubygoo
128
138
  # distribute our mouse events to our modals first
129
139
  def modal_mouse_call(meth, event)
130
140
  if @modal_widgets.empty?
131
- @widgets.each do |w|
132
- w.send meth, event if w.contains? [event.data[:x],event.data[:y]]
141
+ @widgets.select{|w|w.enabled? and (w.contains? event.data[:x],event.data[:y] or meth == :_mouse_motion) }.each do |w|
142
+ w.send meth, event
133
143
  end
134
144
  else
135
145
  @modal_widgets.last.send meth, event
@@ -139,13 +149,18 @@ module Rubygoo
139
149
  # distribute our keyboard events to our modals first
140
150
  def modal_keyboard_call(meth, event)
141
151
  if @modal_widgets.empty?
142
- @widgets.each do |w|
143
- w.send meth, event if w.focussed?
152
+ @widgets.select{|w|w.enabled? and w.focussed?}.each do |w|
153
+ w.send meth, event
144
154
  end
145
155
  else
146
156
  @modal_widgets.last.send meth, event
147
157
  end
148
158
  end
149
159
 
160
+ def update(time)
161
+ _update(time)
162
+ end
163
+
164
+
150
165
  end
151
166
  end
@@ -11,13 +11,18 @@ module Rubygoo
11
11
 
12
12
  def added()
13
13
  font = theme_property :font
14
- @font_size = theme_property :font_size
14
+ @font_size = @opts[:font_size]
15
+ @font_size ||= theme_property :font_size
15
16
  @color = theme_property :color
16
17
  @bg_color = theme_property :bg_color
17
18
  @border_color = theme_property :border_color
18
19
  @focus_color = theme_property :focus_color
20
+ @hover_color = theme_property :hover_color
21
+ @disabled_color = theme_property :disabled_color
22
+
19
23
  @font_file = File.join(@app.theme_dir,font)
20
24
  @rendered_text ||= @app.renderer.render_text @text, @font_file, @font_size, @color
25
+
21
26
  @w = @rendered_text.width+2*@x_pad
22
27
  @h = @rendered_text.height+2*@y_pad
23
28
  @x = @x - @x_pad
@@ -59,6 +64,15 @@ module Rubygoo
59
64
  if @border_color
60
65
  adapter.draw_box x1, y1, x2, y2, @border_color
61
66
  end
67
+
68
+ if mouse_over? and @hover_color
69
+ adapter.fill x1, y1, x2, y2, @hover_color
70
+ end
71
+
72
+ if @disabled_color and !enabled?
73
+ adapter.fill x1, y1, x2, y2, @disabled_color
74
+ end
75
+
62
76
  if @icon
63
77
  # TODO center icon
64
78
  ix = x1#+((x2-x1)-@icon.w)
@@ -1,20 +1,45 @@
1
+ require 'label'
1
2
  module Rubygoo
2
3
  class CheckBox < Widget
3
4
  attr_accessor :checked
4
5
  can_fire :checked
6
+ DEFAULT_PARAMS = {:align=>:right}
5
7
  def initialize(opts={})
8
+ opts = DEFAULT_PARAMS.merge opts
6
9
  super opts
10
+ @checked = opts[:checked]
11
+
12
+ # only supports label on the right
13
+ # TODO maybe I should do this in added
14
+ @label_text = opts[:label]
15
+ @label_alignment = opts[:align]
7
16
  end
8
17
 
9
18
  def added()
10
- @checked = false
11
19
  @color = theme_property :color
12
20
  @bg_color = theme_property :bg_color
13
21
  @border_color = theme_property :border_color
14
22
  @focus_color = theme_property :focus_color
15
23
  @checked_color = theme_property :checked_color
24
+ @hover_color = theme_property :hover_color
16
25
 
17
26
  @rect = Rect.new [@x-@x_pad,@y-@y_pad,@w+2*@x_pad,@h+2*@y_pad]
27
+ unless @label_text.nil? or @label_text.empty?
28
+ @label = Label.new @label_text, :x=>0,:y=>0, :relative=>@relative, :visible=>false
29
+ @parent.add @label
30
+
31
+ case @label_alignment
32
+ when :right
33
+ lx = @x+2*@x_pad+@w
34
+ ly = @y
35
+ when :left
36
+ ly = @y
37
+ lx = @x-2*@x_pad-@label.w
38
+ end
39
+ @label.x = lx
40
+ @label.y = ly
41
+ @label.show
42
+ end
18
43
  end
19
44
 
20
45
  def checked?()
@@ -77,6 +102,10 @@ module Rubygoo
77
102
  adapter.fill cx1, cy1, cx2, cy2, @checked_color
78
103
  end
79
104
 
105
+ if mouse_over? and @hover_color
106
+ adapter.fill x1, y1, x2, y2, @hover_color
107
+ end
108
+
80
109
  if @border_color
81
110
  adapter.draw_box x1, y1, x2, y2, @border_color
82
111
  end
@@ -1,7 +1,5 @@
1
- require 'publisher'
2
1
  module Rubygoo
3
2
  class Container < Widget
4
- extend Publisher
5
3
  attr_accessor :widgets, :bg_color, :rect, :queued_widgets
6
4
 
7
5
  def initialize(opts={})
@@ -64,7 +62,7 @@ module Rubygoo
64
62
  end
65
63
 
66
64
  # draw ourself and our children
67
- def draw(adapter)
65
+ def _draw(adapter)
68
66
  # any container specific code here (border_colors?)
69
67
  if @bg_color
70
68
  if app == self
@@ -77,61 +75,68 @@ module Rubygoo
77
75
  adapter.fill x1, y1, x2, y2, @bg_color
78
76
  end
79
77
  end
78
+ draw adapter unless app == self
80
79
 
81
80
  # draw kiddies
82
- @widgets.each do |w|
83
- w.draw adapter
81
+ @widgets.select{|w|w.visible?}.each do |w|
82
+ w._draw adapter
84
83
  end
85
84
  end
86
85
 
87
86
  # called when there is a mouse motion
88
- def mouse_motion(event)
89
- @widgets.each do |w|
90
- w.mouse_motion event #if w.contains? [event.data[:x],event.data[:y]]
87
+ def _mouse_motion(event)
88
+ mouse_motion event
89
+ @widgets.select{|w|w.enabled?}.each do |w|
90
+ w._mouse_motion event
91
91
  end
92
92
  end
93
93
 
94
94
  # called when there is a mouse click
95
- def mouse_down(event)
96
- @widgets.each do |w|
97
- w.mouse_down event if w.contains? [event.data[:x],event.data[:y]]
95
+ def _mouse_down(event)
96
+ mouse_down event
97
+ @widgets.select{|w|w.enabled? and w.contains? event.data[:x],event.data[:y] }.each do |w|
98
+ w._mouse_down event
98
99
  end
99
100
  end
100
101
 
101
102
  # called when there is a mouse release
102
- def mouse_up(event)
103
- @widgets.each do |w|
104
- w.mouse_up event if w.contains? [event.data[:x],event.data[:y]]
103
+ def _mouse_up(event)
104
+ mouse_up event
105
+ @widgets.select{|w| w.contains? event.data[:x],event.data[:y] and w.enabled?}.each do |w|
106
+ w._mouse_up event
105
107
  end
106
108
  end
107
109
 
108
110
  # called when there is a mouse release after dragging
109
- def mouse_drag(event)
110
- @widgets.each do |w|
111
- w.mouse_drag event if w.contains? [event.data[:x],event.data[:y]]
111
+ def _mouse_drag(event)
112
+ mouse_drag event
113
+ @widgets.select{|w| w.contains? event.data[:x],event.data[:y] and w.enabled?}.each do |w|
114
+ w._mouse_drag event
112
115
  end
113
116
  end
114
117
 
115
118
  # pass on the key press to our widgets
116
- def key_pressed(event)
117
- @widgets.each do |w|
118
- w.key_pressed event if w.focussed?
119
+ def _key_pressed(event)
120
+ key_pressed event
121
+ @widgets.select{|w| w.enabled? and w.focussed?}.each do |w|
122
+ w._key_pressed event
119
123
  end
120
124
  end
121
125
 
122
126
  # pass on the key release to our widgets
123
- def key_released(event)
124
- @widgets.each do |w|
125
- w.key_released event if w.focussed?
127
+ def _key_released(event)
128
+ key_released event
129
+ @widgets.select{|w| w.enabled? and w.focussed?}.each do |w|
130
+ w._key_released event
126
131
  end
127
132
  end
128
133
 
129
-
130
134
  # called each update cycle with the amount of time that has passed. useful
131
135
  # for animations, etc
132
- def update(time)
133
- @widgets.each do |w|
134
- w.update time
136
+ def _update(time)
137
+ update time unless app == self
138
+ @widgets.select{|w|w.enabled?}.each do |w|
139
+ w._update time
135
140
  end
136
141
  end
137
142
 
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Rubygoo
3
3
  # colors from: http://www.w3schools.com/css/css_colornames.asp
4
- CSS_COLORS = {
4
+ new_colors = {
5
5
  :AliceBlue => [240,248,255,255],
6
6
  :AntiqueWhite => [250,235,215,255],
7
7
  :Aqua => [0,255,255,255],
@@ -150,4 +150,5 @@ module Rubygoo
150
150
  :Yellow => [255,255,0],
151
151
  :YellowGreen => [154,205,50,255]
152
152
  }
153
+ COLORS.merge! new_colors
153
154
  end
@@ -1,9 +1,8 @@
1
1
  module Rubygoo
2
2
  class Dialog < Container
3
3
 
4
- def initialize(opts, &close_callback)
4
+ def initialize(opts)
5
5
  super opts
6
- @close_callback = close_callback if block_given?
7
6
  @modal_target = opts[:modal]
8
7
  end
9
8
 
@@ -15,8 +14,6 @@ module Rubygoo
15
14
 
16
15
  @border_color = theme_property :border_color
17
16
  @focus_color = theme_property :focus_color
18
-
19
- @rect = Rect.new [@x-@x_pad,@y-@y_pad,@w+2*@x_pad,@h+2*@y_pad]
20
17
  end
21
18
 
22
19
  def modal?()
@@ -25,10 +22,15 @@ module Rubygoo
25
22
 
26
23
  # show the dialog by adding it to the @modal_target and
27
24
  # intercepting all of its events
28
- def show()
25
+ def display()
29
26
  @modal_target.add_modal self
30
27
  end
31
28
 
29
+ # close this modal dialog
30
+ def close()
31
+ @modal_target.remove_modal self
32
+ end
33
+
32
34
  end
33
35
  end
34
36
 
@@ -1,5 +1,7 @@
1
- require 'css_colors'
2
1
  module Rubygoo
2
+ COLORS = {} unless const_defined? 'COLORS'
3
+ require 'css_colors'
4
+
3
5
  # is an rbga color
4
6
  class GooColor
5
7
  attr_accessor :r,:g,:b,:a
@@ -7,10 +9,11 @@ module Rubygoo
7
9
  @r,@g,@b,@a = r,g,b,a
8
10
  end
9
11
 
10
- def self.css_color(sym, alpha=nil)
11
- color = CSS_COLORS[sym]
12
- a = alpha.nil? ? color[3] : alpha
13
- GooColor.new color[0], color[1], color[2], a
12
+ def self.color(color, alpha=nil)
13
+ c = COLORS[color]
14
+ c ||= [0,0,0,255]
15
+ c[3] = alpha if alpha
16
+ GooColor.new *c
14
17
  end
15
18
  end
16
19
  end