fxruby 1.6.29-x64-mingw32 → 1.6.30-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +11 -0
  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/2.0/fox16_c.so +0 -0
  55. data/lib/2.1/fox16_c.so +0 -0
  56. data/lib/2.2/fox16_c.so +0 -0
  57. data/lib/fox16.rb +1 -0
  58. data/lib/fox16/thread.rb +51 -0
  59. data/lib/fox16/version.rb +1 -1
  60. data/lib/x64-mingw32/libFOX-1.6-0.dll +0 -0
  61. data/lib/x64-mingw32/libfxscintilla-20.dll +0 -0
  62. data/lib/x64-mingw32/libgcc_s_sjlj-1.dll +0 -0
  63. data/lib/x64-mingw32/libjpeg-8.dll +0 -0
  64. data/lib/x64-mingw32/libpng15-15.dll +0 -0
  65. data/lib/x64-mingw32/libstdc++-6.dll +0 -0
  66. data/lib/x64-mingw32/libtiff-5.dll +0 -0
  67. data/lib/x64-mingw32/libwinpthread-1.dll +0 -0
  68. data/lib/x64-mingw32/zlib1.dll +0 -0
  69. data/rdoc-sources/FXApp.rb +5 -0
  70. data/rdoc-sources/FXId.rb +5 -0
  71. data/swig-interfaces/FXApp.i +14 -78
  72. data/swig-interfaces/macros.i +56 -0
  73. data/test/TC_FXApp.rb +60 -10
  74. data/test/TC_FXJPGImage.rb +47 -0
  75. metadata +24 -103
  76. checksums.yaml.gz.sig +0 -0
  77. data.tar.gz.sig +0 -3
  78. metadata.gz.sig +0 -0
@@ -7,7 +7,7 @@ def find_installed_fox_version
7
7
  stddirs = ["/usr/include/fox-1.6",
8
8
  "/usr/local/include/fox-1.6",
9
9
  "/sw/include/fox-1.6",
10
- "/opt/local/include/fox-1.6"]
10
+ "/opt/local/include/fox-1.6"]
11
11
  usrdirs = []
12
12
  ARGV.each do |arg|
13
13
  if arg =~ /--with-fox-include/
@@ -109,12 +109,13 @@ def do_rake_compiler_setup
109
109
 
110
110
  dir_config("installed")
111
111
 
112
+ host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
112
113
  libz_recipe = MiniPortile.new("libz", LIBZ_VERSION).tap do |recipe|
113
114
  recipe.files = [LIBZ_SOURCE_URI]
114
115
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
115
116
  # Prefer host_alias over host in order to use i586-mingw32msvc as
116
117
  # correct compiler prefix for cross build, but use host if not set.
117
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
118
+ recipe.host = host
118
119
  class << recipe
119
120
  def configure
120
121
  Dir.chdir work_path do
@@ -157,7 +158,7 @@ def do_rake_compiler_setup
157
158
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
158
159
  # Prefer host_alias over host in order to use i586-mingw32msvc as
159
160
  # correct compiler prefix for cross build, but use host if not set.
