wxruby 2.0.0-x86-mswin32-60 → 2.0.1-x86-mswin32-60

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.
Binary file
Binary file
Binary file
Binary file
@@ -47,9 +47,7 @@ module WxRubyStyleAccessors
47
47
  if respond_to?(meth)
48
48
  send(meth, *args)
49
49
  else
50
- e = NoMethodError.new("undefined method '#{sym}' for #{self.inspect}")
51
- e.set_backtrace(caller)
52
- Kernel.raise e
50
+ super
53
51
  end
54
52
  end
55
53
  end
@@ -11,8 +11,9 @@ class Wx::CheckListBox
11
11
 
12
12
  # Call method in ControlWithItems, then sync item data
13
13
  def append(item, data = nil)
14
- super(item)
14
+ i = super(item)
15
15
  __wx_item_data[count - 1] = data
16
+ return i
16
17
  end
17
18
 
18
19
  # Call method in ControlWithItems, then sync item data
@@ -145,7 +145,7 @@ class Wx::EvtHandler
145
145
  case window_or_id
146
146
  when Fixnum
147
147
  window_or_id
148
- when Wx::Window, Wx::MenuItem, Wx::ToolBarTool
148
+ when Wx::Window, Wx::MenuItem, Wx::ToolBarTool, Wx::Timer
149
149
  window_or_id.wx_id
150
150
  else
151
151
  Kernel.raise ArgumentError,
@@ -1,6 +1,11 @@
1
1
  # A platform-independent image; can be manipulated more extensively than
2
2
  # Bitmap, but must be converted to a Bitmap for drawing.
3
3
  class Wx::Image
4
+
5
+ # alias for backward compatibility
6
+ alias :get_data :get_rgb_data
7
+ alias :set_data :set_rgb_data
8
+
4
9
  # Load the type-guessing hash from Wx::Bitmap
5
10
  require 'wx/classes/bitmap'
6
11
  BITMAP_TYPE_GUESS = Wx::Bitmap::BITMAP_TYPE_GUESS
@@ -11,10 +11,10 @@ class Wx::ListCtrl
11
11
  # items
12
12
  def get_selections
13
13
  selections = []
14
- item = get_next_item(-1, Wx::LIST_NEXT_BELOW, Wx::LIST_STATE_SELECTED)
14
+ item = get_next_item(-1, Wx::LIST_NEXT_ALL, Wx::LIST_STATE_SELECTED)
15
15
  while item >= 0
16
16
  selections << item
17
- item = get_next_item(item, Wx::LIST_NEXT_BELOW, Wx::LIST_STATE_SELECTED)
17
+ item = get_next_item(item, Wx::LIST_NEXT_ALL, Wx::LIST_STATE_SELECTED)
18
18
  end
19
19
  selections
20
20
  end
@@ -9,7 +9,13 @@ class Wx::Sizer
9
9
  Wx::Parameter[ :user_data, nil ] ]
10
10
 
11
11
  def add_item(item, *mixed_args)
12
- args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
12
+
13
+ begin
14
+ args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
15
+ rescue => err
16
+ err.set_backtrace(caller)
17
+ Kernel.raise err
18
+ end
13
19
 
14
20
  full_args = []
15
21
 
@@ -0,0 +1,10 @@
1
+ # Class with movable sash to separate two windows
2
+ class Wx::SplitterWindow
3
+ # These were released in wxRuby 2.0 with names slightly out of kilter
4
+ # with the documentation. The correct ones have an underscore before
5
+ # the digit.
6
+ #
7
+ # FIXME - the old names :get_window1 should be deleted in future versions.
8
+ alias :get_window_1 :get_window1
9
+ alias :get_window_2 :get_window2
10
+ end
@@ -24,6 +24,8 @@ class Wx::Timer
24
24
  # In common with other classes, make the id method refer to the
25
25
  # wxWidgets id, not ruby's deprecated name for object_id
26
26
  alias :id :get_id
27
+ # In case a more explicit option is preferred.
28
+ alias :wx_id :get_id
27
29
 
28
30
  # This class can be linked to an owner - an instance of a class
29
31
  # derived from EvtHandler which will receive Timer events. However,
@@ -13,7 +13,13 @@ class Wx::ToolBar
13
13
  Wx::Parameter[ :client_data, nil ] ]
14
14
 
15
15
  def add_item(bitmap1, *mixed_args)
16
- args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
16
+
17
+ begin
18
+ args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
19
+ rescue => err
20
+ err.set_backtrace(caller)
21
+ Kernel.raise err
22
+ end
17
23
 
18
24
  bitmap2 = args.shift
19
25
  pos = args.shift
@@ -9,22 +9,31 @@ module Wx
9
9
  # possible argument. +mixed_args+ is an array which may optionally end
10
10
  # with a set of named arguments
11
11
  def self.args_as_list(param_spec, *mixed_args)
12
- # get keyword arguments from mixed args if supplied, else empty
13
- kwa = mixed_args.last.kind_of?(Hash) ? mixed_args.pop : {}
14
- out_args = []
15
- param_spec.each_with_index do | param, i |
16
- if arg = mixed_args[i] # use the supplied list arg
17
- out_args << arg
18
- elsif kwa.key?(param.name) # use the keyword arg
19
- out_args << kwa[param.name]
20
- else # use the default argument
21
- out_args << param.default
12
+
13
+ begin
14
+ # get keyword arguments from mixed args if supplied, else empty
15
+ kwa = mixed_args.last.kind_of?(Hash) ? mixed_args.pop : {}
16
+ out_args = []
17
+ param_spec.each_with_index do | param, i |
18
+ if arg = mixed_args[i] # use the supplied list arg
19
+ out_args << arg
20
+ elsif kwa.key?(param.name) # use the keyword arg
21
+ out_args << kwa.delete(param.name)
22
+ else # use the default argument
23
+ out_args << param.default
24
+ end
22
25
  end
