fxruby 1.6.40-x64-mingw32 → 1.6.41-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/History.md +1315 -23
- data/README.rdoc +1 -1
- data/Rakefile +90 -68
- data/appveyor.yml +3 -1
- data/examples/inputs.rb +9 -4
- data/examples/pig.rb +2 -2
- data/examples/unicode.rb +6 -27
- data/ext/fox16_c/FXRbApp.cpp +0 -14
- data/ext/fox16_c/FXRuby.cpp +21 -31
- data/ext/fox16_c/extconf.rb +44 -25
- data/ext/fox16_c/impl.cpp +1 -1
- data/ext/fox16_c/include/FXRbCommon.h +0 -2
- data/ext/fox16_c/include/FXRbText.h +82 -2
- data/ext/fox16_c/include/FXRbTextVirtuals.h +22 -0
- data/ext/fox16_c/include/FXRuby.h +20 -2
- data/ext/fox16_c/include/gvl_wrappers.h +29 -11
- data/ext/fox16_c/make_impl.rb +1 -1
- data/fxruby.gemspec +1 -1
- data/lib/fox16/input.rb +9 -7
- data/lib/fox16/version.rb +1 -1
- data/rdoc-sources/FXGLVisual.rb +1 -1
- data/rdoc-sources/FXIconList.rb +2 -0
- data/rdoc-sources/FXList.rb +2 -0
- data/rdoc-sources/FXListBox.rb +1 -1
- data/rdoc-sources/FXText.rb +4 -2
- data/swig-interfaces/FXText.i +10 -8
- data/swig-interfaces/macros.i +9 -0
- data/test/TC_FXText.rb +19 -0
- data/test/TC_FXVec4f.rb +26 -12
- metadata +6 -6
data/ext/fox16_c/extconf.rb
CHANGED
@@ -24,16 +24,16 @@ end
|
|
24
24
|
LIBZ_VERSION = ENV['LIBZ_VERSION'] || '1.2.7.3'
|
25
25
|
LIBZ_SOURCE_URI = "http://zlib.net/fossils/zlib-#{LIBZ_VERSION}.tar.gz"
|
26
26
|
|
27
|
-
LIBPNG_VERSION = ENV['LIBPNG_VERSION'] || '1.6.
|
27
|
+
LIBPNG_VERSION = ENV['LIBPNG_VERSION'] || '1.6.37'
|
28
28
|
LIBPNG_SOURCE_URI = "http://prdownloads.sourceforge.net/libpng/libpng-#{LIBPNG_VERSION}.tar.gz"
|
29
29
|
|
30
30
|
# LIBJPEG_VERSION = ENV['LIBJPEG_VERSION'] || '9b'
|
31
31
|
# LIBJPEG_SOURCE_URI = "http://www.ijg.org/files/jpegsrc.v#{LIBJPEG_VERSION}.tar.gz"
|
32
32
|
|
33
|
-
LIBJPEG_VERSION = ENV['LIBJPEG_VERSION'] || '
|
33
|
+
LIBJPEG_VERSION = ENV['LIBJPEG_VERSION'] || '2.0.4'
|
34
34
|
LIBJPEG_SOURCE_URI = "https://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-#{LIBJPEG_VERSION}.tar.gz"
|
35
35
|
|
36
|
-
LIBTIFF_VERSION = ENV['LIBTIFF_VERSION'] || '4.0
|
36
|
+
LIBTIFF_VERSION = ENV['LIBTIFF_VERSION'] || '4.1.0'
|
37
37
|
LIBTIFF_SOURCE_URI = "http://download.osgeo.org/libtiff/tiff-#{LIBTIFF_VERSION}.tar.gz"
|
38
38
|
|
39
39
|
LIBFOX_VERSION = ENV['LIBFOX_VERSION'] || '1.6.57'
|
@@ -44,31 +44,16 @@ LIBFXSCINTILLA_SOURCE_URI = "http://download.savannah.gnu.org/releases/f
|
|
44
44
|
# LIBFXSCINTILLA_VERSION = ENV['LIBFXSCINTILLA_VERSION'] || '3.5.2'
|
45
45
|
# LIBFXSCINTILLA_SOURCE_URI = "https://github.com/yetanothergeek/fxscintilla/archive/FXSCINTILLA-#{LIBFXSCINTILLA_VERSION.gsub(".","_")}.tar.gz"
|
46
46
|
|
47
|
-
|
48
|
-
class BuildRecipe < MiniPortile
|
47
|
+
module BuildRecipeCommons
|
49
48
|
def initialize(name, version, files)
|
50
49
|
super(name, version)
|
51
50
|
self.files = files
|
52
51
|
rootdir = File.expand_path('../../..', __FILE__)
|
53
52
|
self.target = File.join(rootdir, "ports")
|
54
|
-
|
55
|
-
# correct compiler prefix for cross build, but use host if not set.
|
56
|
-
self.host = consolidated_host(RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"])
|
53
|
+
self.host = RbConfig::CONFIG["host"]
|
57
54
|
self.patch_files = Dir[File.join(rootdir, "patches", self.name, self.version, "*.diff")].sort
|
58
55
|
end
|
59
56
|
|
60
|
-
def consolidated_host(name)
|
61
|
-
name.gsub('i686-pc-mingw32', 'i586-mingw32msvc')
|
62
|
-
end
|
63
|
-
|
64
|
-
def configure_defaults
|
65
|
-
[
|
66
|
-
"--host=#{host}", # build for specific target (host)
|
67
|
-
"--disable-static",
|
68
|
-
"--enable-shared",
|
69
|
-
]
|
70
|
-
end
|
71
|
-
|
72
57
|
def port_path
|
73
58
|
"#{target}/#{host}"
|
74
59
|
end
|
@@ -96,6 +81,44 @@ class BuildRecipe < MiniPortile
|
|
96
81
|
end
|
97
82
|
end
|
98
83
|
|
84
|
+
class BuildRecipe < MiniPortile
|
85
|
+
include BuildRecipeCommons
|
86
|
+
|
87
|
+
def configure_defaults
|
88
|
+
[
|
89
|
+
"--host=#{host}", # build for specific target (host)
|
90
|
+
"--disable-static",
|
91
|
+
"--enable-shared",
|
92
|
+
]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
class BuildRecipeCMake < MiniPortileCMake
|
96
|
+
include BuildRecipeCommons
|
97
|
+
|
98
|
+
def system_processor
|
99
|
+
case host
|
100
|
+
when /x86_64/ then "amd64"
|
101
|
+
when /i686/ then "x86"
|
102
|
+
else raise "unknown host #{host}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def configure_defaults
|
107
|
+
[
|
108
|
+
"-DENABLE_STATIC=0",
|
109
|
+
"-DENABLE_SHARED=1",
|
110
|
+
"-DCMAKE_SYSTEM_NAME=Windows",
|
111
|
+
"-DCMAKE_C_COMPILER=#{host}-gcc",
|
112
|
+
"-DCMAKE_CXX_COMPILER=#{host}-g++",
|
113
|
+
"-DCMAKE_SYSTEM_PROCESSOR=#{system_processor}",
|
114
|
+
]
|
115
|
+
end
|
116
|
+
|
117
|
+
def make_cmd
|
118
|
+
ENV["MAKE"] || "make"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
99
122
|
def do_rake_compiler_setup
|
100
123
|
if enable_config("win32-cross")
|
101
124
|
dir_config("installed")
|
@@ -141,7 +164,7 @@ def do_rake_compiler_setup
|
|
141
164
|
recipe.cook_and_activate
|
142
165
|
end
|
143
166
|
|
144
|
-
libjpeg_recipe =
|
167
|
+
libjpeg_recipe = BuildRecipeCMake.new("libjpeg", LIBJPEG_VERSION, [LIBJPEG_SOURCE_URI]).tap do |recipe|
|
145
168
|
recipe.cook_and_activate
|
146
169
|
end
|
147
170
|
|
@@ -309,10 +332,6 @@ end
|
|
309
332
|
# Platform-specific modifications
|
310
333
|
do_rake_compiler_setup
|
311
334
|
|
312
|
-
$CFLAGS += " -DRUBY_1_8" if RUBY_VERSION =~ /1\.8\./
|
313
|
-
$CFLAGS += " -DRUBY_1_9" if RUBY_VERSION =~ /1\.9\./
|
314
|
-
$CFLAGS += " -DRUBY_2_0" if RUBY_VERSION =~ /2\.0\./
|
315
|
-
|
316
335
|
if RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
317
336
|
$CXXFLAGS += " -Wno-unused-function"
|
318
337
|
$CXXFLAGS += " -Wno-maybe-uninitialized"
|
data/ext/fox16_c/impl.cpp
CHANGED
@@ -1026,7 +1026,7 @@ IMPLEMENT_FXID_STUBS(FXRbText)
|
|
1026
1026
|
IMPLEMENT_FXDRAWABLE_STUBS(FXRbText)
|
1027
1027
|
IMPLEMENT_FXWINDOW_STUBS(FXRbText)
|
1028
1028
|
IMPLEMENT_FXSCROLLAREA_STUBS(FXRbText)
|
1029
|
-
IMPLEMENT_FXTEXT_STUBS(FXRbText)
|
1029
|
+
IMPLEMENT_FXTEXT_STUBS(FXRbText,FXText)
|
1030
1030
|
|
1031
1031
|
/* Start stub implementations for class FXRbTextField */
|
1032
1032
|
IMPLEMENT_FXOBJECT_STUBS(FXRbTextField)
|
@@ -24,7 +24,6 @@
|
|
24
24
|
* $Id: FXRbCommon.h 2303 2005-12-09 03:17:28Z lyle $
|
25
25
|
***********************************************************************/
|
26
26
|
|
27
|
-
extern "C" {
|
28
27
|
#include "ruby.h"
|
29
28
|
|
30
29
|
#include "extconf.h"
|
@@ -32,7 +31,6 @@ extern "C" {
|
|
32
31
|
#ifdef HAVE_RUBY_ENCODING_H
|
33
32
|
#include "ruby/encoding.h"
|
34
33
|
#endif
|
35
|
-
}
|
36
34
|
|
37
35
|
/**
|
38
36
|
* The Ruby header files for Win32 redefine the symbol "select", which
|
@@ -27,7 +27,39 @@
|
|
27
27
|
#ifndef FXRBTEXT_H
|
28
28
|
#define FXRBTEXT_H
|
29
29
|
|
30
|
-
#define DECLARE_FXTEXT_STUBS(klass) \
|
30
|
+
#define DECLARE_FXTEXT_STUBS(klass,subklass) \
|
31
|
+
inline void klass ## _eraseCursorOverhang(klass* self){ \
|
32
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
33
|
+
dynamic_cast<subklass*>(self)->public_eraseCursorOverhang(); \
|
34
|
+
} \
|
35
|
+
inline void klass ## _drawCursor(klass* self,FXuint state){ \
|
36
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
37
|
+
dynamic_cast<subklass*>(self)->public_drawCursor(state); \
|
38
|
+
} \
|
39
|
+
inline FXuint klass ## _style(klass* self,FXint row,FXint beg,FXint end,FXint pos){ \
|
40
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
41
|
+
return dynamic_cast<subklass*>(self)->public_style(row, beg, end, pos); \
|
42
|
+
} \
|
43
|
+
inline void klass ## _drawBufferText(klass* self,FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style){ \
|
44
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
45
|
+
dynamic_cast<subklass*>(self)->public_drawBufferText(dc, x, y, w, h, pos, n, style); \
|
46
|
+
} \
|
47
|
+
inline void klass ## _fillBufferRect(klass* self,FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style){ \
|
48
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
49
|
+
dynamic_cast<subklass*>(self)->public_fillBufferRect(dc, x, y, w, h, style); \
|
50
|
+
} \
|
51
|
+
inline void klass ## _drawTextRow(klass* self,FXDCWindow& dc,FXint line,FXint left,FXint right){ \
|
52
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
53
|
+
dynamic_cast<subklass*>(self)->public_drawTextRow(dc, line, left, right); \
|
54
|
+
} \
|
55
|
+
inline void klass ## _drawContents(klass* self,FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
56
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
57
|
+
dynamic_cast<subklass*>(self)->public_drawContents(dc, x, y, w, h); \
|
58
|
+
} \
|
59
|
+
inline void klass ## _drawNumbers(klass* self,FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
60
|
+
FXASSERT(self->isMemberOf(FXMETACLASS(subklass))); \
|
61
|
+
dynamic_cast<subklass*>(self)->public_drawNumbers(dc, x, y, w, h); \
|
62
|
+
} \
|
31
63
|
inline void klass ## _setCursorPos(klass* self,FXint pos,FXbool notify){ \
|
32
64
|
self->klass::setCursorPos(pos,notify); \
|
33
65
|
} \
|
@@ -72,7 +104,55 @@ inline void klass ## _setStyledText(klass* self,const FXString& text,FXint style
|
|
72
104
|
}
|
73
105
|
|
74
106
|
|
75
|
-
#define IMPLEMENT_FXTEXT_STUBS(cls) \
|
107
|
+
#define IMPLEMENT_FXTEXT_STUBS(cls,superklass) \
|
108
|
+
void cls::eraseCursorOverhang(){ \
|
109
|
+
FXRbCallVoidMethod(this,"eraseCursorOverhang"); \
|
110
|
+
} \
|
111
|
+
void cls::public_eraseCursorOverhang(){ \
|
112
|
+
superklass::eraseCursorOverhang(); \
|
113
|
+
} \
|
114
|
+
void cls::drawCursor(FXuint state){ \
|
115
|
+
FXRbCallVoidMethod(this,"drawCursor", state); \
|
116
|
+
} \
|
117
|
+
void cls::public_drawCursor(FXuint state){ \
|
118
|
+
superklass::drawCursor(state); \
|
119
|
+
} \
|
120
|
+
FXuint cls::style(FXint row,FXint beg,FXint end,FXint pos){ \
|
121
|
+
return FXRbCallUIntMethod(this,"style", row, beg, end, pos); \
|
122
|
+
} \
|
123
|
+
FXuint cls::public_style(FXint row,FXint beg,FXint end,FXint pos){ \
|
124
|
+
return superklass::style(row, beg, end, pos); \
|
125
|
+
} \
|
126
|
+
void cls::drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style){ \
|
127
|
+
FXRbCallVoidMethod(this,"drawBufferText", dc, x, y, w, h, pos, n, style); \
|
128
|
+
} \
|
129
|
+
void cls::public_drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style){ \
|
130
|
+
superklass::drawBufferText(dc, x, y, w, h, pos, n, style); \
|
131
|
+
} \
|
132
|
+
void cls::fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style){ \
|
133
|
+
FXRbCallVoidMethod(this,"fillBufferRect", dc, x, y, w, h, style); \
|
134
|
+
} \
|
135
|
+
void cls::public_fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style){ \
|
136
|
+
superklass::fillBufferRect(dc, x, y, w, h, style); \
|
137
|
+
} \
|
138
|
+
void cls::drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right){ \
|
139
|
+
FXRbCallVoidMethod(this,"drawTextRow", dc, line, left, right); \
|
140
|
+
} \
|
141
|
+
void cls::public_drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right){ \
|
142
|
+
superklass::drawTextRow(dc, line, left, right); \
|
143
|
+
} \
|
144
|
+
void cls::drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
145
|
+
FXRbCallVoidMethod(this,"drawContents", dc, x, y, w, h); \
|
146
|
+
} \
|
147
|
+
void cls::public_drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
148
|
+
superklass::drawContents(dc, x, y, w, h); \
|
149
|
+
} \
|
150
|
+
void cls::drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
151
|
+
FXRbCallVoidMethod(this,"drawNumbers", dc, x, y, w, h); \
|
152
|
+
} \
|
153
|
+
void cls::public_drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h){ \
|
154
|
+
superklass::drawNumbers(dc, x, y, w, h); \
|
155
|
+
} \
|
76
156
|
void cls::setCursorPos(FXint pos,FXbool notify){ \
|
77
157
|
FXRbCallVoidMethod(this,"setCursorPos",pos,notify); \
|
78
158
|
} \
|
@@ -1,3 +1,25 @@
|
|
1
|
+
protected:
|
2
|
+
// Overrides the base class versions of these virtual functions
|
3
|
+
virtual void eraseCursorOverhang();
|
4
|
+
virtual void drawCursor(FXuint state);
|
5
|
+
virtual FXuint style(FXint row,FXint beg,FXint end,FXint pos);
|
6
|
+
virtual void drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style);
|
7
|
+
virtual void fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style);
|
8
|
+
virtual void drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right);
|
9
|
+
virtual void drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h);
|
10
|
+
virtual void drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h);
|
11
|
+
|
12
|
+
public:
|
13
|
+
// Publically accessible versions of those protected functions
|
14
|
+
void public_eraseCursorOverhang();
|
15
|
+
void public_drawCursor(FXuint state);
|
16
|
+
FXuint public_style(FXint row,FXint beg,FXint end,FXint pos);
|
17
|
+
void public_drawBufferText(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXint pos,FXint n,FXuint style);
|
18
|
+
void public_fillBufferRect(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h,FXuint style);
|
19
|
+
void public_drawTextRow(FXDCWindow& dc,FXint line,FXint left,FXint right);
|
20
|
+
void public_drawContents(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h);
|
21
|
+
void public_drawNumbers(FXDCWindow& dc,FXint x,FXint y,FXint w,FXint h);
|
22
|
+
|
1
23
|
public:
|
2
24
|
// Overrides the base class version of setCursorPos()
|
3
25
|
virtual void setCursorPos(FXint pos,FXbool notify=FALSE);
|
@@ -359,6 +359,9 @@ inline VALUE to_ruby_cb(const FXFontDesc& fontdesc){
|
|
359
359
|
inline VALUE to_ruby_cb(FXDC& dc){
|
360
360
|
return FXRbGetRubyObjCb(reinterpret_cast<void*>(&dc), FXRbTypeQuery("FXDC *"));
|
361
361
|
}
|
362
|
+
inline VALUE to_ruby_cb(FXDCWindow& dc){
|
363
|
+
return FXRbGetRubyObjCb(reinterpret_cast<void*>(&dc), FXRbTypeQuery("FXDCWindow *"));
|
364
|
+
}
|
362
365
|
|
363
366
|
template<class TYPE>
|
364
367
|
VALUE to_ruby_cb(TYPE obj){
|
@@ -466,7 +469,7 @@ void FXRbCallVoidMethod_gvlcb(FXDC* recv,const char *func,TYPE1 arg1,TYPE2 arg2,
|
|
466
469
|
|
467
470
|
/* Four arguments */
|
468
471
|
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4>
|
469
|
-
void FXRbCallVoidMethod_gvlcb(FXObject* recv,const char *func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4){
|
472
|
+
void FXRbCallVoidMethod_gvlcb(FXObject* recv,const char *func, TYPE1& arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4){
|
470
473
|
VALUE obj=FXRbGetRubyObj(recv,false);
|
471
474
|
FXASSERT(!NIL_P(obj));
|
472
475
|
rb_funcall(obj,rb_intern(func),4,to_ruby_cb(arg1),to_ruby_cb(arg2),to_ruby_cb(arg3),to_ruby_cb(arg4));
|
@@ -496,7 +499,7 @@ void FXRbCallVoidMethod_gvlcb(FXDC* recv, const char *func, TYPE1 arg1, TYPE2 ar
|
|
496
499
|
|
497
500
|
/* Six arguments */
|
498
501
|
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4, class TYPE5, class TYPE6>
|
499
|
-
void FXRbCallVoidMethod_gvlcb(const FXObject* recv, const char *func, TYPE1 arg1, TYPE2& arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5, TYPE6 arg6){
|
502
|
+
void FXRbCallVoidMethod_gvlcb(const FXObject* recv, const char *func, TYPE1& arg1, TYPE2& arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5, TYPE6 arg6){
|
500
503
|
VALUE obj=FXRbGetRubyObj(recv,false);
|
501
504
|
FXASSERT(!NIL_P(obj));
|
502
505
|
rb_funcall(obj,rb_intern(func),6,to_ruby_cb(arg1),to_ruby_cb(arg2),to_ruby_cb(arg3),to_ruby_cb(arg4),to_ruby_cb(arg5),to_ruby_cb(arg6));
|
@@ -517,6 +520,13 @@ void FXRbCallVoidMethod_gvlcb(FXDC* recv, const char *func, TYPE1 arg1, TYPE2 ar
|
|
517
520
|
rb_funcall(obj,rb_intern(func),7,to_ruby_cb(arg1),to_ruby_cb(arg2),to_ruby_cb(arg3),to_ruby_cb(arg4),to_ruby_cb(arg5),to_ruby_cb(arg6),to_ruby_cb(arg7));
|
518
521
|
}
|
519
522
|
|
523
|
+
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4, class TYPE5, class TYPE6, class TYPE7, class TYPE8>
|
524
|
+
void FXRbCallVoidMethod_gvlcb(FXObject* recv, const char *func, TYPE1& arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5, TYPE6 arg6, TYPE7 arg7, TYPE8 arg8){
|
525
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
526
|
+
FXASSERT(!NIL_P(obj));
|
527
|
+
rb_funcall(obj,rb_intern(func),8,to_ruby_cb(arg1),to_ruby_cb(arg2),to_ruby_cb(arg3),to_ruby_cb(arg4),to_ruby_cb(arg5),to_ruby_cb(arg6),to_ruby_cb(arg7), to_ruby_cb(arg8));
|
528
|
+
}
|
529
|
+
|
520
530
|
/* Nine arguments */
|
521
531
|
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4, class TYPE5, class TYPE6, class TYPE7, class TYPE8, class TYPE9>
|
522
532
|
void FXRbCallVoidMethod_gvlcb(FXDC* recv, const char *func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4, TYPE5 arg5, TYPE6 arg6, TYPE7 arg7, TYPE8 arg8, TYPE9 arg9){
|
@@ -644,6 +654,14 @@ FXuint FXRbCallUIntMethod_gvlcb(FXObject* recv, const char *func, TYPE arg){
|
|
644
654
|
return static_cast<FXuint>(NUM2UINT(v));
|
645
655
|
}
|
646
656
|
|
657
|
+
template<class TYPE1, class TYPE2, class TYPE3, class TYPE4>
|
658
|
+
FXuint FXRbCallUIntMethod_gvlcb(FXObject* recv, const char *func, TYPE1 arg1, TYPE2 arg2, TYPE3 arg3, TYPE4 arg4){
|
659
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
660
|
+
FXASSERT(!NIL_P(obj));
|
661
|
+
VALUE v=rb_funcall(obj,rb_intern(func),4,to_ruby_cb(arg1),to_ruby_cb(arg2),to_ruby_cb(arg3),to_ruby_cb(arg4));
|
662
|
+
return static_cast<FXuint>(NUM2UINT(v));
|
663
|
+
}
|
664
|
+
|
647
665
|
// Call functions with FXString return value
|
648
666
|
FXString FXRbCallStringMethod_gvlcb(const FXObject* recv, const char *func);
|
649
667
|
|
@@ -15,16 +15,14 @@
|
|
15
15
|
#ifndef __gvl_wrappers_h
|
16
16
|
#define __gvl_wrappers_h
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
#endif
|
18
|
+
#if defined(HAVE_RB_THREAD_CALL_WITH_GVL)
|
19
|
+
extern "C" void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
|
20
|
+
#endif
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
}
|
22
|
+
#if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
|
23
|
+
extern "C" void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
24
|
+
rb_unblock_function_t *ubf, void *data2);
|
25
|
+
#endif
|
28
26
|
|
29
27
|
void fxrb_wakeup_fox(void *);
|
30
28
|
|
@@ -287,7 +285,7 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
287
285
|
|
288
286
|
#define FOR_EACH_PARAM_OF_FXRbCallVoidMethod_6(param) \
|
289
287
|
param(ID, , func) \
|
290
|
-
param(TYPE1,
|
288
|
+
param(TYPE1, &, arg1) \
|
291
289
|
param(TYPE2, , arg2) \
|
292
290
|
param(TYPE3, , arg3) \
|
293
291
|
param(TYPE4, , arg4)
|
@@ -302,7 +300,7 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
302
300
|
|
303
301
|
#define FOR_EACH_PARAM_OF_FXRbCallVoidMethod_8(param) \
|
304
302
|
param(ID, , func) \
|
305
|
-
param(TYPE1,
|
303
|
+
param(TYPE1, &, arg1) \
|
306
304
|
param(TYPE2, &, arg2) \
|
307
305
|
param(TYPE3, , arg3) \
|
308
306
|
param(TYPE4, , arg4) \
|
@@ -319,6 +317,17 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
319
317
|
param(TYPE6, , arg6) \
|
320
318
|
param(TYPE7, , arg7)
|
321
319
|
|
320
|
+
#define FOR_EACH_PARAM_OF_FXRbCallVoidMethod_10(param) \
|
321
|
+
param(ID, , func) \
|
322
|
+
param(TYPE1, &, arg1) \
|
323
|
+
param(TYPE2, , arg2) \
|
324
|
+
param(TYPE3, , arg3) \
|
325
|
+
param(TYPE4, , arg4) \
|
326
|
+
param(TYPE5, , arg5) \
|
327
|
+
param(TYPE6, , arg6) \
|
328
|
+
param(TYPE7, , arg7) \
|
329
|
+
param(TYPE8, , arg8)
|
330
|
+
|
322
331
|
#define FOR_EACH_PARAM_OF_FXRbCallVoidMethod_11(param) \
|
323
332
|
param(ID, , func) \
|
324
333
|
param(TYPE1, , arg1) \
|
@@ -387,6 +396,13 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
387
396
|
param(ID, , func) \
|
388
397
|
param(TYPE1, , arg1)
|
389
398
|
|
399
|
+
#define FOR_EACH_PARAM_OF_FXRbCallUIntMethod_6(param) \
|
400
|
+
param(ID, , func) \
|
401
|
+
param(TYPE1, , arg1) \
|
402
|
+
param(TYPE2, , arg2) \
|
403
|
+
param(TYPE3, , arg3) \
|
404
|
+
param(TYPE4, , arg4)
|
405
|
+
|
390
406
|
#define FOR_EACH_PARAM_OF_FXRbCallGLObjectMethod_2(param) \
|
391
407
|
param(ID, , func)
|
392
408
|
|
@@ -544,6 +560,7 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
544
560
|
function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 7) \
|
545
561
|
function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 8) \
|
546
562
|
function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 9) \
|
563
|
+
function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 10) \
|
547
564
|
function(FXRbCallVoidMethod, GVL_TYPE_VOID, void, RECV, recv, 11) \
|
548
565
|
function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 2) \
|
549
566
|
function(FXRbCallBoolMethod, GVL_TYPE_NONVOID, bool, RECV, recv, 3) \
|
@@ -556,6 +573,7 @@ FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL )
|
|
556
573
|
function(FXRbCallIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 7) \
|
557
574
|
function(FXRbCallLongMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 5) \
|
558
575
|
function(FXRbCallUIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 3) \
|
576
|
+
function(FXRbCallUIntMethod, GVL_TYPE_NONVOID, FXint, RECV, recv, 6) \
|
559
577
|
function(FXRbCallGLObjectMethod, GVL_TYPE_NONVOID, FXGLObject*, RECV, recv, 2) \
|
560
578
|
function(FXRbCallGLObjectMethod, GVL_TYPE_NONVOID, FXGLObject*, RECV, recv, 3) \
|
561
579
|
function(FXRbCallGLObjectMethod, GVL_TYPE_NONVOID, FXGLObject*, RECV, recv, 4) \
|
data/ext/fox16_c/make_impl.rb
CHANGED
data/fxruby.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.email = ["lyle@lylejohnson.name", "lars@greiz-reinsdorf.de"]
|
32
32
|
|
33
33
|
spec.summary = %q{FXRuby is the Ruby binding to the FOX GUI toolkit.}
|
34
|
-
spec.homepage = "
|
34
|
+
spec.homepage = "https://github.com/larskanis/fxruby"
|
35
35
|
spec.license = 'LGPL-2.1'
|
36
36
|
|
37
37
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
data/lib/fox16/input.rb
CHANGED
@@ -5,10 +5,13 @@ module Fox
|
|
5
5
|
alias addInputOrig addInput # :nodoc:
|
6
6
|
|
7
7
|
#
|
8
|
-
# Add
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
8
|
+
# Add an IO object as _io_ to be watched for activity as determined by _mode_, where _mode_ is a bitwise OR (+INPUT_READ+, +INPUT_WRITE+, +INPUT_EXCEPT+).
|
9
|
+
# A message of type +SEL_IO_READ+, +SEL_IO_WRITE+, or +SEL_IO_EXCEPT+ will be sent to the target when the specified activity is detected on the file descriptor.
|
10
|
+
#
|
11
|
+
# On POSIX operating systems all kinds of file descriptors can be watched.
|
12
|
+
# It works for +Socket.new+, +IO.popen+, +IO.pipe+, +IO.for_fd+, +File.open+, etc.
|
13
|
+
# Windows provides level triggered events only for network sockets.
|
14
|
+
# So on Windows only socket IO objects like +TCPSocket.new+ and +TCPServer.new+ are currently supported to be watched.
|
12
15
|
#
|
13
16
|
# There are several forms for #addInput; the original form (from FOX)
|
14
17
|
# takes four arguments:
|
@@ -30,8 +33,7 @@ module Fox
|
|
30
33
|
# ... handle the I/O event ...
|
31
34
|
# }
|
32
35
|
#
|
33
|
-
|
34
|
-
def addInput(fd, mode, *args, &block)
|
36
|
+
def addInput(io, mode, *args, &block)
|
35
37
|
params = {}
|
36
38
|
params = args.pop if args.last.is_a? Hash
|
37
39
|
tgt, sel = nil, 0
|
@@ -51,7 +53,7 @@ module Fox
|
|
51
53
|
tgt.pconnect(SEL_IO_WRITE, block, params)
|
52
54
|
tgt.pconnect(SEL_IO_EXCEPT, block, params)
|
53
55
|
end
|
54
|
-
addInputOrig(
|
56
|
+
addInputOrig(io, mode, tgt, sel)
|
55
57
|
end
|
56
58
|
|
57
59
|
end # class FXApp
|