160
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
161
+ recipe.host = host
161
162
  recipe.configure_options = [
162
163
  "--host=#{recipe.host}",
163
164
  "--enable-shared",
@@ -182,7 +183,7 @@ def do_rake_compiler_setup
182
183
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
183
184
  # Prefer host_alias over host in order to use i586-mingw32msvc as
184
185
  # correct compiler prefix for cross build, but use host if not set.
185
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
186
+ recipe.host = host
186
187
  recipe.configure_options = [
187
188
  "--host=#{recipe.host}",
188
189
  "--enable-shared",
@@ -202,7 +203,7 @@ def do_rake_compiler_setup
202
203
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
203
204
  # Prefer host_alias over host in order to use i586-mingw32msvc as
204
205
  # correct compiler prefix for cross build, but use host if not set.
205
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
206
+ recipe.host = host
206
207
  recipe.configure_options = [
207
208
  "--host=#{recipe.host}",
208
209
  "--enable-shared",
@@ -222,7 +223,7 @@ def do_rake_compiler_setup
222
223
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
223
224
  # Prefer host_alias over host in order to use i586-mingw32msvc as
224
225
  # correct compiler prefix for cross build, but use host if not set.
225
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
226
+ recipe.host = host
226
227
  recipe.configure_options = [
227
228
  "--host=#{recipe.host}",
228
229
  "--without-xft",
@@ -255,7 +256,7 @@ def do_rake_compiler_setup
255
256
  recipe.target = portsdir = File.expand_path('../../../ports', __FILE__)
256
257
  # Prefer host_alias over host in order to use i586-mingw32msvc as
257
258
  # correct compiler prefix for cross build, but use host if not set.
258
- recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
259
+ recipe.host = host
259
260
  recipe.configure_options = [
260
261
  "--host=#{recipe.host}",
261
262
  "--enable-shared",
@@ -282,22 +283,19 @@ def do_rake_compiler_setup
282
283
 
283
284
  checkpoint = File.join(portsdir, "#{recipe.name}-#{recipe.version}-#{recipe.host}.installed")
284
285
  unless File.exist?(checkpoint)
285
- recipe.cook
286
- FileUtils.touch checkpoint
286
+ with_env(
287
+ 'PKG_CONFIG_PATH' => "#{libfox_recipe.path}/lib/pkgconfig"
288
+ ) do
289
+ recipe.cook
290
+ FileUtils.touch checkpoint
291
+ end
287
292
  end
288
293
  recipe.activate
289
294
  end
295
+ $autodetected_fxscintilla = true
290
296
 
291
- # have_library( 'gdi32', 'CreateDC' ) && append_library( $libs, 'gdi32' )
292
- # have_library( 'opengl32' ) && append_library( $libs, 'opengl32' )
293
- # have_library( 'winspool', 'EnumPrintersA') && append_library( $libs, 'winspool' )
294
-
295
- # dir_config('libz', "#{libz_recipe.path}/include", "#{libz_recipe.path}/lib")
296
- # dir_config('libpng', "#{libpng_recipe.path}/include", "#{libpng_recipe.path}/lib")
297
- # dir_config('libtiff', "#{libtiff_recipe.path}/include", "#{libtiff_recipe.path}/lib")
298
- # dir_config('libjpeg', "#{libjpeg_recipe.path}/include", "#{libjpeg_recipe.path}/lib")
299
- dir_config('libfox', "#{libfox_recipe.path}/include", "#{libfox_recipe.path}/lib")
300
- dir_config('libfxscintilla', "#{libfxscintills_recipe.path}/include", "#{libfxscintills_recipe.path}/lib")
297
+ dir_config('libfox', "#{libfox_recipe.path}/include/fox-1.6", "#{libfox_recipe.path}/lib")
298
+ dir_config('libfxscintilla', "#{libfxscintills_recipe.path}/include/fxscintilla", "#{libfxscintills_recipe.path}/lib")
301
299
 
302
300
  shared_dlls = [
303
301
  "#{libfxscintills_recipe.path}/bin/libfxscintilla-20.dll",
@@ -320,7 +318,7 @@ def do_rake_compiler_setup
320
318
  FileUtils.cp `#{cmd}`.chomp, '.', verbose: true
321
319
  end
322
320
 
323
- CONFIG['CXX'] = "#{RbConfig::CONFIG["host"]}-g++" # CXX setting must be prefixed for cross build
321
+ CONFIG['CXX'] = "#{host}-g++" # CXX setting must be prefixed for cross build
324
322
  CONFIG['CC'] += "\nCXX=#{CONFIG['CXX']}" # Hack CXX into Makefile for cross compilation
325
323
  CONFIG['LDSHARED'].gsub!('gcc', 'g++') # ensure C++ linker is used, so that libstdc++ is linked static
326
324
  $LDFLAGS += " -s" # remove symbol table informations from shared lib
@@ -350,8 +348,8 @@ def do_rake_compiler_setup
350
348
  find_library("GLU", "gluNewQuadric", "/usr/X11R6/lib")
351
349
  $libs = append_library($libs, "Xrandr") unless RUBY_PLATFORM =~ /mingw/ || enable_config("win32-static-build")
352
350
  $libs = append_library($libs, "Xcursor") unless RUBY_PLATFORM =~ /mingw/ || enable_config("win32-static-build")
353
- find_header('FXRbCommon.h', File.join(File.dirname(__FILE__), 'include'))
354
351
  $libs = append_library($libs, "FOX-1.6")
352
+ $INCFLAGS << " -I#{File.join(File.dirname(__FILE__), 'include')}"
355
353
  if is_fxscintilla_build?
356
354
  FileUtils.move('scintilla_wrap.cpp.bak', 'scintilla_wrap.cpp') if FileTest.exist?('scintilla_wrap.cpp.bak')
357
355
  $CPPFLAGS = $CPPFLAGS + " -DWITH_FXSCINTILLA -DHAVE_FOX_1_6"
@@ -359,6 +357,13 @@ def do_rake_compiler_setup
359
357
  else
360
358
  FileUtils.move('scintilla_wrap.cpp', 'scintilla_wrap.cpp.bak') if FileTest.exist?('scintilla_wrap.cpp')
361
359
  end
360
+
361
+ checking_for("thread local variables") do
362
+ $defs.push( "-DHAVE___THREAD" ) if try_compile('__thread int x=1;')
363
+ end &&
364
+ have_func('rb_thread_call_without_gvl') &&
365
+ have_func('rb_thread_call_with_gvl')
366
+
362
367
  end
363
368
 
364
369
  # This directive processes the "--with-fox-include" and "--with-fox-lib"
@@ -372,15 +377,17 @@ dir_config('fox', '/usr/local/include/fox-1.6', '/usr/local/lib')
372
377
 
373
378
  dir_config('fxscintilla', '/usr/local/include/fxscintilla', '/usr/local/lib')
374
379
 
375
- find_installed_fox_version
380
+ unless enable_config("win32-cross")
381
+ find_installed_fox_version
376
382
 
377
- #
378
- # Check for FXScintilla header files, unless FXScintilla support has
379
- # been explicitly suppressed with the '--without-fxscintilla' flag.
380
- #
383
+ #
384
+ # Check for FXScintilla header files, unless FXScintilla support has
385
+ # been explicitly suppressed with the '--without-fxscintilla' flag.
386
+ #
381
387
 
382
- unless fxscintilla_support_suppressed?
383
- find_installed_fxscintilla_version
388
+ unless fxscintilla_support_suppressed?
389
+ find_installed_fxscintilla_version
390
+ end
384
391
  end
385
392
 
386
393
  # Platform-specific modifications
@@ -391,4 +398,5 @@ $CFLAGS += " -DRUBY_1_9" if RUBY_VERSION =~ /1\.9\./
391
398
  $CFLAGS += " -DRUBY_2_0" if RUBY_VERSION =~ /2\.0\./
392
399
 
393
400
  # Last step: build the makefile
401
+ create_header
394
402
  create_makefile("fox16_c")
@@ -0,0 +1,12 @@
1
+ /*
2
+ * gvl_wrappers.c - Wrapper functions for locking/unlocking the Ruby GVL
3
+ *
4
+ */
5
+
6
+ #include "FXRbCommon.h"
7
+
8
+ __thread int g_fxrb_thread_has_gvl = 1;
9
+
10
+ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
11
+ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_SKELETON );
12
+ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB );
@@ -38,6 +38,33 @@ inline void cls ## _detach(cls *self){ \
38
38
  inline void cls ## _create(cls *self){ \
39
39
  self->cls::create(); \
40
40
  } \
41
+ inline FXint cls ## _run_gvl(cls *self){ \
42
+ return self->cls::run(); \
43
+ } \
44
+ inline FXint cls ## _runOneEvent_gvl(cls *self, bool blocking=true){ \
45
+ return self->cls::runOneEvent(blocking); \
46
+ } \
47
+ inline FXint cls ## _runUntil_gvl(cls *self, FXuint& condition){ \
48
+ return self->cls::runUntil(condition); \
49
+ } \
50
+ inline FXint cls ## _runWhileEvents_gvl(cls *self){ \
51
+ return self->cls::runWhileEvents(); \
52
+ } \
53
+ inline FXint cls ## _runModalWhileEvents_gvl(cls *self, FXWindow* window=NULL){ \
54
+ return self->cls::runModalWhileEvents(window); \
55
+ } \
56
+ inline FXint cls ## _runModal_gvl(cls *self){ \
57
+ return self->cls::runModal(); \
58
+ } \
59
+ inline FXint cls ## _runModalFor_gvl(cls *self, FXWindow* window){ \
60
+ return self->cls::runModalFor(window); \
61
+ } \
62
+ inline FXint cls ## _runModalWhileShown_gvl(cls *self, FXWindow* window){ \
63
+ return self->cls::runModalWhileShown(window); \
64
+ } \
65
+ inline FXint cls ## _runPopup_gvl(cls *self, FXWindow* owner){ \
66
+ return self->cls::runPopup(owner); \
67
+ } \
41
68
  static void cls ## _init(cls* self,VALUE ary,bool connect){ \