26
+ rescue
27
+ Kernel.raise ArgumentError,
28
+ "Bad arg composition of #{mixed_args.inspect}"
29
+ end
30
+
31
+ unless kwa.empty?
32
+ Kernel.raise ArgumentError,
33
+ "Unknown keyword argument(s) : #{kwa.keys.inspect}"
23
34
  end
35
+
24
36
  out_args
25
- rescue
26
- Kernel.raise ArgumentError,
27
- "Bad arg composition of #{mixed_args.inspect}"
28
37
  end
29
38
 
30
39
  # Given an integer constant +int_const+, returns an array Wx constant
@@ -163,8 +163,8 @@ module Wx
163
163
  return
164
164
  end
165
165
 
166
- real_args = [ parent ] + self.class.args_as_list(*mixed_args)
167
166
  begin
167
+ real_args = [ parent ] + self.class.args_as_list(*mixed_args)
168
168
  pre_wx_kwctor_init(*real_args)
169
169
  rescue => err
170
170
  msg = "Error initializing #{self.inspect}\n"+
@@ -105,6 +105,15 @@ end
105
105
 
106
106
  # MISCELLANEOUS WINDOWS
107
107
 
108
+ # OpenGL Canvas
109
+ Wx::define_keyword_ctors('GLCanvas') do
110
+ wx_ctor_params :id
111
+ wx_ctor_params :pos, :size, :style => Wx::FULL_REPAINT_ON_RESIZE
112
+ wx_ctor_params :name => 'GLCanvas'
113
+ wx_ctor_params :attrib_list => [Wx::GL_RGBA, Wx::GL_DOUBLEBUFFER]
114
+ wx_ctor_params :palette => Wx::NULL_PALETTE
115
+ end
116
+
108
117
  # A window whose colour changes according to current user settings
109
118
  Wx::define_keyword_ctors('Panel') do
110
119
  wx_ctor_params :id, :pos, :size, :style => Wx::TAB_TRAVERSAL
@@ -227,7 +236,8 @@ end
227
236
  Wx::define_keyword_ctors('DirDialog') do
228
237
  wx_ctor_params :message => 'Choose a directory'
229
238
  wx_ctor_params :default_path => ''
230
- wx_ctor_params :style, :pos, :size, :name => 'wxDirCtrl'
239
+ wx_ctor_params :style => Wx::DD_DEFAULT_STYLE
240
+ wx_ctor_params :pos, :size, :name => 'wxDirCtrl'
231
241
  end
232
242
 
233
243
  # wxFileDialog File selector dialog
@@ -236,7 +246,8 @@ Wx::define_keyword_ctors('FileDialog') do
236
246
  wx_ctor_params :default_dir => ''
237
247
  wx_ctor_params :default_file => ''
238
248
  wx_ctor_params :wildcard => '*.*'
239
- wx_ctor_params :style, :pos
249
+ wx_ctor_params :style => Wx::FD_DEFAULT_STYLE
250
+ wx_ctor_params :pos, :size, :name => 'filedlg'
240
251
  end
241
252
 
242
253
  # wxFindReplaceDialog Text search/replace dialog
@@ -551,8 +562,7 @@ Wx::define_keyword_ctors('HtmlListBox') do
551
562
  end
552
563
 
553
564
  Wx::define_keyword_ctors('DatePickerCtrl') do
554
- wx_ctor_params :id, :dt => Time.now
555
- wx_ctor_params :pos, :size, :style, :validator, :name => 'dateCtrl'
565
+ wx_ctor_params :id, :dt, :pos, :size, :style, :validator, :name => 'dateCtrl'
556
566
  end
557
567
 
558
568
  Wx::define_keyword_ctors('RichTextCtrl') do
@@ -1,3 +1,3 @@
1
1
  module Wx
2
- WXRUBY_VERSION = '2.0.0'
2
+ WXRUBY_VERSION = '2.0.1'
3
3
  end
Binary file
Binary file
Binary file
@@ -7,16 +7,13 @@ rescue LoadError
7
7
  end
8
8
  require 'wx'
9
9
 
10
-
11
10
  include Wx
12
11
 
13
- BUTTON_CLOSE = 1003
14
-
15
12
  class MyFrame < Frame
16
13
  def initialize(parent, log)
17
14
  @log = log
18
- super(parent, -1, "Shaped Window", DEFAULT_POSITION, Size.new(350,200),
19
- FRAME_SHAPED|SIMPLE_BORDER|FRAME_NO_TASKBAR|STAY_ON_TOP)
15
+ super(parent, :title => "Shaped Window", :size => [350,200],
16
+ :style => FRAME_SHAPED|SIMPLE_BORDER|FRAME_NO_TASKBAR|STAY_ON_TOP)
20
17
 
21
18
  @has_shape = false
22
19
  @delta = [0,0]
@@ -28,9 +25,9 @@ class MyFrame < Frame
28
25
  evt_right_up {on_exit}
29
26
  evt_paint {on_paint}
30
27
 
31
- shape = File.join( File.dirname(__FILE__), 'icons', 'ruby.png' )
28
+ shape = File.join( File.dirname(__FILE__), 'icons', 'wxruby-128x128.png' )
32
29
  @bmp = Bitmap.new( Image.new(shape) )
33
- set_client_size(@bmp.get_width, @bmp.get_height)
30
+ set_client_size(@bmp.width, @bmp.height)
34
31
 
35
32
  if Wx::PLATFORM == 'WXGTK'
36
33
  # wxGTK requires that the window be created before you can
@@ -69,8 +66,8 @@ class MyFrame < Frame
69
66
 
70
67
  def on_left_down(event)
71
68
  capture_mouse
72
- point = client_to_screen(event.get_position)
73
- origin = get_position
69
+ point = client_to_screen(event.position)
70
+ origin = position
74
71
  dx = point.x - origin.x
