fxruby 1.6.29 → 1.6.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +12 -1
  3. data/Manifest.txt +5 -0
  4. data/Rakefile +8 -2
  5. data/examples/gltest.rb +0 -7
  6. data/examples/groupbox.rb +5 -3
  7. data/examples/thread.rb +55 -0
  8. data/ext/fox16_c/FXRbApp.cpp +67 -5
  9. data/ext/fox16_c/FXRuby.cpp +142 -110
  10. data/ext/fox16_c/extconf.rb +36 -28
  11. data/ext/fox16_c/gvl_wrappers.cpp +12 -0
  12. data/ext/fox16_c/include/FXRbApp.h +41 -6
  13. data/ext/fox16_c/include/FXRbBitmap.h +12 -12
  14. data/ext/fox16_c/include/FXRbCommon.h +3 -0
  15. data/ext/fox16_c/include/FXRbCursor.h +2 -2
  16. data/ext/fox16_c/include/FXRbDC.h +62 -62
  17. data/ext/fox16_c/include/FXRbDialogBox.h +2 -2
  18. data/ext/fox16_c/include/FXRbDockBar.h +3 -3
  19. data/ext/fox16_c/include/FXRbDockSite.h +4 -4
  20. data/ext/fox16_c/include/FXRbDrawable.h +1 -1
  21. data/ext/fox16_c/include/FXRbFileDict.h +3 -3
  22. data/ext/fox16_c/include/FXRbFoldingList.h +28 -28
  23. data/ext/fox16_c/include/FXRbFont.h +18 -18
  24. data/ext/fox16_c/include/FXRbGLCanvas.h +4 -4
  25. data/ext/fox16_c/include/FXRbGLObject.h +8 -8
  26. data/ext/fox16_c/include/FXRbGLShape.h +1 -1
  27. data/ext/fox16_c/include/FXRbGLViewer.h +3 -3
  28. data/ext/fox16_c/include/FXRbHeader.h +7 -7
  29. data/ext/fox16_c/include/FXRbIconList.h +28 -28
  30. data/ext/fox16_c/include/FXRbIconSource.h +12 -12
  31. data/ext/fox16_c/include/FXRbId.h +3 -3
  32. data/ext/fox16_c/include/FXRbImage.h +19 -19
  33. data/ext/fox16_c/include/FXRbList.h +21 -21
  34. data/ext/fox16_c/include/FXRbListBox.h +1 -1
  35. data/ext/fox16_c/include/FXRbMDIChild.h +4 -4
  36. data/ext/fox16_c/include/FXRbMDIClient.h +4 -4
  37. data/ext/fox16_c/include/FXRbObject.h +2 -2
  38. data/ext/fox16_c/include/FXRbPopup.h +2 -2
  39. data/ext/fox16_c/include/FXRbRealSpinner.h +1 -1
  40. data/ext/fox16_c/include/FXRbScrollArea.h +4 -4
  41. data/ext/fox16_c/include/FXRbShutter.h +1 -1
  42. data/ext/fox16_c/include/FXRbSpinner.h +1 -1
  43. data/ext/fox16_c/include/FXRbStream.h +3 -3
  44. data/ext/fox16_c/include/FXRbTabBar.h +1 -1
  45. data/ext/fox16_c/include/FXRbTable.h +53 -53
  46. data/ext/fox16_c/include/FXRbText.h +23 -23
  47. data/ext/fox16_c/include/FXRbTopWindow.h +5 -5
  48. data/ext/fox16_c/include/FXRbTranslator.h +1 -1
  49. data/ext/fox16_c/include/FXRbTreeList.h +28 -28
  50. data/ext/fox16_c/include/FXRbTreeListBox.h +1 -1
  51. data/ext/fox16_c/include/FXRbWindow.h +31 -31
  52. data/ext/fox16_c/include/FXRuby.h +200 -94
  53. data/ext/fox16_c/include/gvl_wrappers.h +594 -0
  54. data/lib/fox16.rb +1 -0
  55. data/lib/fox16/thread.rb +51 -0
  56. data/lib/fox16/version.rb +1 -1
  57. data/rdoc-sources/FXApp.rb +5 -0
  58. data/rdoc-sources/FXId.rb +5 -0
  59. data/swig-interfaces/FXApp.i +14 -78
  60. data/swig-interfaces/macros.i +56 -0
  61. data/test/TC_FXApp.rb +60 -10
  62. data/test/TC_FXJPGImage.rb +47 -0
  63. metadata +24 -103
  64. checksums.yaml.gz.sig +0 -0
  65. data.tar.gz.sig +0 -0
  66. metadata.gz.sig +0 -0