42
69
  int i; \
43
70
  char **argv; \
@@ -62,7 +89,6 @@ inline void cls ## _exit(cls *self,FXint code){ \
62
89
  self->cls::exit(code); \
63
90
  }
64
91
 
65
-
66
92
  /**
67
93
  * For C/C++ applications, the argument count (argc) will always be at least
68
94
  * one, and the first element of the argument array (argv[0]) will contain
@@ -83,13 +109,13 @@ inline void cls ## _exit(cls *self,FXint code){ \
83
109
  */
84
110
  #define IMPLEMENT_FXAPP_STUBS(cls) \
85
111
  void cls::create(){ \
86
- FXRbCallVoidMethod(this,rb_intern("create")); \
112
+ FXRbCallVoidMethod(this,"create"); \
87
113
  } \
88
114
  void cls::detach(){ \
89
- FXRbCallVoidMethod(this,rb_intern("detach")); \
115
+ FXRbCallVoidMethod(this,"detach"); \
90
116
  } \
91
117
  void cls::destroy(){ \
92
- FXRbCallVoidMethod(this,rb_intern("destroy")); \
118
+ FXRbCallVoidMethod(this,"destroy"); \
93
119
  } \
94
120
  void cls::init(int& argc,char** argv,bool connect){ \
95
121
  int i; \
@@ -97,7 +123,7 @@ inline void cls ## _exit(cls *self,FXint code){ \
97
123
  for(i=1; i<argc; i++){ \
98
124
  rb_ary_push(ary,rb_str_new2(argv[i])); \
99
125
  } \
100
- FXRbCallVoidMethod(this,rb_intern("init"),ary,connect); \
126
+ FXRbCallVoidMethod(this,"init",ary,connect); \
101
127
  argc=static_cast<int>(RARRAY_LEN(ary)+1); \
102
128
  for(i=1; i<argc; i++){ \
103
129
  VALUE e=rb_ary_entry(ary,i-1); \
@@ -105,7 +131,7 @@ inline void cls ## _exit(cls *self,FXint code){ \
105
131
  } \
106
132
  } \