75
72
  dy = point.y - origin.y
76
73
  @delta = [dx, dy]
@@ -84,7 +81,7 @@ class MyFrame < Frame
84
81
 
85
82
  def on_mouse_move(event)
86
83
  if event.dragging and event.left_is_down
87
- point = client_to_screen(event.get_position)
84
+ point = client_to_screen(event.position)
88
85
  move(point.x - @delta[0], point.y - @delta[1])
89
86
  end
90
87
  end
@@ -92,16 +89,16 @@ end
92
89
 
93
90
  class TestPanel < Wx::Panel
94
91
  def initialize(parent, log)
95
- super(parent, -1, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::NO_FULL_REPAINT_ON_RESIZE)
92
+ super(parent, :style => Wx::NO_FULL_REPAINT_ON_RESIZE)
96
93
  @log = log
97
94
 
98
- b = Button.new(self, -1, 'Show the ShapedWindow Sample', Wx::Point.new(50,50))
99
- evt_button(b.get_id) { on_button }
95
+ b = Button.new(self, :label => 'Show the ShapedWindow Sample', :pos => [50,50])
96
+ evt_button(b) { on_button }
100
97
  end
101
98
 
102
99
  def on_button
103
100
  win = MyFrame.new(self, @log)
104
- win.set_size(Wx::Size.new(200, 200))
101
+ win.size = [200, 200]
105
102
  win.center_on_parent(Wx::BOTH)
106
103
  win.show(true)
107
104
  end
@@ -743,7 +743,7 @@ class DemoTaskBarIcon < Wx::TaskBarIcon
743
743
  @frame = frame
744
744
 
745
745
  # starting image
746
- icon = make_icon('ruby.png')
746
+ icon = make_icon('wxruby-128x128.png')
747
747
  set_icon(icon, 'wxRuby Demo')
748
748
  @image_index = 1
749
749
 
@@ -796,7 +796,7 @@ class DemoTaskBarIcon < Wx::TaskBarIcon
796
796
  end
797
797
 
798
798
  def on_taskbar_change(evt)
799
- names = [ "ruby.png", "wxwin16x16.xpm", "smiles.xpm", "mondrian.xpm" ]
799
+ names = [ "wxruby-128x128.png", "wxwin16x16.xpm", "smiles.xpm", "mondrian.xpm" ]
800
800
  name = names[@image_index]
801
801
  @image_index += 1
802
802
  if @image_index >= names.length
@@ -11,24 +11,20 @@ require 'wx'
11
11
 
12
12
  class TestPanel < Wx::Panel
13
13
  def initialize(parent, log)
14
- super(parent, -1)
14
+ super(parent)
15
15
 
16
- Wx::StaticText.new( self, -1, "This is a wxStaticBitmap.",
17
- Wx::Point.new(45,5))
16
+ Wx::StaticText.new( self, :label => "This is a wxStaticBitmap.", :pos => [45,5])
18
17
 
19
18
  bmp_file1 = File.join(File.dirname(__FILE__), 'icons', 'test2.xpm')
20
- Wx::StaticBitmap.new( self, -1,
21
- Wx::Bitmap.new(bmp_file1, Wx::BITMAP_TYPE_XPM),
22
- Wx::Point.new(80,25))
19
+ Wx::StaticBitmap.new( self, :label => Wx::Bitmap.new(bmp_file1),
20
+ :pos => [80,25])
23
21
 
24
22
  bmp_file2 = File.join(File.dirname(__FILE__), 'icons', 'robert.xpm')
25
- Wx::StaticBitmap.new( self, -1,
26
- Wx::Bitmap.new(bmp_file2, Wx::BITMAP_TYPE_XPM),
27
- Wx::Point.new(0, 100))
23
+ Wx::StaticBitmap.new( self, :label => Wx::Bitmap.new(bmp_file2),
24
+ :pos => [0, 100])
28
25
 
29
- Wx::StaticText.new( self, -1,
30
- "Hey, if Ousterhout (and Dunn) can do it, so can I.",
31
- Wx::Point.new(100, 125) )
26
+ Wx::StaticText.new( self, :label => "Hey, if Ousterhout (and Dunn) can do it, so can I.",
27
+ :pos => [100, 125])
32
28
  end
33
29
  end
34
30
 
@@ -17,6 +17,11 @@ Calendar_Cal_Year = 204
17
17
  Calendar_Cal_SeqMonth = 205
18
18
  Calendar_Cal_SurroundWeeks = 206
19
19
 
20
+ Calendar_DatePicker_AskDate = 300
21
+ Calendar_DatePicker_ShowCentury = 301
22
+ Calendar_DatePicker_DropDown = 302
23
+ Calendar_DatePicker_AllowNone = 303
24
+ Calendar_DatePicker_StartWithNone = 304
20
25
 
21
26
  class MyCalendar < CalendarCtrl
22
27
  def initialize(parent, display_frame, initial_date, calendar_flags)
@@ -77,6 +82,9 @@ class MyFrame < Frame
77
82
  evt_menu Wx::ID_EXIT, :on_quit
78
83
  evt_menu Wx::ID_ABOUT, :on_about
79
84
 
85
+ evt_menu Calendar_DatePicker_AskDate, :on_ask_date
86
+ evt_update_ui Calendar_DatePicker_StartWithNone, :on_update_ui_start_with_none
87
+
80
88
  evt_menu Calendar_Cal_Monday, :on_cal_monday
81
89
  evt_menu Calendar_Cal_Holidays, :on_cal_holidays
82
90
  evt_menu Calendar_Cal_Special, :on_cal_special
@@ -125,16 +133,27 @@ class MyFrame < Frame
125
133
  "Allow changing the year in the calendar",
126
134
  ITEM_CHECK)
127
135
 
