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
data/lib/wx/core/bitmap.rb
CHANGED
|
@@ -1,66 +1,103 @@
|
|
|
1
1
|
# A platform-dependent image that can be drawn on the screen
|
|
2
|
-
|
|
3
|
-
# Allow wxRuby to guess the type of an image file from its extension.
|
|
4
|
-
BITMAP_TYPE_GUESS = {
|
|
5
|
-
'bmp' => Wx::BitmapType::BITMAP_TYPE_BMP,
|
|
6
|
-
'gif' => Wx::BitmapType::BITMAP_TYPE_GIF,
|
|
7
|
-
'ico' => Wx::BitmapType::BITMAP_TYPE_ICO,
|
|
8
|
-
'jpeg' => Wx::BitmapType::BITMAP_TYPE_JPEG,
|
|
9
|
-
'jpg' => Wx::BitmapType::BITMAP_TYPE_JPEG,
|
|
10
|
-
'pbm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
11
|
-
'pcx' => Wx::BitmapType::BITMAP_TYPE_PCX,
|
|
12
|
-
'pgm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
13
|
-
'png' => Wx::BitmapType::BITMAP_TYPE_PNG,
|
|
14
|
-
'pnm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
15
|
-
'ppm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
16
|
-
'tga' => Wx::BitmapType::BITMAP_TYPE_TGA,
|
|
17
|
-
'tif' => Wx::BitmapType::BITMAP_TYPE_TIF,
|
|
18
|
-
'tiff' => Wx::BitmapType::BITMAP_TYPE_TIF,
|
|
19
|
-
'xbm' => Wx::BitmapType::BITMAP_TYPE_XBM,
|
|
20
|
-
'xpm' => Wx::BitmapType::BITMAP_TYPE_XPM
|
|
21
|
-
}
|
|
2
|
+
module Wx
|
|
22
3
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
4
|
+
if Wx::PLATFORM == 'WXMSW'
|
|
5
|
+
ICON_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_ICO
|
|
6
|
+
elsif Wx::PLATFORM == 'WXGTK'
|
|
7
|
+
ICON_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_XPM
|
|
8
|
+
elsif Wx::PLATFORM == 'WXOSX'
|
|
9
|
+
ICON_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_ICO
|
|
10
|
+
else
|
|
11
|
+
ICON_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_XPM
|
|
26
12
|
end
|
|
27
13
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
14
|
+
if Wx::PLATFORM == 'WXMSW'
|
|
15
|
+
BITMAP_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_BMP
|
|
16
|
+
elsif Wx::PLATFORM == 'WXGTK'
|
|
17
|
+
BITMAP_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_XPM
|
|
18
|
+
elsif Wx::PLATFORM == 'WXOSX'
|
|
19
|
+
BITMAP_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_PICT
|
|
20
|
+
else
|
|
21
|
+
BITMAP_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_XPM
|
|
33
22
|
end
|
|
34
23
|
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
if Wx::PLATFORM == 'WXMSW'
|
|
25
|
+
CURSOR_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_CUR
|
|
26
|
+
else
|
|
27
|
+
CURSOR_DEFAULT_TYPE = BitmapType::BITMAP_TYPE_INVALID # not supported
|
|
28
|
+
end
|
|
37
29
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
30
|
+
class Bitmap
|
|
31
|
+
# Allow wxRuby to guess the type of an image file from its extension.
|
|
32
|
+
BITMAP_TYPE_GUESS = {
|
|
33
|
+
'bmp' => Wx::BitmapType::BITMAP_TYPE_BMP,
|
|
34
|
+
'gif' => Wx::BitmapType::BITMAP_TYPE_GIF,
|
|
35
|
+
'ico' => Wx::BitmapType::BITMAP_TYPE_ICO,
|
|
36
|
+
'jpeg' => Wx::BitmapType::BITMAP_TYPE_JPEG,
|
|
37
|
+
'jpg' => Wx::BitmapType::BITMAP_TYPE_JPEG,
|
|
38
|
+
'pbm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
39
|
+
'pcx' => Wx::BitmapType::BITMAP_TYPE_PCX,
|
|
40
|
+
'pgm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
41
|
+
'png' => Wx::BitmapType::BITMAP_TYPE_PNG,
|
|
42
|
+
'pnm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
43
|
+
'ppm' => Wx::BitmapType::BITMAP_TYPE_PNM,
|
|
44
|
+
'tga' => Wx::BitmapType::BITMAP_TYPE_TGA,
|
|
45
|
+
'tif' => Wx::BitmapType::BITMAP_TYPE_TIF,
|
|
46
|
+
'tiff' => Wx::BitmapType::BITMAP_TYPE_TIF,
|
|
47
|
+
'xbm' => Wx::BitmapType::BITMAP_TYPE_XBM,
|
|
48
|
+
'xpm' => Wx::BitmapType::BITMAP_TYPE_XPM
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# Constructor copying data from an image
|
|
52
|
+
def self.from_image(img, depth = -1)
|
|
53
|
+
new(img, depth)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Create a new bitmap from an icon
|
|
57
|
+
def self.from_icon(icon)
|
|
58
|
+
bmp = self.new
|
|
59
|
+
bmp.copy_from_icon(icon)
|
|
60
|
+
bmp
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Ruby methods that switch class are conventionally named to_foo
|
|
64
|
+
alias :to_image :convert_to_image
|
|
65
|
+
|
|
66
|
+
# Redefine the initialize method so it raises an exception if a
|
|
67
|
+
# non-existent file is given to the constructor; otherwise, wx Widgets
|
|
68
|
+
# just carries on with an empty bitmap, which may cause faults
|
|
69
|
+
# later. Also, be helpful and try to guess the bitmap type from the
|
|
70
|
+
# filename if it's not specified
|
|
71
|
+
wx_init = self.instance_method(:initialize)
|
|
72
|
+
define_method(:initialize) do | *args |
|
|
73
|
+
# If creating from a file, check it exists
|
|
74
|
+
if args[0].kind_of? String
|
|
75
|
+
if not File.exist?( File.expand_path(args[0]) )
|
|
76
|
+
Kernel.raise(ArgumentError, "Bitmap file does not exist: #{args[0]}")
|
|
77
|
+
end
|
|
78
|
+
# If type not specified, try to guess it from the file extension
|
|
79
|
+
if not args[1] and file_ext = args[0][/\w+$/]
|
|
80
|
+
args[1] = BITMAP_TYPE_GUESS[file_ext.downcase]
|
|
81
|
+
end
|
|
53
82
|
end
|
|
83
|
+
wx_init.bind(self).call(*args)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Accepts a block, which will be passed a device context which can be
|
|
87
|
+
# used to draw upon the Bitmap
|
|
88
|
+
def draw
|
|
89
|
+
dc = Wx::MemoryDC.new
|
|
90
|
+
dc.select_object(self)
|
|
91
|
+
yield dc
|
|
92
|
+
dc.select_object( Wx::NULL_BITMAP )
|
|
54
93
|
end
|
|
55
|
-
wx_init.bind(self).call(*args)
|
|
56
94
|
end
|
|
57
95
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
dc.select_object( Wx::NULL_BITMAP )
|
|
96
|
+
def self.Bitmap(name, bmp_type = nil)
|
|
97
|
+
art_path = File.dirname(caller_path = caller_locations(1).first.absolute_path)
|
|
98
|
+
art_owner = File.basename(caller_path, '.*')
|
|
99
|
+
art_file = ArtLocator.find_art(name, art_type: :bitmap, art_path: art_path, art_section: art_owner, bmp_type: bmp_type)
|
|
100
|
+
::Kernel.raise ArgumentError, "Cannot locate art file for #{name}:Bitmap" unless art_file
|
|
101
|
+
Bitmap.new(art_file, bmp_type)
|
|
65
102
|
end
|
|
66
103
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
module Wx
|
|
3
|
+
|
|
4
|
+
def self.Cursor(name, bmp_type = nil, *rest)
|
|
5
|
+
art_path = File.dirname(caller_path = caller_locations(1).first.absolute_path)
|
|
6
|
+
art_owner = File.basename(caller_path, '.*')
|
|
7
|
+
art_file = ArtLocator.find_art(name, art_type: :icon, art_path: art_path, art_section: art_owner, bmp_type: bmp_type)
|
|
8
|
+
::Kernel.raise ArgumentError, "Cannot locate art file for #{name}:Cursor" unless art_file
|
|
9
|
+
Cursor.new(art_file, bmp_type || Wx::Bitmap::BITMAP_TYPE_GUESS[File.extname(art_file).sub(/\A\./,'')], *rest)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
data/lib/wx/core/data_object.rb
CHANGED
|
@@ -1,10 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
|
|
2
|
+
module Wx
|
|
3
|
+
|
|
4
|
+
# Provide some default implementations of these to make life easier
|
|
5
|
+
class DataObject
|
|
6
|
+
def get_preferred_format(direction)
|
|
7
|
+
get_all_formats(direction).first
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get_format_count(direction)
|
|
11
|
+
get_all_formats(direction).size
|
|
12
|
+
end
|
|
5
13
|
end
|
|
6
14
|
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
class DataObjectSimple
|
|
16
|
+
|
|
17
|
+
# implement the overloads which do not require the format arg
|
|
18
|
+
# using pure Ruby
|
|
19
|
+
|
|
20
|
+
wx_get_data_size = instance_method :get_data_size
|
|
21
|
+
define_method :get_data_size do |format = nil|
|
|
22
|
+
wx_get_data_size.bind(self).call(format || self.get_format)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
wx_get_data_here = instance_method :get_data_here
|
|
26
|
+
define_method :get_data_here do |format = nil|
|
|
27
|
+
wx_get_data_here.bind(self).call(format || self.get_format)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
wx_set_data = instance_method :set_data
|
|
31
|
+
define_method :set_data do |*args|
|
|
32
|
+
if args.size>1
|
|
33
|
+
format, buf = args
|
|
34
|
+
else
|
|
35
|
+
format = nil
|
|
36
|
+
buf = args.first
|
|
37
|
+
end
|
|
38
|
+
wx_set_data.bind(self).call(format || self.get_format, buf)
|
|
39
|
+
end
|
|
40
|
+
|
|
9
41
|
end
|
|
42
|
+
|
|
43
|
+
class DataObjectSimpleBase
|
|
44
|
+
|
|
45
|
+
# implement these in pure Ruby for optimization
|
|
46
|
+
def get_data_size(*)
|
|
47
|
+
self._get_data_size
|
|
48
|
+
end
|
|
49
|
+
def get_data_here(*)
|
|
50
|
+
self._get_data
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def set_data(*args)
|
|
54
|
+
if args.size>1
|
|
55
|
+
_, buf = args
|
|
56
|
+
else
|
|
57
|
+
buf = args.first
|
|
58
|
+
end
|
|
59
|
+
self._set_data(buf)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def _get_data_size
|
|
63
|
+
(_get_data || '').bytesize
|
|
64
|
+
end
|
|
65
|
+
protected :_get_data_size
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class TextDataObject
|
|
70
|
+
|
|
71
|
+
# override this to loose the extra terminating 0 we otherwise get
|
|
72
|
+
def get_data_here(*)
|
|
73
|
+
self.get_text
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
10
78
|
end
|
data/lib/wx/core/dataformat.rb
CHANGED
|
@@ -22,5 +22,7 @@ module Wx
|
|
|
22
22
|
end
|
|
23
23
|
DF_FILENAME = DataFormat.new( Wx::DataFormatId::DF_FILENAME )
|
|
24
24
|
DF_UNICODETEXT = DataFormat.new( Wx::DataFormatId::DF_UNICODETEXT )
|
|
25
|
-
|
|
25
|
+
if Wx.has_feature?(:USE_HTML) && Wx::WXWIDGETS_VERSION >= '3.3'
|
|
26
|
+
DF_HTML = DataFormat.new( Wx::DataFormatId::DF_HTML )
|
|
27
|
+
end
|
|
26
28
|
end
|
data/lib/wx/core/dc.rb
CHANGED
|
@@ -1,68 +1,92 @@
|
|
|
1
|
-
# Class for drawing primitives and bitmaps on various outputs (screen, paper)
|
|
2
|
-
class Wx::DC
|
|
3
|
-
# provide Ruby-style convenience methods supporting wxDCxxxChanger-like functionality
|
|
4
1
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
module Wx
|
|
3
|
+
# Class for drawing primitives and bitmaps on various outputs (screen, paper)
|
|
4
|
+
class DC
|
|
5
|
+
# provide Ruby-style convenience methods supporting wxDCxxxChanger-like functionality
|
|
6
|
+
|
|
7
|
+
def with_brush(brush)
|
|
8
|
+
begin
|
|
9
|
+
old_brush = self.brush
|
|
10
|
+
self.brush = brush
|
|
11
|
+
yield(self) if block_given?
|
|
12
|
+
ensure
|
|
13
|
+
self.brush = old_brush
|
|
14
|
+
end
|
|
12
15
|
end
|
|
13
|
-
end
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
def with_pen(pen)
|
|
18
|
+
begin
|
|
19
|
+
old_pen = self.pen
|
|
20
|
+
self.pen = pen
|
|
21
|
+
yield(self) if block_given?
|
|
22
|
+
ensure
|
|
23
|
+
self.pen = old_pen
|
|
24
|
+
end
|
|
22
25
|
end
|
|
23
|
-
end
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
def with_font(font)
|
|
28
|
+
begin
|
|
29
|
+
old_font = self.font
|
|
30
|
+
self.font = font
|
|
31
|
+
yield(self) if block_given?
|
|
32
|
+
ensure
|
|
33
|
+
self.font = old_font
|
|
34
|
+
end
|
|
32
35
|
end
|
|
33
|
-
end
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
def with_text_foreground(clr)
|
|
38
|
+
begin
|
|
39
|
+
old = self.get_text_foreground
|
|
40
|
+
self.text_foreground = clr
|
|
41
|
+
yield(self) if block_given?
|
|
42
|
+
ensure
|
|
43
|
+
self.text_foreground = old
|
|
44
|
+
end
|
|
42
45
|
end
|
|
43
|
-
|
|
44
|
-
alias :with_text_fg :with_text_foreground
|
|
46
|
+
alias :with_text_fg :with_text_foreground
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
def with_text_background(clr)
|
|
49
|
+
begin
|
|
50
|
+
old = self.get_text_background
|
|
51
|
+
self.text_background = clr
|
|
52
|
+
yield(self) if block_given?
|
|
53
|
+
ensure
|
|
54
|
+
self.text_background = old
|
|
55
|
+
end
|
|
53
56
|
end
|
|
57
|
+
alias :with_text_bg :with_text_background
|
|
58
|
+
|
|
59
|
+
def with_background_mode(mode)
|
|
60
|
+
begin
|
|
61
|
+
old = self.get_background_mode
|
|
62
|
+
self.background_mode = mode
|
|
63
|
+
yield(self) if block_given?
|
|
64
|
+
ensure
|
|
65
|
+
self.background_mode = old
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
alias :with_bg_mode :with_background_mode
|
|
69
|
+
|
|
54
70
|
end
|
|
55
|
-
alias :with_text_bg :with_text_background
|
|
56
71
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
72
|
+
class MemoryDC
|
|
73
|
+
|
|
74
|
+
# convenience method for drawing on a temporary memory DC
|
|
75
|
+
def self.draw_on(arg)
|
|
76
|
+
dc = case arg
|
|
77
|
+
when Wx::Bitmap, Wx::DC
|
|
78
|
+
self.new(arg)
|
|
79
|
+
else
|
|
80
|
+
::Kernel.raise ArgumentError, 'Expected Wx::Bitmap or Wx::DC'
|
|
81
|
+
end
|
|
82
|
+
begin
|
|
83
|
+
yield(dc) if block_given?
|
|
84
|
+
ensure
|
|
85
|
+
dc.select_object(Wx::NULL_BITMAP)
|
|
86
|
+
end
|
|
87
|
+
nil
|
|
64
88
|
end
|
|
89
|
+
|
|
65
90
|
end
|
|
66
|
-
alias :with_bg_mode :with_background_mode
|
|
67
91
|
|
|
68
92
|
end
|
data/lib/wx/core/enum.rb
CHANGED
data/lib/wx/core/event.rb
CHANGED
|
@@ -1,10 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
# Get the Wx id, not Ruby's deprecated Object#id
|
|
4
|
-
alias :id :get_id
|
|
5
|
-
end
|
|
1
|
+
|
|
2
|
+
require_relative './evthandler'
|
|
6
3
|
|
|
7
4
|
module Wx
|
|
5
|
+
|
|
6
|
+
# Base class for all events
|
|
7
|
+
class Event
|
|
8
|
+
|
|
9
|
+
# overload the #initialize method to add a check on a
|
|
10
|
+
# correct match between EventType and event class
|
|
11
|
+
wx_init = self.instance_method(:initialize)
|
|
12
|
+
define_method :initialize do |evt_type = Wx::EVT_NULL, *rest|
|
|
13
|
+
evt_klass = Wx::EvtHandler.event_class_for_type(evt_type)
|
|
14
|
+
if evt_klass >= self.class
|
|
15
|
+
wx_init.bind(self).call(evt_type, *rest)
|
|
16
|
+
else
|
|
17
|
+
::Kernel.raise ArgumentError, "Invalid event type #{Wx::EvtHandler.event_name_for_type(evt_type)}:#{evt_type} for class #{self.class}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Get the Wx id, not Ruby's deprecated Object#id
|
|
22
|
+
alias :id :get_id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class Wx::CommandEvent
|
|
26
|
+
|
|
27
|
+
# overload the #initialize method to add a check on a
|
|
28
|
+
# correct match between EventType and event class
|
|
29
|
+
wx_init = self.instance_method(:initialize)
|
|
30
|
+
define_method :initialize do |evt_type = Wx::EVT_NULL, *rest|
|
|
31
|
+
evt_klass = Wx::EvtHandler.event_class_for_type(evt_type)
|
|
32
|
+
if evt_klass >= self.class
|
|
33
|
+
wx_init.bind(self).call(evt_type, *rest)
|
|
34
|
+
else
|
|
35
|
+
::Kernel.raise ArgumentError, "Invalid event type #{Wx::EvtHandler.event_name_for_type(evt_type)}:#{evt_type} for class #{self.class}"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
8
41
|
# reduce mapping warnings for this unpublished event class
|
|
9
42
|
NcPaintEvent = Wx::Event
|
|
10
43
|
|
data/lib/wx/core/evthandler.rb
CHANGED
|
@@ -195,32 +195,73 @@ class Wx::EvtHandler
|
|
|
195
195
|
end
|
|
196
196
|
|
|
197
197
|
# Convenience evt_handler to listen to all mouse events.
|
|
198
|
-
def evt_mouse_events(&block)
|
|
199
|
-
evt_left_down(&block)
|
|
200
|
-
evt_left_up(&block)
|
|
201
|
-
evt_middle_down(&block)
|
|
202
|
-
evt_middle_up(&block)
|
|
203
|
-
evt_right_down(&block)
|
|
204
|
-
evt_right_up(&block)
|
|
205
|
-
evt_motion(&block)
|
|
206
|
-
evt_left_dclick(&block)
|
|
207
|
-
evt_middle_dclick(&block)
|
|
208
|
-
evt_right_dclick(&block)
|
|
209
|
-
evt_leave_window(&block)
|
|
210
|
-
evt_enter_window(&block)
|
|
211
|
-
evt_mousewheel(&block)
|
|
198
|
+
def evt_mouse_events(*args, &block)
|
|
199
|
+
evt_left_down(*args, &block)
|
|
200
|
+
evt_left_up(*args, &block)
|
|
201
|
+
evt_middle_down(*args, &block)
|
|
202
|
+
evt_middle_up(*args, &block)
|
|
203
|
+
evt_right_down(*args, &block)
|
|
204
|
+
evt_right_up(*args, &block)
|
|
205
|
+
evt_motion(*args, &block)
|
|
206
|
+
evt_left_dclick(*args, &block)
|
|
207
|
+
evt_middle_dclick(*args, &block)
|
|
208
|
+
evt_right_dclick(*args, &block)
|
|
209
|
+
evt_leave_window(*args, &block)
|
|
210
|
+
evt_enter_window(*args, &block)
|
|
211
|
+
evt_mousewheel(*args, &block)
|
|
212
212
|
end
|
|
213
213
|
|
|
214
214
|
# Convenience evt handler to listen to all scrollwin events.
|
|
215
|
-
def evt_scrollwin(&block)
|
|
216
|
-
evt_scrollwin_top(&block)
|
|
217
|
-
evt_scrollwin_bottom(&block)
|
|
218
|
-
evt_scrollwin_lineup(&block)
|
|
219
|
-
evt_scrollwin_linedown(&block)
|
|
220
|
-
evt_scrollwin_pageup(&block)
|
|
221
|
-
evt_scrollwin_pagedown(&block)
|
|
222
|
-
evt_scrollwin_thumbtrack(&block)
|
|
223
|
-
evt_scrollwin_thumbrelease(&block)
|
|
215
|
+
def evt_scrollwin(meth = nil, &block)
|
|
216
|
+
evt_scrollwin_top(meth, &block)
|
|
217
|
+
evt_scrollwin_bottom(meth, &block)
|
|
218
|
+
evt_scrollwin_lineup(meth, &block)
|
|
219
|
+
evt_scrollwin_linedown(meth, &block)
|
|
220
|
+
evt_scrollwin_pageup(meth, &block)
|
|
221
|
+
evt_scrollwin_pagedown(meth, &block)
|
|
222
|
+
evt_scrollwin_thumbtrack(meth, &block)
|
|
223
|
+
evt_scrollwin_thumbrelease(meth, &block)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Convenience evt handler to listen to all scroll events (Wx::Slider and Wx::ScrollBar)
|
|
227
|
+
def evt_scroll(meth = nil, &block)
|
|
228
|
+
evt_scroll_top(meth, &block)
|
|
229
|
+
evt_scroll_bottom(meth, &block)
|
|
230
|
+
evt_scroll_lineup(meth, &block)
|
|
231
|
+
evt_scroll_linedown(meth, &block)
|
|
232
|
+
evt_scroll_pageup(meth, &block)
|
|
233
|
+
evt_scroll_pagedown(meth, &block)
|
|
234
|
+
evt_scroll_thumbtrack(meth, &block)
|
|
235
|
+
evt_scroll_thumbrelease(meth, &block)
|
|
236
|
+
evt_scroll_changed(meth, &block)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Convenience evt handler to listen to all scroll command events.
|
|
240
|
+
def evt_command_scroll(id, meth = nil, &block)
|
|
241
|
+
evt_command_scroll_top(id, meth, &block)
|
|
242
|
+
evt_command_scroll_bottom(id, meth, &block)
|
|
243
|
+
evt_command_scroll_lineup(id, meth, &block)
|
|
244
|
+
evt_command_scroll_linedown(id, meth, &block)
|
|
245
|
+
evt_command_scroll_pageup(id, meth, &block)
|
|
246
|
+
evt_command_scroll_pagedown(id, meth, &block)
|
|
247
|
+
evt_command_scroll_thumbtrack(id, meth, &block)
|
|
248
|
+
evt_command_scroll_thumbrelease(id, meth, &block)
|
|
249
|
+
evt_command_scroll_changed(id, meth, &block)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# add missing constants (these are redefinitions of other constants which are not documented themselves)
|
|
253
|
+
%i[EVT_COMMAND_SCROLL_TOP
|
|
254
|
+
EVT_COMMAND_SCROLL_BOTTOM
|
|
255
|
+
EVT_COMMAND_SCROLL_LINEUP
|
|
256
|
+
EVT_COMMAND_SCROLL_LINEDOWN
|
|
257
|
+
EVT_COMMAND_SCROLL_PAGEUP
|
|
258
|
+
EVT_COMMAND_SCROLL_PAGEDOWN
|
|
259
|
+
EVT_COMMAND_SCROLL_THUMBTRACK
|
|
260
|
+
EVT_COMMAND_SCROLL_THUMBRELEASE
|
|
261
|
+
EVT_COMMAND_SCROLL_CHANGED].each do |const|
|
|
262
|
+
unless Wx.const_defined?(const)
|
|
263
|
+
Wx.const_set(const, Wx.const_get(const.to_s.sub('EVT_COMMAND_', 'EVT_').to_sym))
|
|
264
|
+
end
|
|
224
265
|
end
|
|
225
266
|
|
|
226
267
|
if Wx.const_defined?(:EVT_DESTROY)
|
data/lib/wx/core/icon.rb
CHANGED
|
@@ -1,46 +1,61 @@
|
|
|
1
1
|
# Specific type of platform-dependent image used for frames on Windows and
|
|
2
2
|
# Linux. Normally Bitmap is used
|
|
3
|
-
class Wx::Icon
|
|
4
|
-
# Load the type-guessing hash from Wx::Bitmap
|
|
5
|
-
require 'wx/core/bitmap'
|
|
6
|
-
BITMAP_TYPE_GUESS = Wx::Bitmap::BITMAP_TYPE_GUESS
|
|
7
|
-
|
|
8
|
-
# Analogous to Image.from_bitmap
|
|
9
|
-
def self.from_bitmap(bmp)
|
|
10
|
-
ico = new
|
|
11
|
-
ico.copy_from_bitmap(bmp)
|
|
12
|
-
ico
|
|
13
|
-
end
|
|
14
3
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
bm = Wx::Bitmap.new
|
|
19
|
-
bm.copy_from_icon(self)
|
|
20
|
-
bm
|
|
21
|
-
end
|
|
4
|
+
require_relative './art_locator'
|
|
5
|
+
|
|
6
|
+
module Wx
|
|
22
7
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
class Icon
|
|
9
|
+
# Load the type-guessing hash from Wx::Bitmap
|
|
10
|
+
require 'wx/core/bitmap'
|
|
11
|
+
BITMAP_TYPE_GUESS = Wx::Bitmap::BITMAP_TYPE_GUESS
|
|
12
|
+
|
|
13
|
+
# Analogous to Image.from_bitmap
|
|
14
|
+
def self.from_bitmap(bmp)
|
|
15
|
+
ico = new
|
|
16
|
+
ico.copy_from_bitmap(bmp)
|
|
17
|
+
ico
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_bitmap
|
|
21
|
+
# for WXMSW platform Icon is not derived from Bitmap
|
|
22
|
+
return self unless Wx::PLATFORM == 'WXMSW' || Wx::PLATFORM == 'WXOSX'
|
|
23
|
+
bm = Wx::Bitmap.new
|
|
24
|
+
bm.copy_from_icon(self)
|
|
25
|
+
bm
|
|
26
26
|
end
|
|
27
|
-
end
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# later. Also guess icon type from filename, if not specified.
|
|
33
|
-
wx_init = self.instance_method(:initialize)
|
|
34
|
-
define_method(:initialize) do | *args |
|
|
35
|
-
if args[0].kind_of? String
|
|
36
|
-
if not File.exist?( File.expand_path(args[0]) )
|
|
37
|
-
Kernel.raise(ArgumentError, "Icon file does not exist: #{args[0]}")
|
|
28
|
+
if Wx::PLATFORM == 'WXMSW' || Wx::PLATFORM == 'WXOSX'
|
|
29
|
+
def convert_to_image
|
|
30
|
+
to_bitmap.convert_to_image
|
|
38
31
|
end
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Redefine the initialize method so it raises an exception if a
|
|
35
|
+
# non-existent file is given to the constructor; otherwise, wx Widgets
|
|
36
|
+
# just carries on with an empty icon, which may cause faults
|
|
37
|
+
# later. Also guess icon type from filename, if not specified.
|
|
38
|
+
wx_init = self.instance_method(:initialize)
|
|
39
|
+
define_method(:initialize) do | *args |
|
|
40
|
+
if args[0].kind_of? String
|
|
41
|
+
if not File.exist?( File.expand_path(args[0]) )
|
|
42
|
+
Kernel.raise(ArgumentError, "Icon file does not exist: #{args[0]}")
|
|
43
|
+
end
|
|
44
|
+
# If type not specified, try to guess it from the file extension
|
|
45
|
+
if not args[1] and ( file_ext = args[0][/\w+$/] )
|
|
46
|
+
args[1] = BITMAP_TYPE_GUESS[file_ext.downcase]
|
|
47
|
+
end
|
|
42
48
|
end
|
|
49
|
+
wx_init.bind(self).call(*args)
|
|
43
50
|
end
|
|
44
|
-
wx_init.bind(self).call(*args)
|
|
45
51
|
end
|
|
52
|
+
|
|
53
|
+
def self.Icon(name, bmp_type = nil, *rest)
|
|
54
|
+
art_path = File.dirname(caller_path = caller_locations(1).first.absolute_path)
|
|
55
|
+
art_owner = File.basename(caller_path, '.*')
|
|
56
|
+
art_file = ArtLocator.find_art(name, art_type: :icon, art_path: art_path, art_section: art_owner, bmp_type: bmp_type)
|
|
57
|
+
::Kernel.raise ArgumentError, "Cannot locate art file for #{name}:Icon" unless art_file
|
|
58
|
+
Icon.new(art_file, bmp_type, *rest)
|
|
59
|
+
end
|
|
60
|
+
|
|
46
61
|
end
|