107
133
  void cls::exit(FXint code){ \
108
- FXRbCallVoidMethod(this,rb_intern("exit"),code); \
134
+ FXRbCallVoidMethod(this,"exit",code); \
109
135
  }
110
136
 
111
137
 
@@ -114,6 +140,12 @@ class FXRbApp : public FXApp {
114
140
  protected:
115
141
  FXbool m_bThreadsEnabled;
116
142
  FXuint sleepTime;
143
+ public:
144
+ #ifdef WIN32
145
+ static WSAEVENT interrupt_event;
146
+ #else
147
+ static int interrupt_fds[2];
148
+ #endif
117
149
  protected:
118
150
  FXRbApp(){}
119
151
  public:
@@ -126,6 +158,7 @@ public:
126
158
  };
127
159
  public:
128
160
  long onChoreThreads(FXObject*,FXSelector,void*);
161
+ long onChoreThreads_gvlcb(FXObject*,FXSelector,void*);
129
162
  public:
130
163
  // Constructor
131
164
  FXRbApp(const FXchar* name,const FXchar* vendor);
@@ -152,4 +185,6 @@ public:
152
185
  virtual ~FXRbApp();
153
186
  };
154
187
 
188
+ long FXRbApp_onChoreThreads_gvlcb(FXRbApp*,FXObject*,FXSelector,void*);
189
+
155
190
  #endif
@@ -68,40 +68,40 @@ inline void cls ## _setData(cls* self,FXuchar* pix,FXuint opts,FXint w,FXint h){
68
68
 
69
69
  #define IMPLEMENT_FXBITMAP_STUBS(cls) \
70
70
  void cls::restore(){ \
71
- FXRbCallVoidMethod(this,rb_intern("restore")); \
71
+ FXRbCallVoidMethod(this,"restore"); \
72
72
  } \
73
73
  void cls::render(){ \
74
- FXRbCallVoidMethod(this,rb_intern("render")); \
74
+ FXRbCallVoidMethod(this,"render"); \
75
75
  } \
76
76
  void cls::release(){ \
77
- FXRbCallVoidMethod(this,rb_intern("release")); \
77
+ FXRbCallVoidMethod(this,"release"); \
78
78
  } \
79
79
  bool cls::savePixels(FXStream& store) const { \
80
- return FXRbCallBoolMethod(this,rb_intern("savePixels"),store); \
80
+ return FXRbCallBoolMethod(this,"savePixels",store); \
81
81
  } \
82
82
  bool cls::loadPixels(FXStream& store){ \
83
- return FXRbCallBoolMethod(this,rb_intern("loadPixels"),store); \
83
+ return FXRbCallBoolMethod(this,"loadPixels",store); \
84
84
  } \
85
85
  void cls::scale(FXint w,FXint h){ \
86
- FXRbCallVoidMethod(this,rb_intern("scale"),w,h); \
86
+ FXRbCallVoidMethod(this,"scale",w,h); \
87
87
  } \
88
88
  void cls::mirror(FXbool horizontal,FXbool vertical){ \
89
- FXRbCallVoidMethod(this,rb_intern("mirror"),horizontal,vertical); \
89
+ FXRbCallVoidMethod(this,"mirror",horizontal,vertical); \
90
90
  } \
91
91
  void cls::rotate(FXint degrees){ \
92
- FXRbCallVoidMethod(this,rb_intern("rotate"),degrees); \
92
+ FXRbCallVoidMethod(this,"rotate",degrees); \
93
93
  } \
94
94
  void cls::crop(FXint x,FXint y,FXint w,FXint h,FXbool color){ \
95
- FXRbCallVoidMethod(this,rb_intern("crop"),x,y,w,h,color); \
95
+ FXRbCallVoidMethod(this,"crop",x,y,w,h,color); \
96
96
  } \
97
97
  void cls::fill(FXbool color){ \
98
- FXRbCallVoidMethod(this,rb_intern("fill"),color); \
98
+ FXRbCallVoidMethod(this,"fill",color); \
99
99
  } \
100
100
  void cls::setData(FXuchar* pix,FXuint opts){ \
101
- FXRbCallVoidMethod(this,rb_intern("setData"),pix,opts); \
101
+ FXRbCallVoidMethod(this,"setData",pix,opts); \
102
102
  } \
103
103
  void cls::setData(FXuchar* pix,FXuint opts,FXint w,FXint h){ \
104
- FXRbCallVoidMethod(this,rb_intern("setData"),pix,opts,w,h); \
104
+ FXRbCallVoidMethod(this,"setData",pix,opts,w,h); \
105
105
  }
106
106
 
107
107
 