136
+ menu_date = Menu.new
137
+ menu_date.append_check_item(Calendar_DatePicker_ShowCentury, "Al&ways show century")
138
+ menu_date.append_check_item(Calendar_DatePicker_DropDown, "Use &drop down control")
139
+ menu_date.append_check_item(Calendar_DatePicker_AllowNone, "Allow &no date")
140
+ menu_date.append_check_item(Calendar_DatePicker_StartWithNone, "Start &with no date")
141
+ menu_date.append_separator
142
+ menu_date.append(Calendar_DatePicker_AskDate, "&Choose date...\tCtrl-D", "Show dialog with DatePickerCtrl")
143
+
128
144
  # now append the freshly created menu to the menu bar...
129
145
  menu_bar = MenuBar.new
130
146
  menu_bar.append(menu_file, "&File")
131
147
  menu_bar.append(menu_cal, "&Calendar")
148
+ menu_bar.append(menu_date, "&Date picker")
132
149
 
133
150
  menu_bar.check(Calendar_Cal_Monday, TRUE)
134
151
  menu_bar.check(Calendar_Cal_Holidays, TRUE)
135
152
  menu_bar.check(Calendar_Cal_Month, TRUE)
136
153
  menu_bar.check(Calendar_Cal_Year, TRUE)
137
154
 
155
+ menu_bar.check(Calendar_DatePicker_ShowCentury, TRUE)
156
+
138
157
  # ... and attach self menu bar to the frame
139
158
  self.menu_bar = menu_bar
140
159
  end
@@ -201,6 +220,36 @@ class MyFrame < Frame
201
220
  event.enable( get_menu_bar().is_checked(Calendar_Cal_Month))
202
221
  end
203
222
 
223
+ def on_update_ui_start_with_none(event)
224
+ event.enable( get_menu_bar().is_checked(Calendar_DatePicker_AllowNone))
225
+ end
226
+
227
+ def on_ask_date(event)
228
+ dt = @calendar.get_date
229
+
230
+ style = DP_DEFAULT
231
+ style |= DP_SHOWCENTURY if get_menu_bar.is_checked(Calendar_DatePicker_ShowCentury)
232
+ style |= DP_DROPDOWN if get_menu_bar.is_checked(Calendar_DatePicker_DropDown)
233
+ if get_menu_bar.is_checked(Calendar_DatePicker_AllowNone)
234
+ style |= DP_ALLOWNONE
235
+ dt = nil if get_menu_bar.is_checked(Calendar_DatePicker_StartWithNone)
236
+ end
237
+
238
+ dlg = MyDialog.new(self, dt, style)
239
+ if dlg.show_modal == ID_OK
240
+ if dt = dlg.get_date
241
+ today = Time.now
242
+ if dt.day == today.day && dt.month == today.month
243
+ message_box("Happy birthday", "Calendar Sample")
244
+ end
245
+ @calendar.set_date(dt)
246
+ log_status("Changed the date to your input")
247
+ else
248
+ log_status("No date entered")
249
+ end
250
+ end
251
+ end
252
+
204
253
  def toggle_cal_style(on,flag)
205
254
  style = @calendar.get_window_style_flag
206
255
  date = @calendar.date
@@ -244,6 +293,49 @@ class MyFrame < Frame
244
293
 
245
294
  end
246
295
 
296
+ class MyDialog < Dialog
297
+ def initialize(parent, dt, picker_style)
298
+ super(parent, :style => DEFAULT_DIALOG_STYLE|RESIZE_BORDER)
299
+ sizer_buttons = StdDialogButtonSizer.new
300
+ sizer_buttons.add_button(Button.new(self, ID_OK))
301
+ sizer_buttons.add_button(Button.new(self, ID_CANCEL))
302
+ sizer_buttons.realize
303
+
304
+ sizer_text = BoxSizer.new(HORIZONTAL)
305
+ sizer_text.add(StaticText.new(self, ID_ANY, "Date in ISO format:"), 0, ALL|ALIGN_CENTRE_VERTICAL, 10)
306
+ @text = TextCtrl.new(self)
307
+ sizer_text.add(@text, 1, ALL|ALIGN_CENTRE_VERTICAL|EXPAND, 10)
308
+
309
+ sizer_top = BoxSizer.new(VERTICAL)
310
+ sizer_top.add(StaticText.new(self, ID_ANY, "Enter your birthday date (not before 20th century):"), 0, ALL, 10)
311
+
312
+ @picker = DatePickerCtrl.new(self, ID_ANY, dt, DEFAULT_POSITION, DEFAULT_SIZE, picker_style)
313
+ @picker.set_range(DateTime.new(1900, 1, 1), nil)
314
+ sizer_top.add(@picker, 0, ALL|EXPAND, 10)
315
+ sizer_top.add_stretch_spacer(1)
316
+ sizer_top.add(sizer_text, 0, EXPAND)
317
+
318
+ sizer_top.add(sizer_buttons, 0, ALL|ALIGN_CENTER, 10)
319
+
320
+ set_sizer_and_fit(sizer_top)
321
+ layout
322
+
323
+ evt_date_changed(@picker, :on_date_changed)
324
+ end
325
+
326
+ def get_date
327
+ @picker.get_value
328
+ end
329
+
330
+ def on_date_changed(event)
331
+ if dt = event.get_date
332
+ @text.set_value(dt.to_s)
333
+ else
334
+ @text.set_value("")
335
+ end
336
+ end
337
+
338
+ end
247
339
 
248
340
  class RbApp < App
249
341
  def on_init()
@@ -22,8 +22,13 @@ class ImageFrame < Wx::Frame
22
22
  def initialize
23
23
  super(nil, :title => 'Simple image demo')
24
24
 
25
+ @offset = 10
26
+ size = 256+2*@offset
27
+ self.client_size = [size, size]
28
+
25
29
  # Load a PNG bitmap from a file for drawing