data/lib/fox16.rb CHANGED
@@ -28,3 +28,4 @@ require "fox16/execute_nonmodal"
28
28
  require "fox16/version"
29
29
  require "fox16/kwargs"
30
30
  require "fox16/exceptions_for_fxerror"
31
+ require "fox16/thread"
@@ -0,0 +1,51 @@
1
+ require 'thread'
2
+
3
+ module Fox
4
+
5
+ class FXApp
6
+
7
+ alias initialize_before_thread initialize # :nodoc:
8
+
9
+ def initialize(*args, &block)
10
+ initialize_before_thread(*args, &block)
11
+ event_handler_setup
12
+ end
13
+
14
+ def runOnUiThread(&block)
15
+ @event_handler_events << block
16
+ @event_handler_pwr.write 'e' if @event_handler_pwr
17
+ end
18
+
19
+ private
20
+
21
+ def event_handler_setup
22
+ if RUBY_PLATFORM =~ /mingw|mswin/i
23
+ require 'socket'
24
+ gs = TCPServer.open('localhost', 0)
25
+ prd = TCPSocket.open('localhost', gs.addr[1])
26
+ pwr = gs.accept
27
+ gs.close
28
+ else
29
+ prd, pwr = IO.pipe
30
+ end
31
+ self.addInput(prd, Fox::INPUT_READ){ event_handler_pull(prd) }
32
+ @event_handler_pwr = pwr
33
+ @event_handler_events = Queue.new
34
+ end
35
+
36
+ def event_handler_pull(prd)
37
+ prd.read(1) if prd
38
+ while !@event_handler_events.empty?
39
+ ev = @event_handler_events.shift
40
+ ev.call
41
+ end
42
+ end
43
+
44
+ end # class FXApp
45
+
46
+ class FXId
47
+ def runOnUiThread(&block)
48
+ app.runOnUiThread(&block)
49
+ end
50
+ end
51
+ end # module Fox
data/lib/fox16/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Fox
2
2
  def Fox.fxrubyversion
3
- "1.6.29"
3
+ "1.6.30"
4
4
  end
5
5
  end
@@ -538,5 +538,10 @@ module Fox
538
538
 
539
539
  # Check to see if multithreaded applications are supported
540
540
  def threadsEnabled?(); end
541
+
542
+ # Runs the specified block on the UI thread.
543
+ #
544
+ # The block is posted to the event queue of the UI thread.
545
+ def runOnUiThread(&block); end
541
546
  end
542
547
  end
data/rdoc-sources/FXId.rb CHANGED
@@ -30,5 +30,10 @@ module Fox
30
30
  # Destroy resource.
31
31
  #
32
32
  def destroy(); end
33
+
34
+ # Runs the specified block on the UI thread.
35
+ #
36
+ # The block is posted to the event queue of the UI thread.
37
+ def runOnUiThread(&block); end
33
38
  end
34
39
  end
@@ -357,18 +357,13 @@ public:
357
357
  */