@@ -27,6 +27,8 @@
27
27
  extern "C" {
28
28
  #include "ruby.h"
29
29
 
30
+ #include "extconf.h"
31
+
30
32
  #ifdef HAVE_RUBY_ENCODING_H
31
33
  #include "ruby/encoding.h"
32
34
  #endif
@@ -97,3 +99,4 @@ extern "C" {
97
99
  #include "FXScintilla.h"
98
100
  #endif
99
101
  #include "FXRuby.h"
102
+ #include "gvl_wrappers.h"
@@ -38,10 +38,10 @@ inline bool klass ## _loadPixels(klass* self,FXStream& store){ \
38
38
 
39
39
  #define IMPLEMENT_FXCURSOR_STUBS(cls) \
40
40
  bool cls::savePixels(FXStream& store) const { \
41
- return FXRbCallBoolMethod(this,rb_intern("savePixels"),store); \
41
+ return FXRbCallBoolMethod(this,"savePixels",store); \
42
42
  } \
43
43
  bool cls::loadPixels(FXStream& store){ \
44
- return FXRbCallBoolMethod(this,rb_intern("loadPixels"),store); \
44
+ return FXRbCallBoolMethod(this,"loadPixels",store); \
45
45
  }
46
46
 
47
47
  class FXRbCursor : public FXCursor {
@@ -218,190 +218,190 @@ inline void klass ## _clipChildren(klass* self,FXbool yes){ \
218
218
 
219
219
  #define IMPLEMENT_FXDC_STUBS(cls) \
220
220
  FXColor cls::readPixel(FXint x,FXint y){ \
221
- return FXRbCallColorMethod(this,rb_intern("readPixel"),x,y); \
221
+ return FXRbCallColorMethod(this,"readPixel",x,y); \
222
222
  } \
223
223
  void cls::drawPoint(FXint x,FXint y){ \
224
- FXRbCallVoidMethod(this,rb_intern("drawPoint"),x,y); \
224
+ FXRbCallVoidMethod(this,"drawPoint",x,y); \
225
225
  } \
226
226
  void cls::drawPoints(const FXPoint* points,FXuint npoints){ \
227
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawPoints"),1,FXRbMakeArray(points,npoints)); \
227
+ FXRbCallVoidArrayMethod(this,"drawPoints",points,npoints); \
228
228
  } \
229
229
  void cls::drawPointsRel(const FXPoint* points,FXuint npoints){ \
230
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawPointsRel"),1,FXRbMakeArray(points,npoints)); \
230
+ FXRbCallVoidArrayMethod(this,"drawPointsRel",points,npoints); \
231
231
  } \
232
232
  void cls::drawLine(FXint x1,FXint y1,FXint x2,FXint y2){ \
233
- FXRbCallVoidMethod(this,rb_intern("drawLine"),x1,y1,x2,y2); \
233
+ FXRbCallVoidMethod(this,"drawLine",x1,y1,x2,y2); \
234
234
  } \
235
235
  void cls::drawLines(const FXPoint* points,FXuint npoints){ \
236
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawLines"),1,FXRbMakeArray(points,npoints)); \
236
+ FXRbCallVoidArrayMethod(this,"drawLines",points,npoints); \
237
237
  } \
238
238
  void cls::drawLinesRel(const FXPoint* points,FXuint npoints){ \
239
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawLinesRel"),1,FXRbMakeArray(points,npoints)); \
239
+ FXRbCallVoidArrayMethod(this,"drawLinesRel",points,npoints); \
240
240
  } \
241
241
  void cls::drawLineSegments(const FXSegment* segments,FXuint nsegments){ \
242
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawLineSegments"),1,FXRbMakeArray(segments,nsegments)); \
242
+ FXRbCallVoidArrayMethod(this,"drawLineSegments",segments,nsegments); \
243
243
  } \
244
244
  void cls::drawRectangle(FXint x,FXint y,FXint w,FXint h){ \
245
- FXRbCallVoidMethod(this,rb_intern("drawRectangle"),x,y,w,h); \
245
+ FXRbCallVoidMethod(this,"drawRectangle",x,y,w,h); \
246
246
  } \
247
247
  void cls::drawRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh){ \
248
- FXRbCallVoidMethod(this,rb_intern("drawRoundRectangle"),x,y,w,h,ew,eh); \
248
+ FXRbCallVoidMethod(this,"drawRoundRectangle",x,y,w,h,ew,eh); \
249
249
  } \
250
250
  void cls::drawRectangles(const FXRectangle* rectangles,FXuint nrectangles){ \
251
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawRectangles"),1,FXRbMakeArray(rectangles,nrectangles)); \
251
+ FXRbCallVoidArrayMethod(this,"drawRectangles",rectangles,nrectangles); \
252
252
  } \
253
253
  void cls::drawArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2){ \
254
- FXRbCallVoidMethod(this,rb_intern("drawArc"),x,y,w,h,ang1,ang2); \
254
+ FXRbCallVoidMethod(this,"drawArc",x,y,w,h,ang1,ang2); \
255
255
  } \
256
256
  void cls::drawArcs(const FXArc* arcs,FXuint narcs){ \
257
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawArcs"),1,FXRbMakeArray(arcs,narcs)); \
257
+ FXRbCallVoidArrayMethod(this,"drawArcs",arcs,narcs); \
258
258
  } \
259
259
  void cls::drawEllipse(FXint x,FXint y,FXint w,FXint h){ \
260
- FXRbCallVoidMethod(this,rb_intern("drawEllipse"),x,y,w,h); \
260
+ FXRbCallVoidMethod(this,"drawEllipse",x,y,w,h); \
261
261
  } \
262
262
  void cls::fillRectangle(FXint x,FXint y,FXint w,FXint h){ \
263
- FXRbCallVoidMethod(this,rb_intern("fillRectangle"),x,y,w,h); \
263
+ FXRbCallVoidMethod(this,"fillRectangle",x,y,w,h); \
264
264
  } \
265
265
  void cls::fillRectangles(const FXRectangle* rectangles,FXuint nrectangles){ \
266
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillRectangles"),1,FXRbMakeArray(rectangles,nrectangles)); \
266
+ FXRbCallVoidArrayMethod(this,"fillRectangles",rectangles,nrectangles); \
267
267
  } \
268
268
  void cls::fillRoundRectangle(FXint x,FXint y,FXint w,FXint h,FXint ew,FXint eh){ \
269
- FXRbCallVoidMethod(this,rb_intern("fillRoundRectangle"),x,y,w,h,ew,eh); \
269
+ FXRbCallVoidMethod(this,"fillRoundRectangle",x,y,w,h,ew,eh); \
270
270
  } \
271
271
  void cls::fillChord(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2){ \
272
- FXRbCallVoidMethod(this,rb_intern("fillChord"),x,y,w,h,ang1,ang2); \
272
+ FXRbCallVoidMethod(this,"fillChord",x,y,w,h,ang1,ang2); \
273
273
  } \
274
274
  void cls::fillChords(const FXArc* chords,FXuint nchords){ \
275
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillChords"),1,FXRbMakeArray(chords,nchords)); \
275
+ FXRbCallVoidArrayMethod(this,"fillChords",chords,nchords); \
276
276
  } \
277
277
  void cls::fillArc(FXint x,FXint y,FXint w,FXint h,FXint ang1,FXint ang2){ \
278
- FXRbCallVoidMethod(this,rb_intern("fillArc"),x,y,w,h,ang1,ang2); \
278
+ FXRbCallVoidMethod(this,"fillArc",x,y,w,h,ang1,ang2); \
279
279
  } \
280
280
  void cls::fillArcs(const FXArc* arcs,FXuint narcs){ \
281
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillArcs"),1,FXRbMakeArray(arcs,narcs)); \
281
+ FXRbCallVoidArrayMethod(this,"fillArcs",arcs,narcs); \
282
282
  } \
283
283
  void cls::fillEllipse(FXint x,FXint y,FXint w,FXint h){ \
284
- FXRbCallVoidMethod(this,rb_intern("fillEllipse"),x,y,w,h); \
284
+ FXRbCallVoidMethod(this,"fillEllipse",x,y,w,h); \
285
285
  } \
286
286
  void cls::fillPolygon(const FXPoint* points,FXuint npoints){ \
287
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillPolygon"),1,FXRbMakeArray(points,npoints)); \
287
+ FXRbCallVoidArrayMethod(this,"fillPolygon",points,npoints); \
288
288
  } \
289
289
  void cls::fillConcavePolygon(const FXPoint* points,FXuint npoints){ \
290
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillConcavePolygon"),1,FXRbMakeArray(points,npoints)); \
290
+ FXRbCallVoidArrayMethod(this,"fillConcavePolygon",points,npoints); \
291
291
  } \
292
292
  void cls::fillComplexPolygon(const FXPoint* points,FXuint npoints){ \
293
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillComplexPolygon"),1,FXRbMakeArray(points,npoints)); \
293
+ FXRbCallVoidArrayMethod(this,"fillComplexPolygon",points,npoints); \
294
294
  } \
295
295
  void cls::fillPolygonRel(const FXPoint* points,FXuint npoints){ \
296
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillPolygonRel"),1,FXRbMakeArray(points,npoints)); \
296
+ FXRbCallVoidArrayMethod(this,"fillPolygonRel",points,npoints); \
297
297
  } \
298
298
  void cls::fillConcavePolygonRel(const FXPoint* points,FXuint npoints){ \
299
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillConcavePolygonRel"),1,FXRbMakeArray(points,npoints)); \
299
+ FXRbCallVoidArrayMethod(this,"fillConcavePolygonRel",points,npoints); \
300
300
  } \
301
301
  void cls::fillComplexPolygonRel(const FXPoint* points,FXuint npoints){ \
302
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("fillComplexPolygonRel"),1,FXRbMakeArray(points,npoints)); \
302
+ FXRbCallVoidArrayMethod(this,"fillComplexPolygonRel",points,npoints); \
303
303
  } \