26
- img_file = File.join( File.dirname(__FILE__), 'wxruby-logo.png')
30
+ img_file = File.join( File.dirname(__FILE__)+"/../../art",
31
+ 'wxruby-256x256.png')
27
32
  @bitmap = Wx::Bitmap.new(img_file)
28
33
 
29
34
  # Set up the drawing to be done when the frame needs re-painting
@@ -32,8 +37,8 @@ class ImageFrame < Wx::Frame
32
37
 
33
38
  def on_paint
34
39
  paint do | dc |
35
- # Draw the bitmap at offset 10px, 10px, with no transparency
36
- dc.draw_bitmap(@bitmap, 10, 10, false)
40
+ # Draw the bitmap at the specified offset with no transparency
41
+ dc.draw_bitmap(@bitmap, @offset, @offset, false)
37
42
  end
38
43
  end
39
44
  end
@@ -21,7 +21,7 @@ include Math
21
21
  # The sample demonstrates some uses of the Wx::Image class, a
22
22
  # platform-independent representation of an image which can be
23
23
  # manipulated (for example, resizing) and written to files in various
24
- # formats. It also shows how an image's data can be written directly, by
24
+ # formats. It also shows how an image's rgb data can be written directly, by
25
25
  # using Array#pack.
26
26
 
27
27
  # A canvas that draws and displays a mathematically generated image
@@ -36,7 +36,7 @@ class MathsDrawing < Window
36
36
  super(parent)
37
37
  # Create a dummy image
38
38
  @default_image = Image.new(1, 1)
39
- @default_image.data = [255, 255, 255].pack('CCC')
39
+ @default_image.rgb_data = [255, 255, 255].pack('CCC')
40
40
  @img = @default_image
41
41
 
42
42
  @red = lambda { | x, y | 1 }
@@ -88,7 +88,7 @@ class MathsDrawing < Window
88
88
  end
89
89
 
90
90
  start_time = Time.now
91
- # The string holding raw image data
91
+ # The string holding raw rgb data
92
92
  data = ''
93
93
  x_factor = size_x.to_f
94
94
  y_factor = size_y.to_f
@@ -105,7 +105,7 @@ class MathsDrawing < Window
105
105
  end
106
106
  end
107
107
  img = Image.new(size_x, size_y)
108
- img.data = data
108
+ img.rgb_data = data
109
109
  @render_time = Time.now - start_time
110
110
  img
111
111
  end
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+ require 'wx'
9
+ require 'RMagick'
10
+
11
+ # RMagick sample (written by Chauk-Mean Proum)
12
+
13
+ # This sample demonstrates how to convert directly a RMagick image to
14
+ # a wxRuby image (without saving and loading the image file).
15
+ # See the magick_to_wx method.
16
+
17
+ class ImageFrame < Wx::Frame
18
+ def initialize
19
+ super(nil, :title => 'RMagick sample', :size => [600, 600])
20
+
21
+ # Create the magick image from an image file
22
+ img_file = File.join( File.dirname(__FILE__)+"/../../art",
23
+ 'wxruby-256x256.png')
24
+ @magick_image = Magick::ImageList.new(img_file)
25
+
26
+ # Create some magick images with special effects
27
+ @magick_image1 = @magick_image.sketch
28
+ @magick_image2 = @magick_image.oil_paint(4)
29
+ @magick_image3 = @magick_image.shade
30
+
31
+ # Convert the magick images to wxRuby images
32
+ @image1 = magick_to_wx(@magick_image1)
33
+ @image2 = magick_to_wx(@magick_image2)
34
+ @image3 = magick_to_wx(@magick_image3)
35
+
36
+ # Create the corresponding bitmaps
37
+ compute_bitmaps
38
+
39
+ # Set up event handling
40
+ evt_size :on_size
41
+ evt_idle :on_idle
42
+ evt_paint :on_paint
43
+ end
44
+
45
+
46
+ # Convert the RMagick image to a WxRuby image
47
+ def magick_to_wx magick_img
48
+ wx_img = Wx::Image.new(magick_img.columns, magick_img.rows)
49
+
50
+ # Set the image data
51
+ wx_img.rgb_data = magick_img.to_blob { self.format = "RGB" }
52
+
53
+ # Set the alpha (transparency) if any
54
+ if magick_img.alpha?
55
+ wx_img.alpha_data = magick_img.to_blob { self.format = "A" }
56
+ end
57
+
58
+ wx_img
59
+ end
60
+
61
+ # Create a bitmap for the specified image and size
62
+ def compute_bitmap image, width, height
63
+ rescaled_image = Wx::Image.new(image).rescale(width, height)
64
+ rescaled_image.to_bitmap
65
+ end
66
+
67
+ # Create the bitmaps corresponding to the images and with half the size of the frame
68
+ def compute_bitmaps
69
+ width = client_size.x / 2
70
+ height = client_size.y / 2
71
+ @bitmap1 = compute_bitmap(@image1, width, height)
72
+ @bitmap2 = compute_bitmap(@image2, width, height)
73
+ @bitmap3 = compute_bitmap(@image3, width, height)
74
+ @done = true
75
+ end
76
+
77
+ # Note to recompute the bitmaps on a resize
78
+ def on_size(event)
79
+ @done = false
80
+ event.skip
81
+ end
82
+
83
+ # Recompute the bitmaps if needed, then do a refresh
84
+ def on_idle
85
+ if not @done
86
+ compute_bitmaps
87
+ refresh
88
+ end
89
+ end
90
+
91
+ # Paint the frame with the bitmaps
92
+ def on_paint
93
+ paint do | dc |
94
+
95
+ if @done
96
+ offset_x = client_size.x / 4
97
+ offset_y = client_size.y / 4
98
+ dc.draw_bitmap(@bitmap1, 0, 0, true)
99
+ dc.draw_bitmap(@bitmap2, offset_x, offset_y, true)
100
+ dc.draw_bitmap(@bitmap3, offset_x*2, offset_y*2, true)
101
+ end
102
+
103
+ end
104
+ end
105
+ end
106
+
107
+ Wx::App.run do
108
+ ImageFrame.new.show
109
+ end
110
+
@@ -20,7 +20,7 @@ class MinimalFrame < Wx::Frame
20
20
 