358
358
  bool addInput(VALUE obj,FXuint mode,FXObject *tgt,FXSelector sel){
359
359
  FXInputHandle fd;
360
- FXuint m;
361
- if(mode&INPUT_READ){
362
- m=INPUT_READ;
363
- if(mode&INPUT_EXCEPT) m|=INPUT_EXCEPT;
364
- fd=FXRbGetReadFileHandle(obj);
365
- self->addInput(fd,m,tgt,sel);
360
+ if(mode&(INPUT_READ|INPUT_EXCEPT)){
361
+ fd=FXRbGetReadFileHandle(obj, mode);
362
+ self->addInput(fd,mode,tgt,sel);
366
363
  }
367
- if(mode&INPUT_WRITE){
368
- m=INPUT_WRITE;
369
- if(mode&INPUT_EXCEPT) m|=INPUT_EXCEPT;
370
- fd=FXRbGetWriteFileHandle(obj);
371
- self->addInput(fd,m,tgt,sel);
364
+ if(mode&(INPUT_WRITE|INPUT_EXCEPT)){
365
+ fd=FXRbGetWriteFileHandle(obj, mode);
366
+ self->addInput(fd,mode,tgt,sel);
372
367
  }
373
368
  return true;
374
369
  }
@@ -379,18 +374,15 @@ public:
379
374
  */
380
375
  bool removeInput(VALUE obj,FXuint mode){
381
376
  FXInputHandle fd;
382
- FXuint m;
383
- if(mode&INPUT_READ){
384
- m=INPUT_READ;
385
- if(mode&INPUT_EXCEPT) m|=INPUT_EXCEPT;
386
- fd=FXRbGetReadFileHandle(obj);
387
- self->removeInput(fd,m);
377
+ if(mode&INPUT_READ|INPUT_EXCEPT){
378
+ fd=FXRbGetReadFileHandle(obj, mode);
379
+ self->removeInput(fd,mode);
380
+ FXRbRemoveReadFileHandle(obj, mode);
388
381
  }
389
- if(mode&INPUT_WRITE){
390
- m=INPUT_WRITE;
391
- if(mode&INPUT_EXCEPT) m|=INPUT_EXCEPT;
392
- fd=FXRbGetWriteFileHandle(obj);
393
- self->removeInput(fd,m);
382
+ if(mode&(INPUT_WRITE|INPUT_EXCEPT)){
383
+ fd=FXRbGetWriteFileHandle(obj, mode);
384
+ self->removeInput(fd,mode);
385
+ FXRbRemoveWriteFileHandle(obj, mode);
394
386
  }
395
387
  return true;
396
388
  }
@@ -402,62 +394,6 @@ public:
402
394
  /// Peek to determine if there's an event
403
395
  bool peekEvent();
404
396
 
405
- /// Perform one event dispatch; return true if event was dispatched
406
- bool runOneEvent(bool blocking=true);
407
-
408
- /**
409
- * Run the main application event loop until stop() is called,
410
- * and return the exit code passed as argument to stop().
411
- */
412
- FXint run();
413
-
414
- /**
415
- * Run an event loop till some flag becomes non-zero, and
416
- * then return.
417
- */
418
- FXint runUntil(FXuint& condition); // FIXME
419
-
420
- /**
421
- * Run event loop while events are available, non-modally.
422
- * Return when no more events, timers, or chores are outstanding.
423
- */
424
- FXint runWhileEvents();
425
-
426
- /**
427
- * Run event loop while there are events are available in the queue.
428
- * Returns 1 when all events in the queue have been handled, and 0 when
429
- * the event loop was terminated due to stop() or stopModal().
430
- * Except for the modal window and its children, user input to all windows
431
- * is blocked; if the modal window is NULL, all user input is blocked.
432
- */
433
- FXint runModalWhileEvents(FXWindow* window=NULL);
434
-
435
- /**
436
- * Run modal event loop, blocking keyboard and mouse events to all windows
437
- * until stopModal is called.
438
- */
439
- FXint runModal();
440
-
441
- /**
442
- * Run a modal event loop for the given window, until stop() or stopModal() is
443
- * called. Except for the modal window and its children, user input to all
444
- * windows is blocked; if the modal window is NULL all user input is blocked.
445
- */
446
- FXint runModalFor(FXWindow* window);
447
-
448
- /**
449
- * Run modal while window is shown, or until stop() or stopModal() is called.
450
- * Except for the modal window and its children, user input to all windows
451
- * is blocked; if the modal window is NULL all user input is blocked.
452
- */
453
- FXint runModalWhileShown(FXWindow* window);
454
-
455
- /**
456
- * Run popup menu while shown, until stop() or stopModal() is called.
457
- * Also returns when entering previous cascading popup menu.
458
- */
459
- FXint runPopup(FXWindow* owner);
460
-
461
397
  /// True if the window is modal
462
398
  bool isModal(FXWindow* window) const;
463
399
 
@@ -31,6 +31,62 @@
31
31
  /// Detach application's windows
32
32
  virtual void detach();
33
33
 
34
+ /**
35
+ * Run the main application event loop until stop() is called,
36
+ * and return the exit code passed as argument to stop().
37
+ */
38
+ FXint run();
39
+
40
+ /// Perform one event dispatch; return true if event was dispatched
41
+ bool runOneEvent(bool blocking=true);
42
+
43
+ /**
44
+ * Run an event loop till some flag becomes non-zero, and
45
+ * then return.
46
+ */
47
+ FXint runUntil(FXuint& condition); // FIXME
48
+
49
+ /**
50
+ * Run event loop while events are available, non-modally.
51
+ * Return when no more events, timers, or chores are outstanding.
52
+ */
53
+ FXint runWhileEvents();
54
+
55
+ /**
56
+ * Run event loop while there are events are available in the queue.
57
+ * Returns 1 when all events in the queue have been handled, and 0 when
58
+ * the event loop was terminated due to stop() or stopModal().
59
+ * Except for the modal window and its children, user input to all windows
60
+ * is blocked; if the modal window is NULL, all user input is blocked.
61
+ */
62
+ FXint runModalWhileEvents(FXWindow* window=NULL);
63
+
64
+ /**
65
+ * Run modal event loop, blocking keyboard and mouse events to all windows
66
+ * until stopModal is called.
67
+ */
68
+ FXint runModal();
69
+
70
+ /**
71
+ * Run a modal event loop for the given window, until stop() or stopModal() is
72
+ * called. Except for the modal window and its children, user input to all
73
+ * windows is blocked; if the modal window is NULL all user input is blocked.
74
+ */
75
+ FXint runModalFor(FXWindow* window);
76
+
77
+ /**
78
+ * Run modal while window is shown, or until stop() or stopModal() is called.
79
+ * Except for the modal window and its children, user input to all windows
80
+ * is blocked; if the modal window is NULL all user input is blocked.
81
+ */
82
+ FXint runModalWhileShown(FXWindow* window);
83
+
84
+ /**
85
+ * Run popup menu while shown, until stop() or stopModal() is called.
86
+ * Also returns when entering previous cascading popup menu.
87
+ */
88
+ FXint runPopup(FXWindow* owner);
89
+
34
90
  /**
35
91
  * Initialize application.
36
92
  * Parses and removes common command line arguments, reads the registry.
data/test/TC_FXApp.rb CHANGED
@@ -7,9 +7,6 @@ class TC_FXApp < Test::Unit::TestCase
7
7
  include Fox
8
8
 
9
9
  def test_exception_for_second_app
10
- app = FXApp.new
11
- mainWindow = FXMainWindow.new(app, "")
12
- app.create
13
10
  assert_raise RuntimeError do
14
11
  app2 = FXApp.new
15
12
  end
@@ -33,14 +30,16 @@ class TC_FXApp2 < Fox::TestCase
33
30
  app.removeInput(pipe_wr, INPUT_WRITE)
34
31
 
35
32
  app.addInput(pipe_rd, INPUT_READ, app, FXApp::ID_QUIT)
36
- data_sent = false
37
- app.addTimeout(1) do
38
- data_sent = true
39
- pipe_wr.write " "
33
+ 2.times do
34
+ data_sent = false
35
+ app.addTimeout(1) do
36
+ data_sent = true
37
+ pipe_wr.write " "
38
+ end
39
+ app.run
40
+ assert data_sent, "the read input event shouldn't fire before some data is available"
41
+ assert " ", pipe_rd.read(1)
40
42
  end
41
- app.run
42
- assert data_sent, "the read input event shouldn't fire before some data is available"
43
-
44
43
  app.removeInput(pipe_rd, INPUT_READ)
45
44
  pipe_wr.close
46
45
  pipe_rd.close unless pipe_rd.closed?
@@ -50,6 +49,22 @@ class TC_FXApp2 < Fox::TestCase
50
49
  check_events *IO.pipe
51
50
  end
52
51
 
52
+ def test_addInput_on_socket_accept
53
+ s = TCPServer.open 'localhost', 0
54
+ app.addInput(s, INPUT_READ, app, FXApp::ID_QUIT)
55
+ 2.times do
56
+ pipe_wr = nil
57
+ app.addTimeout(1) do
58
+ pipe_wr = TCPSocket.open 'localhost', s.addr[1]
59
+ end
60
+ app.run
61
+ assert pipe_wr, "the read input event shouldn't fire before client connection happens"
62
+ s.accept.close
63
+ end
64
+ app.removeInput(s, INPUT_READ)
65
+ s.close
66
+ end
67
+
53
68
  def test_addInput_on_socket
54
69
  s = TCPServer.open 'localhost', 0
55
70
  pipe_wr = TCPSocket.open 'localhost', s.addr[1]
@@ -63,4 +78,39 @@ class TC_FXApp2 < Fox::TestCase
63
78
  pipe_rdwr = IO.popen("cat", "r+")
64
79
  check_events pipe_rdwr, pipe_rdwr
65
80
  end
81
+
82
+ def test_runOnUiThread
83
+ count = 0
84
+ thread = nil
85
+ Thread.new do
86
+ 10.times do |idx|
87
+ app.runOnUiThread do
88
+ count += 1
89
+ thread = Thread.current
90
+ app.stop if idx == 9
91
+ end
92
+ sleep 0.001
93
+ end
94
+ end
95
+ app.run
96
+
97
+ assert_equal Thread.current, thread
98
+ assert_equal 10, count
99
+ end
100
+
101
+ def test_runOnUiThread_same_thread
102
+ count = 0
103
+ app.addTimeout(1) do
104
+ 10.times do |idx|
105
+ app.runOnUiThread do
106
+ count += 1
107
+ app.stop if idx == 9
108
+ end
109
+ sleep 0.001
110
+ end
111
+ end
112
+ app.run
113
+
114
+ assert_equal 10, count
115
+ end
66
116
  end
@@ -0,0 +1,47 @@
1
+ require 'fox16'
2
+ require 'test/unit'
3
+ require 'testcase'
4
+ require 'openssl'
5
+
6
+ class TC_FXJPGImage < Fox::TestCase
7
+ include Fox
8
+
9
+ def setup
10
+ super(self.class.name)
11
+ end
12
+
13
+ def test_save_with_thread
14
+ w, h = 4000, 3000
15
+ img_data = OpenSSL::Random.random_bytes(w) * h * 4
16
+
17
+ count = 0
18
+ th = Thread.new do
19
+ loop do
20
+ count += 1
21
+ end
22
+ end
23
+
24
+ img = FXJPGImage.new(app)
25
+ img.setPixels( img_data, 0, w, h )
26
+
27
+ jpeg_data = FXMemoryStream.open(FXStreamSave, nil) do |outfile|
28
+ img.savePixels(outfile)
29
+ outfile.takeBuffer
30
+ end
31
+
32
+ assert_operator(count, :>=, 1000000)
33
+ assert_operator(jpeg_data.bytesize, :>=, 1000)
34
+
35
+ count = 0
36
+ img = FXJPGImage.new(app)
37
+ FXMemoryStream.open(FXStreamLoad, jpeg_data) do |infile|
38
+ img.loadPixels(infile)
39
+ end
40
+
41
+ th.kill
42
+
43
+ assert_equal 4000, img.width
44
+ assert_equal 3000, img.height
45
+ assert_operator(count, :>=, 1000000)
46
+ end
47
+ end
metadata CHANGED
@@ -1,37 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fxruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.29
4
+ version: 1.6.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lyle Johnson
8
8
  - Lars Kanis
9
9
  autorequire:
10
10
  bindir: bin
11
- cert_chain:
12
- - |
13
- -----BEGIN CERTIFICATE-----
14
- MIIDLjCCAhagAwIBAgIBAjANBgkqhkiG9w0BAQUFADA9MQ4wDAYDVQQDDAVrYW5p
15
- czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
16
- Fw0xNDAyMjYwOTMzMDBaFw0xNTAyMjYwOTMzMDBaMD0xDjAMBgNVBAMMBWthbmlz
17
- MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
18
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
19
- HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
20
- 9xi+EdVOkTV2/AVFKThcbTAQGiF/bT1n2M+B1GTybRzMg6hyhOJeGPqIhLfJEpxn
21
- lJi4+ENAVT4MpqHEAGB8yFoPC0GqiOHQsdHxQV3P3c2OZqG+yJey74QtwA2tLcLn
22
- Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
23
- L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
24
- AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
25
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQEFBQADggEBAFmIAhRT0awqLQN9e4Uv
26
- ZEk+jUWv4zkb+TWiKFJXlwjPyjGbZY9gVfOwAwMibYOK/t/+57ZzW3d0L12OUwvo
27
- on84NVvYtIr1/iskJFWFkMoIquAFCdi9p68stSPMQK2XcrJJuRot29fJtropsZBa
28
- 2cpaNd/sRYdK4oep2usdKifA1lI0hIkPb3r5nLfwG2lAqBH7WZsUICHcTgR0VEbG
29
- z9Ug5qQp9Uz73xC9YdGvGiuOX53LYobHAR4MWi2xxDlHI+ER8mRz0eY2FUuNu/Wj
30
- GrqF74zpLl7/KFdHC8VmzwZS18hvDjxeLVuVI2gIGnBInqnlqv05g/l4/1pISh5j
31
- dS4=
32
- -----END CERTIFICATE-----
33
- date: 2015-02-17 00:00:00.000000000 Z
11
+ cert_chain: []
12
+ date: 2015-07-07 00:00:00.000000000 Z
34
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mini_portile
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.6'
35
28
  - !ruby/object:Gem::Dependency
36
29
  name: rdoc
37
30
  requirement: !ruby/object:Gem::Requirement
@@ -204,6 +197,7 @@ files:
204
197
  - examples/textedit/helpwindow.rb
205
198
  - examples/textedit/prefdialog.rb
206
199
  - examples/textedit/textedit.rb
200
+ - examples/thread.rb
207
201
  - examples/unicode.rb
208
202
  - ext/fox16_c/FXRbApp.cpp
209
203
  - ext/fox16_c/FXRbDataTarget.cpp
@@ -216,6 +210,7 @@ files:
216
210
  - ext/fox16_c/extconf.rb
217
211
  - ext/fox16_c/frames_wrap.cpp
218
212
  - ext/fox16_c/fx3d_wrap.cpp
213
+ - ext/fox16_c/gvl_wrappers.cpp
219
214
  - ext/fox16_c/iconlist_wrap.cpp
220
215
  - ext/fox16_c/icons_wrap.cpp
221
216
  - ext/fox16_c/image_wrap.cpp
@@ -441,6 +436,7 @@ files:
441
436
  - ext/fox16_c/include/FXRbXPMIcon.h
442
437
  - ext/fox16_c/include/FXRbXPMImage.h
443
438
  - ext/fox16_c/include/FXRuby.h
439
+ - ext/fox16_c/include/gvl_wrappers.h
444
440
  - ext/fox16_c/include/impl.h
445
441
  - ext/fox16_c/include/inlinestubs.h
446
442
  - ext/fox16_c/label_wrap.cpp
@@ -486,6 +482,7 @@ files:
486
482
  - lib/fox16/settings.rb
487
483
  - lib/fox16/signal.rb
488
484
  - lib/fox16/splashscreen.rb
485
+ - lib/fox16/thread.rb
489
486
  - lib/fox16/timeout.rb
490
487
  - lib/fox16/tkcompat.rb
491
488
  - lib/fox16/undolist.rb
@@ -953,6 +950,7 @@ files:
953
950
  - test/TC_FXIconList.rb
954
951
  - test/TC_FXId.rb
955
952
  - test/TC_FXImage.rb
953
+ - test/TC_FXJPGImage.rb
956
954
  - test/TC_FXLight.rb
957
955
  - test/TC_FXList.rb
958
956
  - test/TC_FXListBox.rb
@@ -1032,85 +1030,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1032
1030
  version: '0'
1033
1031
  requirements: []
1034
1032
  rubyforge_project:
1035
- rubygems_version: 2.4.5
1033
+ rubygems_version: 2.4.8
1036
1034
  signing_key:
1037
1035
  specification_version: 4
1038
1036
  summary: FXRuby is the Ruby binding to the FOX GUI toolkit.
1039
- test_files:
1040
- - test/TC_FXWindow.rb
1041
- - test/TC_FXArc.rb
1042
- - test/TC_FXViewport.rb
1043
- - test/TC_FXText.rb
1044
- - test/TC_FXAccelTable.rb
1045
- - test/TC_FXTreeListBox.rb
1046
- - test/TC_FXMainWindow.rb
1047
- - test/TC_FXDirList.rb
1048
- - test/TC_FXVec3f.rb
1049
- - test/TC_FXBMPImage.rb
1050
- - test/TC_FXXPMImage.rb
1051
- - test/TC_FXRegion.rb
1052
- - test/TC_FXButton.rb
1053
- - test/TC_FXGLViewer.rb
1054
- - test/TC_FXRanged.rb
1055
- - test/TC_FXRegistry.rb
1056
- - test/TC_FXMat4f.rb
1057
- - test/TC_FXListBox.rb
1058
- - test/TC_FXTopWindow.rb
1059
- - test/TC_FXTableItem.rb
1060
- - test/TC_FXFileStream.rb
1061
- - test/TC_FXComboBox.rb
1062
- - test/TC_FXApp.rb
1063
- - test/TC_FXTable.rb
1064
- - test/TC_FXRadioButton.rb
1065
- - test/TC_FXVec4f.rb
1066
- - test/TC_FXExtentd.rb
1067
- - test/TC_FXMenuCommand.rb
1068
- - test/TC_FXPoint.rb
1069
- - test/TC_FXFontDesc.rb
1070
- - test/TC_FXTreeList.rb
1071
- - test/TC_FXIconList.rb
1072
- - test/TC_FXGLShape.rb
1073
- - test/TC_FXId.rb
1074
- - test/TC_FXVec2f.rb
1075
- - test/TC_FXXBMIcon.rb
1076
- - test/TC_FXLight.rb
1077
- - test/TC_FXMaterial.rb
1078
- - test/TC_FXSegment.rb
1079
- - test/TC_FXMemoryStream.rb
1080
- - test/TC_FXScrollWindow.rb
1081
- - test/TC_FXImage.rb
1082
- - test/TC_FXUndoList.rb
1083
- - test/TC_FXXBMImage.rb
1084
- - test/TC_FXSize.rb
1085
- - test/TC_FXDC.rb
1086
- - test/TC_FXIconDict.rb
1087
- - test/TC_FXSettings.rb
1088
- - test/TC_FXBMPIcon.rb
1089
- - test/TC_FXFileAssoc.rb
1090
- - test/TC_Misc.rb
1091
- - test/TC_FXList.rb
1092
- - test/TC_FXDataTarget.rb
1093
- - test/TC_FXXPMIcon.rb
1094
- - test/TC_FXRangef.rb
1095
- - test/TC_FXHeader.rb
1096
- - test/TC_FXRectangle.rb
1097
- - test/TC_FXMessageBox.rb
1098
- - test/TC_downcast.rb
1099
- - test/TC_FXDialogBox.rb
1100
- - test/TC_FXStream.rb
1101
- - test/TC_FXQuatf.rb
1102
- - test/TC_FXVec3d.rb
1103
- - test/TC_FXHiliteStyle.rb
1104
- - test/TC_FXExtentf.rb
1105
- - test/TC_FXShell.rb
1106
- - test/TC_FXMenuCheck.rb
1107
- - test/TC_FXGradientBar.rb
1108
- - test/TC_FXMenuRadio.rb
1109
- - test/TC_FXDCWindow.rb
1110
- - test/TC_FXScrollArea.rb
1111
- - test/TC_FXFont.rb
1112
- - test/TC_FXDCPrint.rb
1113
- - test/TC_FXFoldingList.rb
1114
- - test/TC_FXCheckButton.rb
1115
- - test/TC_FXGLGroup.rb
1116
- - test/TC_FXVec2d.rb
1037
+ test_files: []