304
304
  void cls::drawHashBox(FXint x,FXint y,FXint w,FXint h,FXint b){ \
305
- FXRbCallVoidMethod(this,rb_intern("drawHashBox"),x,y,w,h,b); \
305
+ FXRbCallVoidMethod(this,"drawHashBox",x,y,w,h,b); \
306
306
  } \
307
307
  void cls::drawFocusRectangle(FXint x,FXint y,FXint w,FXint h){ \
308
- FXRbCallVoidMethod(this,rb_intern("drawFocusRectangle"),x,y,w,h); \
308
+ FXRbCallVoidMethod(this,"drawFocusRectangle",x,y,w,h); \
309
309
  } \
310
310
  void cls::drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy){ \
311
- FXRbCallVoidMethod(this,rb_intern("drawArea"),source,sx,sy,sw,sh,dx,dy); \
311
+ FXRbCallVoidMethod(this,"drawArea",source,sx,sy,sw,sh,dx,dy); \
312
312
  } \
313
313
  void cls::drawArea(const FXDrawable* source,FXint sx,FXint sy,FXint sw,FXint sh,FXint dx,FXint dy,FXint dw,FXint dh){ \
314
- FXRbCallVoidMethod(this,rb_intern("drawArea"),source,sx,sy,sw,sh,dx,dy,dw,dh); \
314
+ FXRbCallVoidMethod(this,"drawArea",source,sx,sy,sw,sh,dx,dy,dw,dh); \
315
315
  } \
