wxruby3 0.9.0.pre.beta.10 → 0.9.0.pre.beta.13
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.
- checksums.yaml +4 -4
- data/INSTALL.md +85 -0
- data/README.md +2 -0
- data/assets/logo.png +0 -0
- data/assets/logo.svg +170 -0
- data/assets/logo.xcf +0 -0
- data/ext/wxruby3/include/wxruby-ScaledDC.h +549 -0
- data/ext/wxruby3/swig/wx.i +1 -1
- data/lib/wx/core/array_ext.rb +26 -0
- data/lib/wx/core/art_locator.rb +92 -0
- data/lib/wx/core/artprovider.rb +1 -1
- data/lib/wx/core/bitmap.rb +90 -53
- data/lib/wx/core/cursor.rb +12 -0
- data/lib/wx/core/data_object.rb +74 -6
- data/lib/wx/core/dataformat.rb +3 -1
- data/lib/wx/core/dc.rb +76 -52
- data/lib/wx/core/enum.rb +4 -0
- data/lib/wx/core/event.rb +38 -5
- data/lib/wx/core/evthandler.rb +64 -23
- data/lib/wx/core/icon.rb +50 -35
- data/lib/wx/core/id_helper.rb +32 -0
- data/lib/wx/core/image.rb +63 -53
- data/lib/wx/core/point.rb +35 -10
- data/lib/wx/core/real_point.rb +35 -10
- data/lib/wx/core/rect.rb +44 -9
- data/lib/wx/core/region_iterator.rb +37 -0
- data/lib/wx/core/size.rb +32 -5
- data/lib/wx/core/window.rb +8 -31
- data/lib/wx/doc/array_ext.rb +27 -0
- data/lib/wx/doc/art_locator.rb +57 -0
- data/lib/wx/doc/bitmap.rb +27 -0
- data/lib/wx/doc/clipboard.rb +12 -0
- data/lib/wx/doc/const.rb +77 -0
- data/lib/wx/doc/cursor.rb +16 -0
- data/lib/wx/doc/data_object.rb +103 -0
- data/lib/wx/doc/dc.rb +63 -46
- data/lib/wx/doc/event.rb +24 -0
- data/lib/wx/doc/events.rb +14 -0
- data/lib/wx/doc/evthandler.rb +24 -3
- data/lib/wx/doc/extra/00_starting.md +1 -1
- data/lib/wx/doc/extra/06_geometry.md +10 -4
- data/lib/wx/doc/extra/10_art.md +105 -0
- data/lib/wx/doc/gc_dc.rb +21 -0
- data/lib/wx/doc/gdi_common.rb +155 -6
- data/lib/wx/doc/graphics_context.rb +42 -0
- data/lib/wx/doc/icon.rb +18 -0
- data/lib/wx/doc/id_helper.rb +25 -0
- data/lib/wx/doc/image.rb +33 -0
- data/lib/wx/doc/region_iterator.rb +31 -0
- data/lib/wx/doc/scaled_dc.rb +17 -0
- data/lib/wx/doc/window.rb +18 -0
- data/lib/wx/global_const.rb +4 -3
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/cmd/sampler.rb +3 -21
- data/rakelib/lib/config.rb +4 -4
- data/rakelib/lib/core/package.rb +6 -6
- data/rakelib/lib/core/spec.rb +2 -0
- data/rakelib/lib/director/art_provider.rb +2 -2
- data/rakelib/lib/director/busy_info.rb +9 -7
- data/rakelib/lib/director/clipboard.rb +1 -1
- data/rakelib/lib/director/colour_picker_ctrl.rb +1 -0
- data/rakelib/lib/director/data_object.rb +162 -0
- data/rakelib/lib/director/data_object_simple_base.rb +123 -0
- data/rakelib/lib/director/derived_dc.rb +134 -2
- data/rakelib/lib/director/dir_picker_ctrl.rb +1 -0
- data/rakelib/lib/director/event.rb +73 -8
- data/rakelib/lib/director/events.rb +19 -1
- data/rakelib/lib/director/file_picker_ctrl.rb +1 -0
- data/rakelib/lib/director/font_picker_ctrl.rb +1 -0
- data/rakelib/lib/director/gdicommon.rb +1 -3
- data/rakelib/lib/director/graphics_context.rb +89 -0
- data/rakelib/lib/director/help_controller.rb +2 -2
- data/rakelib/lib/director/html_data_object.rb +37 -0
- data/rakelib/lib/director/image.rb +55 -0
- data/rakelib/lib/director/region_iterator.rb +48 -0
- data/rakelib/lib/director/richtext_buffer.rb +1 -1
- data/rakelib/lib/director/richtext_buffer_data_object.rb +45 -0
- data/rakelib/lib/director/scroll_bar.rb +39 -0
- data/rakelib/lib/director/slider.rb +39 -0
- data/rakelib/lib/director/window.rb +36 -5
- data/rakelib/lib/director/window_disabler.rb +0 -7
- data/rakelib/lib/extractor/class.rb +1 -1
- data/rakelib/lib/extractor/function.rb +1 -1
- data/rakelib/lib/generate/doc.rb +26 -6
- data/rakelib/lib/specs/interfaces.rb +8 -1
- data/rakelib/lib/typemap/common.rb +1 -1
- data/rakelib/lib/typemap/data_object_data.rb +13 -4
- data/rakelib/lib/util/string.rb +29 -8
- data/samples/art/wxruby-128x128.png +0 -0
- data/samples/art/wxruby-256x256.png +0 -0
- data/samples/art/wxruby-64x64.png +0 -0
- data/samples/art/wxruby.ico +0 -0
- data/samples/art/wxruby.png +0 -0
- data/samples/drawing/graphics_drawing.rb +1 -2
- data/samples/propgrid/propgrid.rb +65 -65
- data/samples/sample.xpm +246 -470
- data/samples/treectrl/treectrl.rb +1 -1
- data/tests/art/my_art/sample.xpm +251 -0
- data/tests/art/sample3.xpm +251 -0
- data/tests/art/test_art/bitmap/sample.xpm +251 -0
- data/tests/art/test_art/bitmap/wxruby.bmp +0 -0
- data/tests/art/test_art/bitmap/wxruby.png +0 -0
- data/tests/art/test_art/bitmap/wxruby.xpm +251 -0
- data/tests/art/test_art/cursor/wxruby.bmp +0 -0
- data/tests/art/test_art/icon/sample.xpm +251 -0
- data/tests/art/test_art/icon/wxruby.ico +0 -0
- data/tests/art/test_art/icon/wxruby.png +0 -0
- data/tests/art/test_art/image/sample.xpm +251 -0
- data/tests/art/test_art/image/wxruby.jpg +0 -0
- data/tests/art/test_art/image/wxruby.png +0 -0
- data/tests/art/test_art/sample2.xpm +251 -0
- data/tests/lib/wxapp_runner.rb +64 -0
- data/tests/test_art.rb +91 -0
- data/tests/test_basic.rb +0 -5
- data/tests/test_clipboard.rb +149 -17
- data/tests/test_dc.rb +70 -0
- data/tests/test_dialog.rb +2 -13
- data/tests/test_event_handling.rb +2 -13
- data/tests/test_events.rb +14 -6
- data/tests/test_geometry.rb +67 -17
- data/tests/test_intl.rb +2 -15
- data/tests/test_item_data.rb +2 -15
- data/tests/test_variant.rb +1 -15
- data/tests/testapp.rb +0 -5
- data/tests/testapp_noframe.rb +0 -5
- metadata +56 -5
|
@@ -135,6 +135,95 @@ module WXRuby3
|
|
|
135
135
|
}
|
|
136
136
|
__CODE
|
|
137
137
|
end
|
|
138
|
+
spec.new_object 'wxGraphicsContext::Create',
|
|
139
|
+
'wxGraphicsContext::CreateFromUnknownDC'
|
|
140
|
+
# add convenience method providing efficient gc memory management
|
|
141
|
+
spec.add_extend_code 'wxGraphicsContext', <<~__HEREDOC
|
|
142
|
+
static VALUE draw_on(wxWindow* win)
|
|
143
|
+
{
|
|
144
|
+
VALUE rc = Qnil;
|
|
145
|
+
if (rb_block_given_p())
|
|
146
|
+
{
|
|
147
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create(win);
|
|
148
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
149
|
+
rc = rb_yield(rb_gc);
|
|
150
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
151
|
+
DATA_PTR(rb_gc) = NULL;
|
|
152
|
+
delete p_gc;
|
|
153
|
+
}
|
|
154
|
+
return rc;
|
|
155
|
+
}
|
|
156
|
+
static VALUE draw_on(const wxWindowDC& dc)
|
|
157
|
+
{
|
|
158
|
+
VALUE rc = Qnil;
|
|
159
|
+
if (rb_block_given_p())
|
|
160
|
+
{
|
|
161
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create(dc);
|
|
162
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
163
|
+
rc = rb_yield(rb_gc);
|
|
164
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
165
|
+
DATA_PTR(rb_gc) = NULL;
|
|
166
|
+
delete p_gc;
|
|
167
|
+
}
|
|
168
|
+
return rc;
|
|
169
|
+
}
|
|
170
|
+
static VALUE draw_on(const wxMemoryDC& dc)
|
|
171
|
+
{
|
|
172
|
+
VALUE rc = Qnil;
|
|
173
|
+
if (rb_block_given_p())
|
|
174
|
+
{
|
|
175
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create(dc);
|
|
176
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
177
|
+
rc = rb_yield(rb_gc);
|
|
178
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
179
|
+
DATA_PTR(rb_gc) = NULL;
|
|
180
|
+
delete p_gc;
|
|
181
|
+
}
|
|
182
|
+
return rc;
|
|
183
|
+
}
|
|
184
|
+
static VALUE draw_on(const wxPrinterDC& dc)
|
|
185
|
+
{
|
|
186
|
+
VALUE rc = Qnil;
|
|
187
|
+
if (rb_block_given_p())
|
|
188
|
+
{
|
|
189
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create(dc);
|
|
190
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
191
|
+
rc = rb_yield(rb_gc);
|
|
192
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
193
|
+
DATA_PTR(rb_gc) = NULL;
|
|
194
|
+
delete p_gc;
|
|
195
|
+
}
|
|
196
|
+
return rc;
|
|
197
|
+
}
|
|
198
|
+
static VALUE draw_on(wxImage& img)
|
|
199
|
+
{
|
|
200
|
+
VALUE rc = Qnil;
|
|
201
|
+
if (rb_block_given_p())
|
|
202
|
+
{
|
|
203
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create(img);
|
|
204
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
205
|
+
rc = rb_yield(rb_gc);
|
|
206
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
207
|
+
DATA_PTR(rb_gc) = NULL;
|
|
208
|
+
delete p_gc;
|
|
209
|
+
}
|
|
210
|
+
return rc;
|
|
211
|
+
}
|
|
212
|
+
static VALUE draw_on()
|
|
213
|
+
{
|
|
214
|
+
VALUE rc = Qnil;
|
|
215
|
+
if (rb_block_given_p())
|
|
216
|
+
{
|
|
217
|
+
wxGraphicsContext* p_gc = wxGraphicsContext::Create();
|
|
218
|
+
VALUE rb_gc = SWIG_NewPointerObj(SWIG_as_voidptr(p_gc), SWIGTYPE_p_wxGraphicsContext, 1);
|
|
219
|
+
rc = rb_yield(rb_gc);
|
|
220
|
+
SWIG_RubyRemoveTracking((void *)p_gc);
|
|
221
|
+
DATA_PTR(rb_gc) = NULL;
|
|
222
|
+
delete p_gc;
|
|
223
|
+
}
|
|
224
|
+
return rc;
|
|
225
|
+
}
|
|
226
|
+
__HEREDOC
|
|
138
227
|
end
|
|
139
228
|
end # class GraphicsContext
|
|
140
229
|
|
|
@@ -43,8 +43,8 @@ module WXRuby3
|
|
|
43
43
|
{
|
|
44
44
|
rc = rb_ary_new();
|
|
45
45
|
rb_ary_push(rc, wxRuby_WrapWxObjectInRuby(result));
|
|
46
|
-
rb_ary_push(rc, SWIG_NewPointerObj(
|
|
47
|
-
rb_ary_push(rc, SWIG_NewPointerObj(
|
|
46
|
+
rb_ary_push(rc, SWIG_NewPointerObj(new wxSize(size), SWIGTYPE_p_wxSize, 1));
|
|
47
|
+
rb_ary_push(rc, SWIG_NewPointerObj(new wxPoint(pos), SWIGTYPE_p_wxPoint, 1));
|
|
48
48
|
rb_ary_push(rc, newFrameEachTime ? Qtrue : Qfalse);
|
|
49
49
|
}
|
|
50
50
|
return rc;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
###
|
|
2
|
+
# wxRuby3 wxWidgets interface director
|
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
module WXRuby3
|
|
7
|
+
|
|
8
|
+
class Director
|
|
9
|
+
|
|
10
|
+
class HTMLDataObject < Director
|
|
11
|
+
|
|
12
|
+
include Typemap::DataFormat
|
|
13
|
+
include Typemap::DataObjectData
|
|
14
|
+
|
|
15
|
+
def setup
|
|
16
|
+
super
|
|
17
|
+
spec.gc_as_object
|
|
18
|
+
# make sure the build scripts know that DataObjectSimple is part of the DataObject module
|
|
19
|
+
spec.override_inheritance_chain('wxHTMLDataObject', {'wxDataObjectSimple' => 'wxDataObject'}, 'wxDataObject')
|
|
20
|
+
# we only allow Ruby derivatives from wxDataObject but not of any of the C++ implemented
|
|
21
|
+
# specializations
|
|
22
|
+
spec.no_proxy 'wxHTMLDataObject'
|
|
23
|
+
spec.add_swig_code <<~__HEREDOC
|
|
24
|
+
// SWIG gets confused and doesn't realise that various virtual methods
|
|
25
|
+
// from wxDataObject are implemented fully in this subclass, and so,
|
|
26
|
+
// believing it to be abstract doesn't provide an allocator for this
|
|
27
|
+
// class. This undocumented feature overrides this.
|
|
28
|
+
%feature("notabstract") wxHTMLDataObject;
|
|
29
|
+
__HEREDOC
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -43,6 +43,61 @@ module WXRuby3
|
|
|
43
43
|
wxImage::InsertHandler
|
|
44
44
|
wxImage::RemoveHandler
|
|
45
45
|
]
|
|
46
|
+
# add convenience class methods
|
|
47
|
+
spec.add_extend_code 'wxImage', <<~__HEREDOC
|
|
48
|
+
static VALUE handlers()
|
|
49
|
+
{
|
|
50
|
+
VALUE hnd_ary = rb_ary_new();
|
|
51
|
+
wxList& hnd_lst = wxImage::GetHandlers();
|
|
52
|
+
for (wxList::compatibility_iterator node = hnd_lst.GetFirst();
|
|
53
|
+
node; node = node->GetNext())
|
|
54
|
+
{
|
|
55
|
+
wxImageHandler *handler = (wxImageHandler *) node->GetData();
|
|
56
|
+
wxBitmapType bmp_type = handler->GetType();
|
|
57
|
+
rb_ary_push(hnd_ary, wxRuby_GetEnumValueObject("wxBitmapType", (int)bmp_type));
|
|
58
|
+
}
|
|
59
|
+
return hnd_ary;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static VALUE extensions()
|
|
63
|
+
{
|
|
64
|
+
VALUE ext_ary = rb_ary_new();
|
|
65
|
+
wxList& hnd_lst = wxImage::GetHandlers();
|
|
66
|
+
for (wxList::compatibility_iterator node = hnd_lst.GetFirst();
|
|
67
|
+
node; node = node->GetNext())
|
|
68
|
+
{
|
|
69
|
+
wxImageHandler *handler = (wxImageHandler *) node->GetData();
|
|
70
|
+
rb_ary_push(ext_ary, WXSTR_TO_RSTR(handler->GetExtension()));
|
|
71
|
+
const wxArrayString& alt_ext = handler->GetAltExtensions();
|
|
72
|
+
for (wxArrayString::const_iterator it = alt_ext.begin(); it!=alt_ext.end() ;++it)
|
|
73
|
+
{
|
|
74
|
+
rb_ary_push(ext_ary, WXSTR_TO_RSTR((*it)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return ext_ary;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static VALUE handler_extensions()
|
|
81
|
+
{
|
|
82
|
+
VALUE ext_hash = rb_hash_new();
|
|
83
|
+
wxList& hnd_lst = wxImage::GetHandlers();
|
|
84
|
+
for (wxList::compatibility_iterator node = hnd_lst.GetFirst();
|
|
85
|
+
node; node = node->GetNext())
|
|
86
|
+
{
|
|
87
|
+
wxImageHandler *handler = (wxImageHandler *) node->GetData();
|
|
88
|
+
VALUE ext_ary = rb_ary_new();
|
|
89
|
+
rb_ary_push(ext_ary, WXSTR_TO_RSTR(handler->GetExtension()));
|
|
90
|
+
const wxArrayString& alt_ext = handler->GetAltExtensions();
|
|
91
|
+
for (wxArrayString::const_iterator it = alt_ext.begin(); it!=alt_ext.end() ;++it)
|
|
92
|
+
{
|
|
93
|
+
rb_ary_push(ext_ary, WXSTR_TO_RSTR((*it)));
|
|
94
|
+
}
|
|
95
|
+
wxBitmapType bmp_type = handler->GetType();
|
|
96
|
+
rb_hash_aset(ext_hash, wxRuby_GetEnumValueObject("wxBitmapType", (int)bmp_type), ext_ary);
|
|
97
|
+
}
|
|
98
|
+
return ext_hash;
|
|
99
|
+
}
|
|
100
|
+
__HEREDOC
|
|
46
101
|
# The GetRgbData and GetAlphaData methods require special handling using %extend;
|
|
47
102
|
spec.ignore %w[wxImage::GetData wxImage::GetAlpha]
|
|
48
103
|
# The SetRgbData and SetAlphaData are dealt with by typemaps (see below).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
###
|
|
2
|
+
# wxRuby3 wxWidgets interface director
|
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
module WXRuby3
|
|
7
|
+
|
|
8
|
+
class Director
|
|
9
|
+
|
|
10
|
+
class RegionIterator < Director
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
super
|
|
14
|
+
spec.gc_never
|
|
15
|
+
spec.disable_proxies
|
|
16
|
+
spec.make_abstract 'wxRegionIterator'
|
|
17
|
+
# not useful in wxRuby
|
|
18
|
+
spec.ignore 'wxRegionIterator::Reset(const wxRegion &)',
|
|
19
|
+
'wxRegionIterator::operator bool'
|
|
20
|
+
# add iteration control methods
|
|
21
|
+
spec.add_extend_code 'wxRegionIterator', <<~__HEREDOC
|
|
22
|
+
void next_rect()
|
|
23
|
+
{
|
|
24
|
+
$self->operator ++();
|
|
25
|
+
}
|
|
26
|
+
__HEREDOC
|
|
27
|
+
# add custom factory method
|
|
28
|
+
spec.add_extend_code 'wxRegionIterator', <<~__HEREDOC
|
|
29
|
+
static void for_region(const wxRegion& region)
|
|
30
|
+
{
|
|
31
|
+
wxRegionIterator region_it(region);
|
|
32
|
+
if (rb_block_given_p())
|
|
33
|
+
{
|
|
34
|
+
wxRegionIterator *p_region_it = ®ion_it;
|
|
35
|
+
VALUE rb_region_it = SWIG_NewPointerObj(SWIG_as_voidptr(p_region_it), SWIGTYPE_p_wxRegionIterator, 0);
|
|
36
|
+
rb_yield(rb_region_it);
|
|
37
|
+
SWIG_RubyRemoveTracking((void *)p_region_it);
|
|
38
|
+
DATA_PTR(rb_region_it) = NULL;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
__HEREDOC
|
|
42
|
+
spec.do_not_generate :functions, :variables, :defines, :enums
|
|
43
|
+
end
|
|
44
|
+
end # class RegionIterator
|
|
45
|
+
|
|
46
|
+
end # class Director
|
|
47
|
+
|
|
48
|
+
end # module WXRuby3
|
|
@@ -22,7 +22,7 @@ module WXRuby3
|
|
|
22
22
|
wxRichTextBuffer
|
|
23
23
|
]
|
|
24
24
|
spec.gc_as_object 'wxRichTextAttr'
|
|
25
|
-
spec.
|
|
25
|
+
spec.gc_as_object 'wxRichTextBuffer'
|
|
26
26
|
spec.override_inheritance_chain('wxRichTextBuffer', %w[wxObject])
|
|
27
27
|
spec.ignore %w[
|
|
28
28
|
wxRichTextBuffer::GetBatchedCommand
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
###
|
|
2
|
+
# wxRuby3 wxWidgets interface director
|
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
module WXRuby3
|
|
7
|
+
|
|
8
|
+
class Director
|
|
9
|
+
|
|
10
|
+
class RichTextBufferDataObject < Director
|
|
11
|
+
|
|
12
|
+
include Typemap::DataFormat
|
|
13
|
+
include Typemap::DataObjectData
|
|
14
|
+
|
|
15
|
+
def setup
|
|
16
|
+
super
|
|
17
|
+
spec.gc_as_object
|
|
18
|
+
# make sure the build scripts know that DataObjectSimple is part of the DataObject module
|
|
19
|
+
spec.override_inheritance_chain('wxRichTextBufferDataObject', {'wxDataObjectSimple' => 'wxDataObject'}, 'wxDataObject')
|
|
20
|
+
# we only allow Ruby derivatives from wxDataObject but not of any of the C++ implemented
|
|
21
|
+
# specializations
|
|
22
|
+
spec.no_proxy 'wxRichTextBufferDataObject'
|
|
23
|
+
spec.add_swig_code <<~__HEREDOC
|
|
24
|
+
// SWIG gets confused and doesn't realise that various virtual methods
|
|
25
|
+
// from wxDataObject are implemented fully in this subclass, and so,
|
|
26
|
+
// believing it to be abstract doesn't provide an allocator for this
|
|
27
|
+
// class. This undocumented feature overrides this.
|
|
28
|
+
%feature("notabstract") wxRichTextBufferDataObject;
|
|
29
|
+
__HEREDOC
|
|
30
|
+
|
|
31
|
+
# ignore overrrides (will be available through base class)
|
|
32
|
+
spec.ignore 'wxRichTextBufferDataObject::GetPreferredFormat'
|
|
33
|
+
spec.ignore 'wxRichTextBufferDataObject::GetDataSize'
|
|
34
|
+
spec.ignore 'wxRichTextBufferDataObject::GetDataHere'
|
|
35
|
+
spec.ignore 'wxRichTextBufferDataObject::SetData'
|
|
36
|
+
|
|
37
|
+
spec.new_object 'wxRichTextBufferDataObject::GetRichTextBuffer'
|
|
38
|
+
spec.do_not_generate :variables, :defines, :functions, :enums
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
###
|
|
2
|
+
# wxRuby3 wxWidgets interface director
|
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
require_relative './window'
|
|
7
|
+
|
|
8
|
+
module WXRuby3
|
|
9
|
+
|
|
10
|
+
class Director
|
|
11
|
+
|
|
12
|
+
class ScrollBar < Window
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def process(gendoc: false)
|
|
19
|
+
defmod = super
|
|
20
|
+
# fix documentation errors for scroll events
|
|
21
|
+
def_item = defmod.find_item('wxScrollBar')
|
|
22
|
+
if def_item
|
|
23
|
+
def_item.event_types.each do |evt_spec|
|
|
24
|
+
case evt_spec.first
|
|
25
|
+
when 'EVT_COMMAND_SCROLL_THUMBRELEASE', 'EVT_COMMAND_SCROLL_CHANGED'
|
|
26
|
+
if evt_spec[2] == 0
|
|
27
|
+
evt_spec[2] = 1 # incorrectly documented without 'id' argument
|
|
28
|
+
evt_spec[4] = true # ignore extracted docs
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
defmod
|
|
34
|
+
end
|
|
35
|
+
end # class ScrollBar
|
|
36
|
+
|
|
37
|
+
end # class Director
|
|
38
|
+
|
|
39
|
+
end # module WXRuby3
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
###
|
|
2
|
+
# wxRuby3 wxWidgets interface director
|
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
|
4
|
+
###
|
|
5
|
+
|
|
6
|
+
require_relative './window'
|
|
7
|
+
|
|
8
|
+
module WXRuby3
|
|
9
|
+
|
|
10
|
+
class Director
|
|
11
|
+
|
|
12
|
+
class Slider < Window
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def process(gendoc: false)
|
|
19
|
+
defmod = super
|
|
20
|
+
# fix documentation errors for scroll events
|
|
21
|
+
def_item = defmod.find_item('wxSlider')
|
|
22
|
+
if def_item
|
|
23
|
+
def_item.event_types.each do |evt_spec|
|
|
24
|
+
case evt_spec.first
|
|
25
|
+
when 'EVT_COMMAND_SCROLL_THUMBRELEASE', 'EVT_COMMAND_SCROLL_CHANGED'
|
|
26
|
+
if evt_spec[2] == 0
|
|
27
|
+
evt_spec[2] = 1 # incorrectly documented without 'id' argument
|
|
28
|
+
evt_spec[4] = true # ignore extracted docs
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
defmod
|
|
34
|
+
end
|
|
35
|
+
end # class Slider
|
|
36
|
+
|
|
37
|
+
end # class Director
|
|
38
|
+
|
|
39
|
+
end # module WXRuby3
|
|
@@ -156,7 +156,29 @@ module WXRuby3
|
|
|
156
156
|
extern VALUE wxRuby_GetWindowClass() {
|
|
157
157
|
return SwigClassWxWindow.klass;
|
|
158
158
|
}
|
|
159
|
+
// we need this static method here because we do not want SWIG to parse the preprocessor
|
|
160
|
+
// statements (#if/#else/#endif) which it does in %extend blocks
|
|
161
|
+
static VALUE do_paint_buffered(wxWindow* ptr)
|
|
162
|
+
{
|
|
163
|
+
VALUE rc = Qnil;
|
|
164
|
+
wxAutoBufferedPaintDC dc(ptr);
|
|
165
|
+
#if wxALWAYS_NATIVE_DOUBLE_BUFFER
|
|
166
|
+
wxPaintDC* ptr_dc = &dc;
|
|
167
|
+
VALUE r_class = rb_const_get(mWxCore, rb_intern("PaintDC"));
|
|
168
|
+
#else
|
|
169
|
+
wxMemoryDC* ptr_dc = &dc;
|
|
170
|
+
VALUE r_class = rb_const_get(mWxCore, rb_intern("MemoryDC"));
|
|
171
|
+
#endif
|
|
172
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
|
|
173
|
+
VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ptr_dc), swig_type, 0);
|
|
174
|
+
rc = rb_yield(rb_dc);
|
|
175
|
+
SWIG_RubyRemoveTracking((void *)ptr_dc);
|
|
176
|
+
DATA_PTR(rb_dc) = NULL;
|
|
177
|
+
|
|
178
|
+
return rc;
|
|
179
|
+
}
|
|
159
180
|
__HEREDOC
|
|
181
|
+
spec.add_header_code 'static VALUE do_paint_buffered(wxWindow* ptr);'
|
|
160
182
|
spec.add_extend_code 'wxWindow', <<~__HEREDOC
|
|
161
183
|
// passes a DC for drawing on Window into a passed ruby block, and
|
|
162
184
|
// ensure that the DC is correctly deleted when drawing is
|
|
@@ -167,9 +189,9 @@ module WXRuby3
|
|
|
167
189
|
{
|
|
168
190
|
static WxRuby_ID painting_id("@__painting__");
|
|
169
191
|
|
|
170
|
-
if (
|
|
171
|
-
rb_raise(rb_eArgError, "No block given for Window#paint");
|
|
192
|
+
if (!rb_block_given_p()) rb_raise(rb_eArgError, "No block given for Window#paint");
|
|
172
193
|
|
|
194
|
+
VALUE rc = Qnil;
|
|
173
195
|
wxWindow *ptr = self;
|
|
174
196
|
VALUE rb_win = SWIG_RubyInstanceFor(ptr);
|
|
175
197
|
// see if within an evt_paint block - see classes/window.rb
|
|
@@ -178,7 +200,7 @@ module WXRuby3
|
|
|
178
200
|
{
|
|
179
201
|
wxPaintDC dc(ptr);
|
|
180
202
|
VALUE dcVal = SWIG_NewPointerObj((void *) &dc,SWIGTYPE_p_wxPaintDC, 0);
|
|
181
|
-
rb_yield(dcVal);
|
|
203
|
+
rc = rb_yield(dcVal);
|
|
182
204
|
SWIG_RubyRemoveTracking((void *) &dc);
|
|
183
205
|
DATA_PTR(dcVal) = NULL;
|
|
184
206
|
}
|
|
@@ -186,12 +208,21 @@ module WXRuby3
|
|
|
186
208
|
{
|
|
187
209
|
wxClientDC dc(ptr);
|
|
188
210
|
VALUE dcVal = SWIG_NewPointerObj((void *) &dc,SWIGTYPE_p_wxClientDC, 0);
|
|
189
|
-
rb_yield(dcVal);
|
|
211
|
+
rc = rb_yield(dcVal);
|
|
190
212
|
SWIG_RubyRemoveTracking((void *) &dc);
|
|
191
213
|
DATA_PTR(dcVal) = NULL;
|
|
192
214
|
}
|
|
193
215
|
|
|
194
|
-
return
|
|
216
|
+
return rc;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// similar to the paint() method but now for buffered painting
|
|
220
|
+
// we do not check __painting__ here, instead we do that in pure Ruby
|
|
221
|
+
VALUE paint_buffered()
|
|
222
|
+
{
|
|
223
|
+
if (!rb_block_given_p()) rb_raise(rb_eArgError, "No block given for Window#paint_buffered");
|
|
224
|
+
|
|
225
|
+
return do_paint_buffered(self);
|
|
195
226
|
}
|
|
196
227
|
|
|
197
228
|
// Return a window handle as a platform-specific ruby integer
|
|
@@ -28,13 +28,6 @@ module WXRuby3
|
|
|
28
28
|
return ;
|
|
29
29
|
}
|
|
30
30
|
__HEREDOC
|
|
31
|
-
spec.ignore %w[
|
|
32
|
-
wxFindWindowByLabel
|
|
33
|
-
wxFindWindowByName
|
|
34
|
-
wxNewId
|
|
35
|
-
wxUsleep
|
|
36
|
-
]
|
|
37
|
-
spec.ignore 'wxPostDelete' unless Config.instance.wx_version >= '3.3.0'
|
|
38
31
|
spec.do_not_generate(:variables, :enums, :defines, :functions)
|
|
39
32
|
end
|
|
40
33
|
end # class WindowDisabler
|
|
@@ -227,7 +227,7 @@ module WXRuby3
|
|
|
227
227
|
end
|
|
228
228
|
# record event handler (macro) name, event type handled and the number of event id arguments
|
|
229
229
|
evt_arity = args.inject(0) {|c, a| c += 1 if a.start_with?('id'); c }
|
|
230
|
-
@event_types << [evt_handler, evt_type, evt_arity, evt_klass]
|
|
230
|
+
@event_types << [evt_handler, evt_type, evt_arity, evt_klass, false]
|
|
231
231
|
end
|
|
232
232
|
end
|
|
233
233
|
end
|
|
@@ -111,7 +111,7 @@ module WXRuby3
|
|
|
111
111
|
end
|
|
112
112
|
params << { name: pnm, type: arg.type }
|
|
113
113
|
if paramdef.default
|
|
114
|
-
defexp = rb_constant_expression(paramdef.default)
|
|
114
|
+
defexp = rb_constant_expression(paramdef.default, xml_trans.constants_xref_db)
|
|
115
115
|
# in case the default expression dereferences a pointer or passes an address clean it up
|
|
116
116
|
defexp.sub!(/\A\s*[\*\&]/, '')
|
|
117
117
|
# in case the default expression contains anything else but simple numbers or identifiers, wrap in ()
|
data/rakelib/lib/generate/doc.rb
CHANGED
|
@@ -46,12 +46,17 @@ module WXRuby3
|
|
|
46
46
|
tmpfile << script
|
|
47
47
|
tmpfile.close(false)
|
|
48
48
|
result = if Director.trace?
|
|
49
|
-
Config.instance.run(ftmp_name, capture: :out)
|
|
49
|
+
Config.instance.run(ftmp_name, capture: :out, verbose: false)
|
|
50
50
|
else
|
|
51
|
-
Config.instance.run(ftmp_name, capture: :no_err)
|
|
51
|
+
Config.instance.run(ftmp_name, capture: :no_err, verbose: false)
|
|
52
52
|
end
|
|
53
53
|
STDERR.puts "* got constants collection output:\n#{result}" if Director.trace?
|
|
54
|
-
|
|
54
|
+
begin
|
|
55
|
+
db = JSON.load(result)
|
|
56
|
+
rescue Exception
|
|
57
|
+
File.open('constants_raw.json', "w") { |f| f << result } if Director.verbose?
|
|
58
|
+
::Kernel.raise RuntimeError, "Exception loading constants collection result: #{$!.message.slice(0, 512)}", cause: nil
|
|
59
|
+
end
|
|
55
60
|
File.open('constants.json', "w") { |f| f << JSON.pretty_generate(db) } if Director.verbose?
|
|
56
61
|
return db
|
|
57
62
|
ensure
|
|
@@ -293,6 +298,8 @@ module WXRuby3
|
|
|
293
298
|
["#{DocGenerator.constants_xref_db[constnm]['mod']}::#{constnm}", true]
|
|
294
299
|
elsif DocGenerator.constants_xref_db.has_key?(rb_constant_name(nm_str))
|
|
295
300
|
["Wx::#{rb_constant_name(nm_str)}", true]
|
|
301
|
+
elsif DocGenerator.constants_xref_db.has_key?(rb_constant_name(nm_str, false))
|
|
302
|
+
["Wx::#{rb_constant_name(nm_str, false)}", true]
|
|
296
303
|
elsif !_is_method?(nm_str, ref_scope)
|
|
297
304
|
["Wx::#{constnm}", true]
|
|
298
305
|
else
|
|
@@ -324,6 +331,9 @@ module WXRuby3
|
|
|
324
331
|
elsif DocGenerator.constants_xref_db.has_key?(rb_constant_name(nm_str))
|
|
325
332
|
cnm = rb_constant_name(nm_str)
|
|
326
333
|
constnm = "#{DocGenerator.constants_xref_db[cnm]['mod']}::#{cnm}"
|
|
334
|
+
elsif DocGenerator.constants_xref_db.has_key?(rb_constant_name(nm_str, false))
|
|
335
|
+
cnm = rb_constant_name(nm_str, false)
|
|
336
|
+
constnm = "#{DocGenerator.constants_xref_db[cnm]['mod']}::#{cnm}"
|
|
327
337
|
elsif nm_str.start_with?('wx')
|
|
328
338
|
known = false
|
|
329
339
|
constnm = "Wx::#{constnm}"
|
|
@@ -411,10 +421,12 @@ module WXRuby3
|
|
|
411
421
|
para = node_to_doc(node)
|
|
412
422
|
# loose specific notes paragraphs
|
|
413
423
|
case para
|
|
414
|
-
when /\A
|
|
415
|
-
|
|
424
|
+
when /\A(\<b\>)?wxPerl Note:/, # wxPerl note
|
|
425
|
+
/\A\s*Library:/, # Library note
|
|
426
|
+
/\A\s*Include\s+file:/ # Include file note
|
|
416
427
|
''
|
|
417
428
|
else
|
|
429
|
+
para.sub!(/Include\s+file:\s+\#include\s+\<[^>]+\>\s*\Z/, '')
|
|
418
430
|
if event_section?
|
|
419
431
|
case para
|
|
420
432
|
when /The following event handler macros redirect.*(\{.*})/
|
|
@@ -509,6 +521,14 @@ module WXRuby3
|
|
|
509
521
|
doc
|
|
510
522
|
end
|
|
511
523
|
|
|
524
|
+
def constants_db
|
|
525
|
+
DocGenerator.constants_db
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
def constants_xref_db
|
|
529
|
+
DocGenerator.constants_xref_db
|
|
530
|
+
end
|
|
531
|
+
|
|
512
532
|
end
|
|
513
533
|
|
|
514
534
|
def run
|
|
@@ -611,7 +631,7 @@ module WXRuby3
|
|
|
611
631
|
end
|
|
612
632
|
else
|
|
613
633
|
item.items.each do |e|
|
|
614
|
-
const_name = rb_constant_name(e.name)
|
|
634
|
+
const_name = rb_constant_name(e.name, false)
|
|
615
635
|
if xref_table.has_key?(const_name)
|
|
616
636
|
gen_constant_doc(fdoc, const_name, xref_table[const_name], get_constant_doc(e))
|
|
617
637
|
end
|
|
@@ -29,6 +29,7 @@ module WXRuby3
|
|
|
29
29
|
Director.Spec(pkg, 'wxScreenDC', director: Director::DerivedDC)
|
|
30
30
|
Director.Spec(pkg, 'wxSVGFileDC', director: Director::DerivedDC, requirements: %w[wxUSE_SVG])
|
|
31
31
|
Director.Spec(pkg, 'wxGCDC', director: Director::DerivedDC, requirements: %w[wxUSE_GRAPHICS_CONTEXT])
|
|
32
|
+
Director.Spec(pkg, 'wxScaledDC', director: Director::DerivedDC)
|
|
32
33
|
Director.Spec(pkg, 'wxWindow')
|
|
33
34
|
Director.Spec(pkg, 'wxNonOwnedWindow', director: Director::Window)
|
|
34
35
|
Director.Spec(pkg, 'wxPopupWindow')
|
|
@@ -42,6 +43,7 @@ module WXRuby3
|
|
|
42
43
|
Director.Spec(pkg, 'wxPen')
|
|
43
44
|
Director.Spec(pkg, 'wxPalette')
|
|
44
45
|
Director.Spec(pkg, 'wxRegion')
|
|
46
|
+
Director.Spec(pkg, 'wxRegionIterator')
|
|
45
47
|
Director.Spec(pkg, 'wxIconLocation')
|
|
46
48
|
Director.Spec(pkg, 'wxBitmap')
|
|
47
49
|
Director.Spec(pkg, 'wxIcon')
|
|
@@ -83,7 +85,8 @@ module WXRuby3
|
|
|
83
85
|
Director.Spec(pkg, 'wxCollapsiblePaneEvent', requirements: %w[wxUSE_COLLPANE])
|
|
84
86
|
Director.Spec(pkg, 'wxStaticLine', director: Director::Window)
|
|
85
87
|
Director.Spec(pkg, 'wxGauge', director: Director::Window)
|
|
86
|
-
Director.Spec(pkg, 'wxSlider'
|
|
88
|
+
Director.Spec(pkg, 'wxSlider')
|
|
89
|
+
Director.Spec(pkg, 'wxScrollBar')
|
|
87
90
|
Director.Spec(pkg, 'wxStaticText', director: Director::Window)
|
|
88
91
|
Director.Spec(pkg, 'wxSpinButton', director: Director::Window, requirements: %w[wxUSE_SPINBTN])
|
|
89
92
|
Director.Spec(pkg, 'wxSpinEvent', director: Director::Event, requirements: Director.AnyOf(*%w[wxUSE_SPINBTN wxUSE_SPINCTRL]))
|
|
@@ -171,6 +174,7 @@ module WXRuby3
|
|
|
171
174
|
Director.Spec(pkg, 'wxCheckListBox', requirements: %w[wxUSE_CHECKLISTBOX])
|
|
172
175
|
Director.Spec(pkg, 'wxDataFormat', requirements: %w[wxUSE_CLIPBOARD])
|
|
173
176
|
Director.Spec(pkg, 'wxDataObject', requirements: %w[wxUSE_CLIPBOARD])
|
|
177
|
+
Director.Spec(pkg, 'wxDataObjectSimpleBase', requirements: %w[wxUSE_CLIPBOARD])
|
|
174
178
|
Director.Spec(pkg, 'wxClipboard', requirements: %w[wxUSE_CLIPBOARD])
|
|
175
179
|
Director.Spec(pkg, 'wxDragDrop', requirements: %w[wxUSE_DRAG_AND_DROP])
|
|
176
180
|
Director.Spec(pkg, 'wxContextHelpButton', director: Director::Button, requirements: %w[wxUSE_HELP])
|
|
@@ -218,6 +222,8 @@ module WXRuby3
|
|
|
218
222
|
Director.Spec(pkg, 'wxRichTextHeaderFooterData', requirements: %w[wxUSE_PRINTING_ARCHITECTURE])
|
|
219
223
|
Director.Spec(pkg, 'wxRichTextPrinting', requirements: %w[wxUSE_PRINTING_ARCHITECTURE])
|
|
220
224
|
Director.Spec(pkg, 'wxSymbolPickerDialog', director: Director::Dialog)
|
|
225
|
+
# need to look into special needs
|
|
226
|
+
# Director.Spec(pkg, 'wxRichTextBufferDataObject')
|
|
221
227
|
}
|
|
222
228
|
|
|
223
229
|
Director.Package('Wx::STC', 'wxUSE_STC') { |pkg|
|
|
@@ -268,6 +274,7 @@ module WXRuby3
|
|
|
268
274
|
Director.Spec(pkg, 'wxHtmlEasyPrinting', requirements: %w[wxUSE_PRINTING_ARCHITECTURE])
|
|
269
275
|
Director.Spec(pkg, 'wxHtmlPrintout', requirements: %w[wxUSE_PRINTING_ARCHITECTURE])
|
|
270
276
|
Director.Spec(pkg, 'wxHtmlListBox')
|
|
277
|
+
Director.Spec(pkg, 'wxHTMLDataObject') if Config.instance.wx_version >= '3.3'
|
|
271
278
|
}
|
|
272
279
|
|
|
273
280
|
Director.Package('Wx::AUI', 'wxUSE_AUI') { |pkg|
|
|
@@ -588,7 +588,7 @@ module WXRuby3
|
|
|
588
588
|
end
|
|
589
589
|
|
|
590
590
|
# special case bc SWIG causes trouble in Window.cpp
|
|
591
|
-
map 'const wxRegion&', 'const wxRegion*' do
|
|
591
|
+
map 'const wxRegion&', 'const wxRegion*', as: 'Wx::Region' do
|
|
592
592
|
map_out code: '$result = wxRuby_WrapWxObjectInRuby(new wxRegion(*static_cast<const wxRegion*> ($1)));'
|
|
593
593
|
end
|
|
594
594
|
|
|
@@ -47,7 +47,7 @@ module WXRuby3
|
|
|
47
47
|
map_argout as: {type: 'String', index: 1}, code: <<~__CODE
|
|
48
48
|
if (result)
|
|
49
49
|
{
|
|
50
|
-
$result =
|
|
50
|
+
$result = rb_utf8_str_new( (const char*)data_buf$argnum.get(), data_size$argnum);
|
|
51
51
|
}
|
|
52
52
|
else
|
|
53
53
|
$result = Qnil;
|
|
@@ -83,11 +83,20 @@ module WXRuby3
|
|
|
83
83
|
map 'size_t len, const void* buf' do
|
|
84
84
|
|
|
85
85
|
map_in from: {type: 'String', index: 1}, code: <<~__CODE
|
|
86
|
-
$
|
|
87
|
-
|
|
86
|
+
if (RTEST($input) && TYPE($input) == T_STRING)
|
|
87
|
+
{
|
|
88
|
+
$1 = RSTRING_LEN($input);
|
|
89
|
+
$2 = (void*)StringValuePtr($input);
|
|
90
|
+
}
|
|
91
|
+
else
|
|
92
|
+
{
|
|
93
|
+
$1 = 0; $2 = NULL;
|
|
94
|
+
}
|
|
88
95
|
__CODE
|
|
89
96
|
|
|
90
|
-
map_directorin code: '$input =
|
|
97
|
+
map_directorin code: '$input = rb_utf8_str_new( (const char *)buf, len );'
|
|
98
|
+
|
|
99
|
+
map_typecheck precedence: 'pointer', code: '$1 = (TYPE($input) == T_STRING);'
|
|
91
100
|
end
|
|
92
101
|
|
|
93
102
|
end # define
|