21
21
  # Give the frame an icon. PNG is a good choice of format for
22
22
  # cross-platform images. Note that OS X doesn't have "Frame" icons.
23
- icon_file = File.join( File.dirname(__FILE__), "mondrian.png")
23
+ icon_file = File.join( File.dirname(__FILE__)+"/../../art", "wxruby.png")
24
24
  self.icon = Wx::Icon.new(icon_file)
25
25
 
26
26
  menu_bar = Wx::MenuBar.new
@@ -14,13 +14,27 @@ include Glu
14
14
 
15
15
  class CubeFrame < Wx::Frame
16
16
  def initialize(title)
17
- super(nil, :title => title, :size => [ 400, 300 ])
17
+ super(nil, :title => title, :size => [ 600, 400 ])
18
+
19
+ sizer = Wx::VBoxSizer.new
20
+
18
21
  attrib = [Wx::GL_RGBA, Wx::GL_DOUBLEBUFFER, Wx::GL_DEPTH_SIZE, 24]
19
22
  @canvas = Wx::GLCanvas.new(self, -1, [-1, -1], [-1, -1],
20
- Wx::FULL_REPAINT_ON_RESIZE, 'GLCanvas', attrib)
21
- @canvas.evt_paint { @canvas.paint { render } }
23
+ Wx::FULL_REPAINT_ON_RESIZE, "GLCanvas", attrib)
24
+ sizer.add_item @canvas, :proportion => 1, :flag => Wx::EXPAND
25
+
26
+ text = Wx::StaticText.new(self, :label => "Use Up/Down/Left/Right keys to rotate the cube")
27
+ sizer.add_item text
28
+
29
+ self.sizer = sizer
30
+ self.show
31
+
32
+ @canvas.set_focus
22
33
  @canvas.evt_key_down {|evt| on_key_down(evt.get_key_code) }
23
- @rotate = [0.0, 0.0, 0.0]
34
+
35
+ @canvas.evt_paint { @canvas.paint { render } }
36
+ @rotate = [30.0, 0.0, -30.0]
37
+
24
38
  end
25
39
 
26
40
  def on_key_down(key)
@@ -39,9 +53,9 @@ class CubeFrame < Wx::Frame
39
53
 
40
54
  def render
41
55
  @canvas.set_current
42
- sz = @canvas.get_size
43
- w = sz.get_width
44
- h = sz.get_height
56
+ sz = @canvas.size
57
+ w = sz.width
58
+ h = sz.height
45
59
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
46
60
  glEnable(GL_DEPTH_TEST)
47
61
  glViewport(0, 0, w, h)
@@ -58,7 +72,7 @@ class CubeFrame < Wx::Frame
58
72
  glRotate(@rotate[2], 0.0, 0.0, 1.0)
59
73
  glBegin(GL_TRIANGLES)
60
74
  #left
61
- glColor3d(1.0, 1.0, 1.0)
75
+ glColor3d(1.0, 1.0, 0.0) # yellow
62
76
  glVertex3d(-1.0, 1.0, 1.0)
63
77
  glVertex3d(-1.0, 1.0,-1.0)
64
78
  glVertex3d(-1.0,-1.0, 1.0)
@@ -66,7 +80,7 @@ class CubeFrame < Wx::Frame
66
80
  glVertex3d(-1.0, 1.0,-1.0)
67
81
  glVertex3d(-1.0,-1.0,-1.0)
68
82
  #right
69
- glColor3d(0.0, 1.0, 1.0)
83
+ glColor3d(0.0, 1.0, 0.0) # green
70
84
  glVertex3d( 1.0,-1.0, 1.0)
71
85
  glVertex3d( 1.0,-1.0,-1.0)
72
86
  glVertex3d( 1.0, 1.0, 1.0)
@@ -74,7 +88,7 @@ class CubeFrame < Wx::Frame
74
88
  glVertex3d( 1.0,-1.0,-1.0)
75
89
  glVertex3d( 1.0, 1.0,-1.0)
76
90
  #up
77
- glColor3d(0.0, 0.0, 1.0)
91
+ glColor3d(0.0, 0.0, 1.0) # blue
78
92
  glVertex3d(-1.0, 1.0, 1.0)
79
93
  glVertex3d(-1.0,-1.0, 1.0)
80
94
  glVertex3d( 1.0, 1.0, 1.0)
@@ -82,7 +96,7 @@ class CubeFrame < Wx::Frame
82
96
  glVertex3d(-1.0,-1.0, 1.0)
83
97
  glVertex3d( 1.0,-1.0, 1.0)
84
98
  #down
85
- glColor3d(1.0, 0.0, 0.0)
99
+ glColor3d(0.0, 1.0, 1.0) # cyan
86
100
  glVertex3d(-1.0,-1.0,-1.0)
87
101
  glVertex3d(-1.0, 1.0,-1.0)
88
102
  glVertex3d( 1.0,-1.0,-1.0)
@@ -90,7 +104,7 @@ class CubeFrame < Wx::Frame
90
104
  glVertex3d(-1.0, 1.0,-1.0)
91
105
  glVertex3d( 1.0, 1.0,-1.0)
92
106
  #front
93
- glColor3d(1.0, 1.0, 0.0)
107
+ glColor3d(1.0, 0.0, 0.0) # red
94
108
  glVertex3d(-1.0,-1.0, 1.0)
95
109
  glVertex3d(-1.0,-1.0,-1.0)
96
110
  glVertex3d( 1.0,-1.0, 1.0)
@@ -98,7 +112,7 @@ class CubeFrame < Wx::Frame
98
112
  glVertex3d(-1.0,-1.0,-1.0)