316
316
  void cls::drawImage(const FXImage* image,FXint dx,FXint dy){ \
317
- FXRbCallVoidMethod(this,rb_intern("drawImage"),image,dx,dy); \
317
+ FXRbCallVoidMethod(this,"drawImage",image,dx,dy); \
318
318
  } \
319
319
  void cls::drawBitmap(const FXBitmap* bitmap,FXint dx,FXint dy){ \
320
- FXRbCallVoidMethod(this,rb_intern("drawBitmap"),bitmap,dx,dy); \
320
+ FXRbCallVoidMethod(this,"drawBitmap",bitmap,dx,dy); \
321
321
  } \
322
322
  void cls::drawIcon(const FXIcon* icon,FXint dx,FXint dy){ \
323
- FXRbCallVoidMethod(this,rb_intern("drawIcon"),icon,dx,dy); \
323
+ FXRbCallVoidMethod(this,"drawIcon",icon,dx,dy); \
324
324
  } \
325
325
  void cls::drawIconShaded(const FXIcon* icon,FXint dx,FXint dy){ \
326
- FXRbCallVoidMethod(this,rb_intern("drawIconShaded"),icon,dx,dy); \
326
+ FXRbCallVoidMethod(this,"drawIconShaded",icon,dx,dy); \
327
327
  } \
328
328
  void cls::drawIconSunken(const FXIcon* icon,FXint dx,FXint dy){ \
329
- FXRbCallVoidMethod(this,rb_intern("drawIconSunken"),icon,dx,dy); \
329
+ FXRbCallVoidMethod(this,"drawIconSunken",icon,dx,dy); \
330
330
  } \
331
331
  void cls::drawText(FXint x,FXint y,const FXString& string){ \
332
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawText"),3,to_ruby(x),to_ruby(y),to_ruby(string)); \
332
+ FXRbCallDCDrawMethod(this, "drawText", x, y, string); \
333
333
  } \
334
334
  void cls::drawText(FXint x,FXint y,const FXchar* string,FXuint length){ \
335
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawText"),3,to_ruby(x),to_ruby(y),to_ruby(string,length)); \
335
+ FXRbCallDCDrawMethod(this, "drawText", x, y, string, length); \
336
336
  } \
337
337
  void cls::drawImageText(FXint x,FXint y,const FXString& string){ \
338
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawImageText"),3,to_ruby(x),to_ruby(y),to_ruby(string)); \
338
+ FXRbCallDCDrawMethod(this, "drawImageText", x, y, string); \
339
339
  } \
340
340
  void cls::drawImageText(FXint x,FXint y,const FXchar* string,FXuint length){ \
341
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("drawImageText"),3,to_ruby(x),to_ruby(y),to_ruby(string,length)); \
341
+ FXRbCallDCDrawMethod(this, "drawImageText", x, y, string, length); \
342
342
  } \
343
343
  void cls::setForeground(FXColor clr){ \
344
- FXRbCallVoidMethod(this,rb_intern("setForeground"),clr); \
344
+ FXRbCallVoidMethod(this,"setForeground",clr); \
345
345
  } \
346
346
  void cls::setBackground(FXColor clr){ \
347
- FXRbCallVoidMethod(this,rb_intern("setBackground"),clr); \
347
+ FXRbCallVoidMethod(this,"setBackground",clr); \
348
348
  } \
349
349
  void cls::setDashes(FXuint dashoffset,const FXchar *dashpattern,FXuint dashlength){ \
350
- rb_funcall(FXRbGetRubyObj(this,false),rb_intern("setDashes"),2,to_ruby(dashoffset),FXRbMakeArray(dashpattern,dashlength)); \
350
+ FXRbCallSetDashes(this,"setDashes",dashoffset,dashpattern,dashlength); \
351
351
  } \