99
113
  glVertex3d( 1.0,-1.0,-1.0)
100
114
  #back
101
- glColor3d(0.0, 1.0, 0.0)
115
+ glColor3d(1.0, 0.0, 1.0) # magenta
102
116
  glVertex3d( 1.0, 1.0, 1.0)
103
117
  glVertex3d( 1.0, 1.0,-1.0)
104
118
  glVertex3d(-1.0, 1.0, 1.0)
@@ -113,5 +127,4 @@ end
113
127
  Wx::App.run do
114
128
  self.app_name = 'GLCanvas Cube'
115
129
  frame = CubeFrame.new("OpenGL Canvas wxRuby App")
116
- frame.show
117
130
  end
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ # OpenGL sample by Chauk-Mean Proum featuring an animated cube with lighting.
6
+ # OpenGL commands are structured following the Red Book :
7
+ # - init part (opengl_init)
8
+ # - resize part (opengl_resize)
9
+ # - render part (opengl_render)
10
+
11
+ begin
12
+ require 'rubygems'
13
+ rescue LoadError
14
+ end
15
+ require 'wx'
16
+ require 'gl'
17
+ require 'glu'
18
+
19
+ include Gl
20
+ include Glu
21
+
22
+ class CubeFrame < Wx::Frame
23
+ def initialize(title)
24
+ super(nil, :title => title)
25
+
26
+ sizer = Wx::VBoxSizer.new
27
+
28
+ attrib = [Wx::GL_RGBA, Wx::GL_DOUBLEBUFFER, Wx::GL_DEPTH_SIZE, 24]
29
+ # Use of keyword arguments for the GLCanvas initializer
30
+ @canvas = Wx::GLCanvas.new(self, :attrib_list => attrib, :size => [600, 600])
31
+ sizer.add_item @canvas, :proportion => 1, :flag => Wx::EXPAND
32
+
33
+ text = Wx::StaticText.new(self, :label => "Use Up/Down/Left/Right keys to change rotation direction")
34
+ sizer.add_item text
35
+
36
+ self.sizer = sizer
37
+ sizer.fit(self)
38
+
39
+ self.show
40
+ # A GL context can be set to a GL canvas only if the latter has been shown
41
+ opengl_init()
42
+ opengl_resize()
43
+
44
+ # set the focus on the GL canvas for key press
45
+ @canvas.set_focus
46
+ @canvas.evt_key_down {|evt| on_key_down(evt.get_key_code) }
47
+
48
+ @canvas.evt_paint { @canvas.paint { opengl_render } }
49
+ @canvas.evt_size do |e|
50
+ opengl_resize
51
+ e.skip()
52
+ end
53
+
54
+ # set up the animation
55
+ @rotate = [15.0, -30.0, 0.0]
56
+ @anim_step_x_axis = -1.0
57
+ @anim_step_y_axis = -2.0
58
+ anim_timer = Wx::Timer.new(self)
59
+ anim_timer.start(25) # start the timer with a period of 25 ms
60
+ evt_timer anim_timer, :animate
61
+
62
+ end
63
+
64
+ def animate
65
+ @rotate[0] += @anim_step_x_axis
66
+ @rotate[1] += @anim_step_y_axis
67
+ opengl_render()
68
+ end
69
+
70
+ def on_key_down(key)
71
+ case key
72
+ when Wx::K_UP
73
+ @anim_step_x_axis = -1.0
74
+ when Wx::K_DOWN
75
+ @anim_step_x_axis = 1.0
76
+ when Wx::K_LEFT
77
+ @anim_step_y_axis = -2.0
78
+ when Wx::K_RIGHT
79
+ @anim_step_y_axis = 2.0
80
+ end
81
+ opengl_render()
82
+ end
83
+
84
+
85
+ def opengl_init
86
+ # initialize the GL rendering
87
+ @canvas.set_current
88
+
89
+ mat_specular = [1.0, 1.0, 1.0, 1.0]
90
+ mat_shininess = [90.0]
91
+
92
+ light_ambient = [0.9, 0.9, 0.9, 1.0]
93
+ light_position = [-1.0, 4.0, 7.0, 0.0]
94
+
95
+ glLoadIdentity()
96
+
97
+ # glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular)
98
+ # glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess)
99
+
100
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, light_ambient)
101
+ glLightfv(GL_LIGHT0, GL_POSITION, light_position)
102
+
103
+ glColorMaterial(GL_FRONT, GL_DIFFUSE)
104
+
105
+ glEnable(GL_LIGHTING)
106
+ glEnable(GL_LIGHT0)
107
+ glEnable(GL_COLOR_MATERIAL)
108
+
109
+ glDepthFunc(GL_LEQUAL)
110
+ glEnable(GL_DEPTH_TEST)
111
+ end
112
+
113
+ def opengl_resize
114
+ @canvas.set_current
115
+ sz = @canvas.size
116
+ w = sz.width
117
+ h = sz.height
118
+ glViewport(0, 0, w, h)
119
+ glMatrixMode(GL_PROJECTION)
120
+ glLoadIdentity()
121
+ gluPerspective(30.0, w.to_f/h.to_f, 1.0, 20.0)
122
+ glMatrixMode(GL_MODELVIEW)
123
+ end
124
+
125
+ def opengl_render
126
+ @canvas.set_current
127
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
128
+ glLoadIdentity()
129
+
130
+ gluLookAt(0.0, 3.0, 8.0, # position
131
+ 0.0, 0.0, 0.0, # target
132
+ 0.0, 1.0, 0.0) # up direction
133
+
134
+ glRotate(@rotate[0], 1.0, 0.0, 0.0)
135
+ glRotate(@rotate[1], 0.0, 1.0, 0.0)
136
+ glRotate(@rotate[2], 0.0, 0.0, 1.0)
137
+
138
+ glBegin(GL_QUADS)
139
+
140
+ #left
141
+ glNormal3d(-1.0, 0.0, 0.0) # normal vector is required for proper lighting
142
+ glColor3d(1.0, 1.0, 0.0) # yellow
143
+ glVertex3d(-1.0,-1.0,-1.0)
144
+ glVertex3d(-1.0, 1.0,-1.0)
145
+ glVertex3d(-1.0, 1.0, 1.0)
146
+ glVertex3d(-1.0,-1.0, 1.0)
147
+ #right
148
+ glNormal3d( 1.0, 0.0, 0.0)
149
+ glColor3d(0.0, 1.0, 0.0) # green
150
+ glVertex3d( 1.0,-1.0,-1.0)
151
+ glVertex3d( 1.0, 1.0,-1.0)
152
+ glVertex3d( 1.0, 1.0, 1.0)
153
+ glVertex3d( 1.0,-1.0, 1.0)
154
+ #up
155
+ glNormal3d( 0.0, 1.0, 0.0)
156
+ glColor3d(0.0, 0.0, 1.0) # blue
157
+ glVertex3d(-1.0, 1.0,-1.0)
158
+ glVertex3d( 1.0, 1.0,-1.0)
159
+ glVertex3d( 1.0, 1.0, 1.0)
160
+ glVertex3d(-1.0, 1.0, 1.0)
161
+ #down
162
+ glNormal3d( 0.0,-1.0, 0.0)
163
+ glColor3d(0.0, 1.0, 1.0) # cyan
164
+ glVertex3d(-1.0,-1.0,-1.0)
165
+ glVertex3d( 1.0,-1.0,-1.0)
166
+ glVertex3d( 1.0,-1.0, 1.0)
167
+ glVertex3d(-1.0,-1.0, 1.0)
168
+ #front
169
+ glNormal3d( 0.0, 0.0, 1.0)
170
+ glColor3d(1.0, 0.0, 0.0) # red
171
+ glVertex3d(-1.0,-1.0, 1.0)
172
+ glVertex3d(-1.0, 1.0, 1.0)
173
+ glVertex3d( 1.0, 1.0, 1.0)
174
+ glVertex3d( 1.0,-1.0, 1.0)
175
+ #back
176
+ glNormal3d( 0.0, 0.0,-1.0)
177
+ glColor3d(1.0, 0.0, 1.0) # magenta
178
+ glVertex3d(-1.0,-1.0,-1.0)
179
+ glVertex3d(-1.0, 1.0,-1.0)
180
+ glVertex3d( 1.0, 1.0,-1.0)
181
+ glVertex3d( 1.0,-1.0,-1.0)
182
+ glEnd()
183
+ glFlush()
184
+ @canvas.swap_buffers
185
+ end
186
+ end
187
+
188
+ Wx::App.run do
189
+ self.app_name = 'GLCanvas Cube'
190
+ frame = CubeFrame.new("OpenGL Canvas wxRuby : Animation and Lighting")
191
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wxruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: x86-mswin32-60
6
6
  authors:
7
7
  - wxRuby development team
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-27 00:00:00 +00:00
12
+ date: 2009-09-09 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -78,6 +78,7 @@ files:
78
78
  - lib/wx/classes/size.rb
79
79
  - lib/wx/classes/sizer.rb
80
80
  - lib/wx/classes/sound.rb
81
+ - lib/wx/classes/splitterwindow.rb
81
82
  - lib/wx/classes/standardpaths.rb
82
83
  - lib/wx/classes/styledtextctrl.rb
83
84
  - lib/wx/classes/textctrl.rb
@@ -98,6 +99,10 @@ files:
98
99
  - lib/wxruby2.exp
99
100
  - lib/wxruby2.lib
100
101
  - lib/wxruby2.so
102
+ - art/wxruby-128x128.png
103
+ - art/wxruby-256x256.png
104
+ - art/wxruby-64x64.png
105
+ - art/wxruby.png
101
106
  - samples/aui
102
107
  - samples/aui/aui.rb
103
108
  - samples/bigdemo
@@ -133,7 +138,6 @@ files:
133
138
  - samples/bigdemo/icons/radio.bmp
134
139
  - samples/bigdemo/icons/radio.xpm
135
140
  - samples/bigdemo/icons/robert.xpm
136
- - samples/bigdemo/icons/ruby.png
137
141
  - samples/bigdemo/icons/sashtest.ico
138
142
  - samples/bigdemo/icons/save.xpm
139
143
  - samples/bigdemo/icons/smiles.bmp
@@ -152,6 +156,7 @@ files:
152
156
  - samples/bigdemo/icons/tog1.xpm
153
157
  - samples/bigdemo/icons/tog2.bmp
154
158
  - samples/bigdemo/icons/tog2.xpm
159
+ - samples/bigdemo/icons/wxruby-128x128.png
155
160
  - samples/bigdemo/icons/wxwin.ico
156
161
  - samples/bigdemo/icons/wxwin16x16.png
157
162
  - samples/bigdemo/icons/wxwin16x16.xpm
@@ -243,8 +248,8 @@ files:
243
248
  - samples/drawing/bitmap_image.rb
244
249
  - samples/drawing/graphics_drawing.rb
245
250
  - samples/drawing/maths_images.rb
251
+ - samples/drawing/rmagic_bitmap_image.rb
246
252
  - samples/drawing/ruby-logo.jpg
247
- - samples/drawing/wxruby-logo.png
248
253
  - samples/etc
249
254
  - samples/etc/activation.rb
250
255
  - samples/etc/choice.rb
@@ -277,6 +282,7 @@ files:
277
282
  - samples/minimal/nothing.rb
278
283
  - samples/opengl
279
284
  - samples/opengl/cube.rb
285
+ - samples/opengl/cube_anim_lighting.rb
280
286
  - samples/printing
281
287
  - samples/printing/mondrian.ico
282
288
  - samples/printing/mondrian.xpm