352
352
  void cls::setLineWidth(FXuint linewidth){ \
353
- FXRbCallVoidMethod(this,rb_intern("setLineWidth"),linewidth); \
353
+ FXRbCallVoidMethod(this,"setLineWidth",linewidth); \
354
354
  } \
355
355
  void cls::setLineCap(FXCapStyle capstyle){ \
356
- FXRbCallVoidMethod(this,rb_intern("setLineCap"),capstyle); \
356
+ FXRbCallVoidMethod(this,"setLineCap",capstyle); \
357
357
  } \
358
358
  void cls::setLineJoin(FXJoinStyle joinstyle){ \
359
- FXRbCallVoidMethod(this,rb_intern("setLineJoin"),joinstyle); \
359
+ FXRbCallVoidMethod(this,"setLineJoin",joinstyle); \
360
360
  } \
361
361
  void cls::setLineStyle(FXLineStyle linestyle){ \
362
- FXRbCallVoidMethod(this,rb_intern("setLineStyle"),linestyle); \
362
+ FXRbCallVoidMethod(this,"setLineStyle",linestyle); \
363
363
  } \
364
364
  void cls::setFillStyle(FXFillStyle fillstyle){ \
365
- FXRbCallVoidMethod(this,rb_intern("setFillStyle"),fillstyle); \
365
+ FXRbCallVoidMethod(this,"setFillStyle",fillstyle); \
366
366
  } \
367
367
  void cls::setFillRule(FXFillRule fillrule){ \
368
- FXRbCallVoidMethod(this,rb_intern("setFillRule"),fillrule); \
368
+ FXRbCallVoidMethod(this,"setFillRule",fillrule); \
369
369
  } \
370
370
  void cls::setFunction(FXFunction func){ \
371
- FXRbCallVoidMethod(this,rb_intern("setFunction"),func); \
371
+ FXRbCallVoidMethod(this,"setFunction",func); \
372
372
  } \
373
373
  void cls::setTile(FXImage* image,FXint dx,FXint dy){ \
374
- FXRbCallVoidMethod(this,rb_intern("setTile"),image,dx,dy); \
374
+ FXRbCallVoidMethod(this,"setTile",image,dx,dy); \
375
375
  } \
376
376
  void cls::setStipple(FXBitmap *bitmap,FXint dx,FXint dy){ \
377
- FXRbCallVoidMethod(this,rb_intern("setStipple"),bitmap,dx,dy); \
377
+ FXRbCallVoidMethod(this,"setStipple",bitmap,dx,dy); \
378
378
  } \
379
379
  void cls::setStipple(FXStipplePattern pat,FXint dx,FXint dy){ \
380
- FXRbCallVoidMethod(this,rb_intern("setStipple"),pat,dx,dy); \
380
+ FXRbCallVoidMethod(this,"setStipple",pat,dx,dy); \
381
381
  } \
382
382
  void cls::setClipRegion(const FXRegion& region){ \
383
- FXRbCallVoidMethod(this,rb_intern("setClipRegion"),region); \
383
+ FXRbCallVoidMethod(this,"setClipRegion",region); \
384
384
  } \
385
385
  void cls::setClipRectangle(FXint x,FXint y,FXint w,FXint h){ \
386
- FXRbCallVoidMethod(this,rb_intern("setClipRectangle"),x,y,w,h); \
386
+ FXRbCallVoidMethod(this,"setClipRectangle",x,y,w,h); \
387
387
  } \
388
388
  void cls::setClipRectangle(const FXRectangle& rectangle){ \
389
- FXRbCallVoidMethod(this,rb_intern("setClipRectangle"),rectangle); \
389
+ FXRbCallVoidMethod(this,"setClipRectangle",rectangle); \
390
390
  } \
391
391
  void cls::clearClipRectangle(){ \
392
- FXRbCallVoidMethod(this,rb_intern("clearClipRectangle")); \
392
+ FXRbCallVoidMethod(this,"clearClipRectangle"); \
393
393
  } \
394
394
  void cls::setClipMask(FXBitmap* bitmap,FXint dx,FXint dy){ \
395
- FXRbCallVoidMethod(this,rb_intern("setClipMask"),bitmap,dx,dy); \
395
+ FXRbCallVoidMethod(this,"setClipMask",bitmap,dx,dy); \
396
396
  } \
397
397
  void cls::clearClipMask(){ \
398
- FXRbCallVoidMethod(this,rb_intern("clearClipMask")); \
398
+ FXRbCallVoidMethod(this,"clearClipMask"); \
399
399
  } \
400
400
  void cls::setFont(FXFont *fnt){ \
401
- FXRbCallVoidMethod(this,rb_intern("setFont"),fnt); \
401
+ FXRbCallVoidMethod(this,"setFont",fnt); \
402
402
  } \
403
403
  void cls::clipChildren(FXbool yes){ \
404
- FXRbCallVoidMethod(this,rb_intern("clipChildren"),yes); \
404
+ FXRbCallVoidMethod(this,"clipChildren",yes); \
405
405
  }
406
406
 
407
407