wxruby3 0.9.2 → 0.9.4
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 +35 -29
- data/README.md +24 -15
- data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
- data/ext/wxruby3/include/wxruby-Config.h +23 -5
- data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
- data/ext/wxruby3/include/wxruby-Validator.h +39 -0
- data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
- data/ext/wxruby3/swig/custom/director.swg +8 -0
- data/ext/wxruby3/swig/mark_free_impl.i +0 -33
- data/ext/wxruby3/swig/memory_management.i +6 -0
- data/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/book_ctrl_base.rb +16 -0
- data/lib/wx/core/combobox.rb +13 -3
- data/lib/wx/core/config.rb +454 -83
- data/lib/wx/core/controlwithitems.rb +40 -130
- data/lib/wx/core/enum.rb +17 -1
- data/lib/wx/core/event.rb +6 -1
- data/lib/wx/core/evthandler.rb +8 -2
- data/lib/wx/core/generic_validator.rb +312 -0
- data/lib/wx/core/listbox.rb +2 -2
- data/lib/wx/core/log.rb +1 -1
- data/lib/wx/core/notebook.rb +10 -8
- data/lib/wx/core/owner_drawn_combobox.rb +45 -0
- data/lib/wx/core/peristent_object.rb +15 -0
- data/lib/wx/core/persistence_manager.rb +39 -0
- data/lib/wx/core/persistent_window.rb +16 -0
- data/lib/wx/core/size.rb +4 -0
- data/lib/wx/core/sizer.rb +1 -2
- data/lib/wx/core/standard_paths.rb +22 -0
- data/lib/wx/core/text_entry.rb +4 -1
- data/lib/wx/core/top_level_window.rb +16 -0
- data/lib/wx/core/treebook.rb +18 -0
- data/lib/wx/core/validator.rb +70 -5
- data/lib/wx/core/window.rb +3 -7
- data/lib/wx/core.rb +4 -0
- data/lib/wx/doc/art_locator.rb +1 -0
- data/lib/wx/doc/book_ctrl_base.rb +19 -0
- data/lib/wx/doc/comboctrl.rb +18 -0
- data/lib/wx/doc/config.rb +101 -41
- data/lib/wx/doc/controlwithitems.rb +16 -0
- data/lib/wx/doc/date_picker_ctrl.rb +23 -0
- data/lib/wx/doc/editable_listbox.rb +44 -0
- data/lib/wx/doc/enum.rb +15 -0
- data/lib/wx/doc/event.rb +12 -0
- data/lib/wx/doc/extra/12_client_data.md +89 -0
- data/lib/wx/doc/extra/13_validators.md +139 -0
- data/lib/wx/doc/extra/14_config.md +101 -0
- data/lib/wx/doc/extra/15_persistence.md +148 -0
- data/lib/wx/doc/gdi_common.rb +4 -0
- data/lib/wx/doc/generic_validator.rb +95 -0
- data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
- data/lib/wx/doc/num_validator.rb +387 -0
- data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
- data/lib/wx/doc/persistence_manager.rb +36 -0
- data/lib/wx/doc/persistent_object.rb +27 -0
- data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
- data/lib/wx/doc/static_bitmap.rb +25 -0
- data/lib/wx/doc/text_validator.rb +10 -0
- data/lib/wx/doc/top_level_window.rb +19 -0
- data/lib/wx/doc/treebook.rb +6 -1
- data/lib/wx/doc/validator.rb +113 -0
- data/lib/wx/doc/window.rb +30 -0
- data/lib/wx/html/simple_html_listbox.rb +24 -91
- data/lib/wx/keyword_defs.rb +34 -2
- data/lib/wx/rbn/ribbon_gallery.rb +0 -21
- data/lib/wx/version.rb +1 -1
- data/rakelib/build.rb +1 -1
- data/rakelib/lib/config/mingw.rb +12 -0
- data/rakelib/lib/core/include/client_data.inc +65 -0
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/package.rb +39 -3
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec.rb +10 -0
- data/rakelib/lib/core/spec_helper.rb +8 -2
- data/rakelib/lib/director/app.rb +18 -0
- data/rakelib/lib/director/app_traits.rb +3 -1
- data/rakelib/lib/director/bitmap_combobox.rb +2 -2
- data/rakelib/lib/director/combobox.rb +22 -0
- data/rakelib/lib/director/comboctrl.rb +1 -55
- data/rakelib/lib/director/config_base.rb +490 -19
- data/rakelib/lib/director/ctrl_with_items.rb +88 -21
- data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
- data/rakelib/lib/director/editable_listbox.rb +30 -0
- data/rakelib/lib/director/event.rb +102 -12
- data/rakelib/lib/director/event_filter.rb +1 -1
- data/rakelib/lib/director/event_handler.rb +3 -2
- data/rakelib/lib/director/event_loop.rb +1 -1
- data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
- data/rakelib/lib/director/functions.rb +4 -2
- data/rakelib/lib/director/generic_dirctrl.rb +17 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +1 -3
- data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
- data/rakelib/lib/director/header_ctrl.rb +9 -1
- data/rakelib/lib/director/html_listbox.rb +97 -22
- data/rakelib/lib/director/num_validator.rb +495 -0
- data/rakelib/lib/director/numeric_property_validator.rb +131 -6
- data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
- data/rakelib/lib/director/persistence_manager.rb +410 -0
- data/rakelib/lib/director/persistent_object.rb +70 -0
- data/rakelib/lib/director/persistent_window.rb +73 -0
- data/rakelib/lib/director/pgproperty.rb +3 -29
- data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
- data/rakelib/lib/director/ribbon_gallery.rb +3 -5
- data/rakelib/lib/director/sizer.rb +15 -4
- data/rakelib/lib/director/sizer_item.rb +13 -0
- data/rakelib/lib/director/static_bitmap.rb +32 -0
- data/rakelib/lib/director/text_entry.rb +5 -1
- data/rakelib/lib/director/text_validator.rb +124 -13
- data/rakelib/lib/director/toggle_button.rb +1 -0
- data/rakelib/lib/director/top_level_window.rb +0 -2
- data/rakelib/lib/director/tree_ctrl.rb +35 -0
- data/rakelib/lib/director/utils.rb +16 -2
- data/rakelib/lib/director/validator.rb +196 -21
- data/rakelib/lib/director/window.rb +16 -2
- data/rakelib/lib/extractor/function.rb +2 -1
- data/rakelib/lib/generate/analyzer.rb +44 -44
- data/rakelib/lib/generate/doc.rb +11 -5
- data/rakelib/lib/specs/interfaces.rb +5 -0
- data/rakelib/lib/swig_runner.rb +55 -9
- data/rakelib/lib/typemap/client_data.rb +67 -0
- data/rakelib/lib/typemap/common.rb +3 -3
- data/rakelib/lib/typemap/config.rb +8 -0
- data/rakelib/lib/typemap/datetime.rb +1 -1
- data/rakelib/lib/typemap/tree_itemid.rb +2 -2
- data/samples/aui/aui.rb +1237 -1233
- data/samples/calendar/calendar.rb +293 -289
- data/samples/controls/get_item_sample.rb +83 -79
- data/samples/controls/htlbox.rb +331 -327
- data/samples/dialogs/dialogs.rb +682 -694
- data/samples/dialogs/wizard.rb +52 -55
- data/samples/dragdrop/dragdrop.rb +146 -142
- data/samples/drawing/bitmap.rb +29 -26
- data/samples/drawing/bitmap_image.rb +84 -80
- data/samples/drawing/graphics_drawing.rb +209 -205
- data/samples/drawing/image_prt.rb +344 -340
- data/samples/drawing/maths_images.rb +18 -1
- data/samples/drawing/rmagic_bitmap_image.rb +88 -84
- data/samples/etc/caret.rb +306 -0
- data/samples/etc/miniframe.rb +65 -60
- data/samples/etc/sash.rb +109 -105
- data/samples/etc/scrollwin.rb +86 -80
- data/samples/etc/system_settings.rb +216 -209
- data/samples/event/activation.rb +72 -67
- data/samples/event/event.rb +160 -153
- data/samples/event/threaded.rb +8 -1
- data/samples/event/update_ui_event.rb +67 -60
- data/samples/grid/grid.rb +188 -181
- data/samples/grid/gridtablebase.rb +136 -129
- data/samples/html/html.rb +208 -204
- data/samples/mdi/mdi.rb +59 -54
- data/samples/minimal/minimal.rb +54 -51
- data/samples/minimal/nothing.rb +1 -0
- data/samples/printing/printing.rb +367 -377
- data/samples/printing/printing2.rb +203 -198
- data/samples/propgrid/propgrid.rb +2312 -2308
- data/samples/propgrid/propgrid_minimal.rb +57 -50
- data/samples/ribbon/ribbon.rb +780 -774
- data/samples/sampler/ext.rb +0 -33
- data/samples/sampler/sample.rb +4 -9
- data/samples/sampler.rb +1 -1
- data/samples/splash/splash.rb +118 -116
- data/samples/text/rich_textctrl.rb +207 -201
- data/samples/text/richtext.rb +1409 -1405
- data/samples/text/scintilla.rb +137 -128
- data/samples/text/textctrl.rb +89 -83
- data/samples/text/unicode.rb +175 -168
- data/samples/treectrl/treectrl.rb +1430 -1426
- data/samples/widgets/activityindicator.rb +95 -0
- data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
- data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
- data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/button.xpm +54 -0
- data/samples/widgets/art/widgets/checkbox.xpm +54 -0
- data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
- data/samples/widgets/art/widgets/choicebk.xpm +54 -0
- data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
- data/samples/widgets/art/widgets/combobox.xpm +54 -0
- data/samples/widgets/art/widgets/datepick.xpm +200 -0
- data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
- data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
- data/samples/widgets/art/widgets/filepicker.xpm +214 -0
- data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
- data/samples/widgets/art/widgets/gauge.xpm +54 -0
- data/samples/widgets/art/widgets/header.xpm +54 -0
- data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
- data/samples/widgets/art/widgets/listbook.xpm +54 -0
- data/samples/widgets/art/widgets/listbox.xpm +54 -0
- data/samples/widgets/art/widgets/native.xpm +81 -0
- data/samples/widgets/art/widgets/notebook.xpm +54 -0
- data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/radiobox.xpm +54 -0
- data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
- data/samples/widgets/art/widgets/slider.xpm +54 -0
- data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
- data/samples/widgets/art/widgets/statbmp.xpm +40 -0
- data/samples/widgets/art/widgets/statbox.xpm +54 -0
- data/samples/widgets/art/widgets/stattext.xpm +54 -0
- data/samples/widgets/art/widgets/text.xpm +54 -0
- data/samples/widgets/art/widgets/timepick.xpm +207 -0
- data/samples/widgets/art/widgets/toggle.xpm +54 -0
- data/samples/widgets/art/widgets/toucan.png +0 -0
- data/samples/widgets/bmpcombobox.rb +651 -0
- data/samples/widgets/button.rb +462 -0
- data/samples/widgets/checkbox.rb +211 -0
- data/samples/widgets/choice.rb +287 -0
- data/samples/widgets/clrpicker.rb +156 -0
- data/samples/widgets/combobox.rb +516 -0
- data/samples/widgets/datepick.rb +215 -0
- data/samples/widgets/dirctrl.rb +265 -0
- data/samples/widgets/dirpicker.rb +158 -0
- data/samples/widgets/editlbox.rb +122 -0
- data/samples/widgets/filectrl.rb +216 -0
- data/samples/widgets/filepicker.rb +214 -0
- data/samples/widgets/fontpicker.rb +135 -0
- data/samples/widgets/gauge.rb +311 -0
- data/samples/widgets/headerctrl.rb +236 -0
- data/samples/widgets/hyperlink.rb +203 -0
- data/samples/widgets/itemcontainer.rb +185 -0
- data/samples/widgets/listbox.rb +473 -0
- data/samples/widgets/notebook.rb +488 -0
- data/samples/widgets/odcombobox.rb +608 -0
- data/samples/widgets/radiobox.rb +328 -0
- data/samples/widgets/searchctrl.rb +159 -0
- data/samples/widgets/slider.rb +594 -0
- data/samples/widgets/spinbtn.rb +443 -0
- data/samples/widgets/statbmp.rb +130 -0
- data/samples/widgets/static.rb +436 -0
- data/samples/widgets/textctrl.rb +700 -0
- data/samples/widgets/timepick.rb +148 -0
- data/samples/widgets/tn_widgets.png +0 -0
- data/samples/widgets/toggle.rb +385 -0
- data/samples/widgets/widgets.rb +1229 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- data/tests/test_config.rb +207 -42
- data/tests/test_event_handling.rb +52 -34
- data/tests/test_events.rb +7 -0
- data/tests/test_item_data.rb +24 -0
- data/tests/test_persistence.rb +142 -0
- data/tests/test_sizer.rb +44 -1
- data/tests/test_validators.rb +805 -0
- metadata +109 -138
- data/lib/wx/core/choice.rb +0 -14
- data/lib/wx/core/combo_ctrl.rb +0 -110
- data/rakelib/lib/typemap/grid_client_data.rb +0 -58
- data/samples/bigdemo/About.rbw +0 -39
- data/samples/bigdemo/ColorPanel.rbw +0 -23
- data/samples/bigdemo/GridSimple.rbw +0 -78
- data/samples/bigdemo/MDIDemo.rbw +0 -57
- data/samples/bigdemo/PopupMenu.rbw +0 -146
- data/samples/bigdemo/ShapedWindow.rbw +0 -128
- data/samples/bigdemo/Sizers.rbw +0 -541
- data/samples/bigdemo/bigdemo.rb +0 -817
- data/samples/bigdemo/demoTemplate.rbw +0 -33
- data/samples/bigdemo/helpfile.htb +0 -0
- data/samples/bigdemo/icons/Test 015.jpg +0 -0
- data/samples/bigdemo/icons/Test 015.png +0 -0
- data/samples/bigdemo/icons/choice.bmp +0 -0
- data/samples/bigdemo/icons/combo.bmp +0 -0
- data/samples/bigdemo/icons/combo.xpm +0 -27
- data/samples/bigdemo/icons/copy.xpm +0 -25
- data/samples/bigdemo/icons/cut.xpm +0 -24
- data/samples/bigdemo/icons/gauge.bmp +0 -0
- data/samples/bigdemo/icons/gauge.xpm +0 -27
- data/samples/bigdemo/icons/help.xpm +0 -25
- data/samples/bigdemo/icons/list.bmp +0 -0
- data/samples/bigdemo/icons/list.xpm +0 -27
- data/samples/bigdemo/icons/mondrian.ico +0 -0
- data/samples/bigdemo/icons/mondrian.xpm +0 -44
- data/samples/bigdemo/icons/new.xpm +0 -24
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +0 -45
- data/samples/bigdemo/icons/open.xpm +0 -26
- data/samples/bigdemo/icons/paste.bmp +0 -0
- data/samples/bigdemo/icons/paste.xpm +0 -38
- data/samples/bigdemo/icons/pointy.png +0 -0
- data/samples/bigdemo/icons/preview.xpm +0 -26
- data/samples/bigdemo/icons/print.xpm +0 -26
- data/samples/bigdemo/icons/radio.bmp +0 -0
- data/samples/bigdemo/icons/radio.xpm +0 -27
- data/samples/bigdemo/icons/robert.xpm +0 -415
- data/samples/bigdemo/icons/sashtest.ico +0 -0
- data/samples/bigdemo/icons/save.xpm +0 -25
- data/samples/bigdemo/icons/smiles.bmp +0 -0
- data/samples/bigdemo/icons/smiles.xpm +0 -39
- data/samples/bigdemo/icons/smiley.ico +0 -0
- data/samples/bigdemo/icons/smiley.xpm +0 -42
- data/samples/bigdemo/icons/stattext.xpm +0 -24
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.png +0 -0
- data/samples/bigdemo/icons/test2.xpm +0 -79
- data/samples/bigdemo/icons/text.bmp +0 -0
- data/samples/bigdemo/icons/text.xpm +0 -27
- data/samples/bigdemo/icons/tog1.bmp +0 -0
- data/samples/bigdemo/icons/tog1.xpm +0 -38
- data/samples/bigdemo/icons/tog2.bmp +0 -0
- data/samples/bigdemo/icons/tog2.xpm +0 -38
- data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
- data/samples/bigdemo/icons/wxwin.ico +0 -0
- data/samples/bigdemo/icons/wxwin16x16.png +0 -0
- data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
- data/samples/bigdemo/icons/wxwin32x32.png +0 -0
- data/samples/bigdemo/icons/wxwin48x48.png +0 -0
- data/samples/bigdemo/run.rb +0 -98
- data/samples/bigdemo/tips.txt +0 -7
- data/samples/bigdemo/utils.rb +0 -20
- data/samples/bigdemo/wxArtProvider.rbw +0 -282
- data/samples/bigdemo/wxBitmapButton.rbw +0 -65
- data/samples/bigdemo/wxButton.rbw +0 -64
- data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
- data/samples/bigdemo/wxCheckBox.rbw +0 -50
- data/samples/bigdemo/wxCheckListBox.rbw +0 -65
- data/samples/bigdemo/wxChoice.rbw +0 -47
- data/samples/bigdemo/wxChoicebook.rbw +0 -78
- data/samples/bigdemo/wxColourDialog.rbw +0 -33
- data/samples/bigdemo/wxComboBox.rbw +0 -77
- data/samples/bigdemo/wxCursor.rbw +0 -136
- data/samples/bigdemo/wxDialog.rbw +0 -74
- data/samples/bigdemo/wxDirDialog.rbw +0 -29
- data/samples/bigdemo/wxDragImage.rbw +0 -70
- data/samples/bigdemo/wxFileDialog.rbw +0 -37
- data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
- data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
- data/samples/bigdemo/wxFontDialog.rbw +0 -200
- data/samples/bigdemo/wxFrame.rbw +0 -53
- data/samples/bigdemo/wxGauge.rbw +0 -65
- data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
- data/samples/bigdemo/wxGrid.rbw +0 -66
- data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
- data/samples/bigdemo/wxListBox.rbw +0 -140
- data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
- data/samples/bigdemo/wxMDIWindows.rbw +0 -50
- data/samples/bigdemo/wxMenu.rbw +0 -247
- data/samples/bigdemo/wxMessageDialog.rbw +0 -27
- data/samples/bigdemo/wxMiniFrame.rbw +0 -70
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
- data/samples/bigdemo/wxNotebook.rbw +0 -136
- data/samples/bigdemo/wxProgressDialog.rbw +0 -43
- data/samples/bigdemo/wxRadioBox.rbw +0 -72
- data/samples/bigdemo/wxRadioButton.rbw +0 -125
- data/samples/bigdemo/wxSashWindow.rbw +0 -141
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
- data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
- data/samples/bigdemo/wxSlider.rbw +0 -42
- data/samples/bigdemo/wxSpinButton.rbw +0 -50
- data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
- data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
- data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
- data/samples/bigdemo/wxStaticText.rbw +0 -55
- data/samples/bigdemo/wxStatusBar.rbw +0 -126
- data/samples/bigdemo/wxTextCtrl.rbw +0 -149
- data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
- data/samples/bigdemo/wxToggleButton.rbw +0 -49
- data/samples/bigdemo/wxToolBar.rbw +0 -131
- data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
- data/samples/caret/caret.rb +0 -298
- data/samples/caret/mondrian.xpm +0 -44
- data/samples/controls/books.rb +0 -189
- data/samples/controls/choice.xpm +0 -27
- data/samples/controls/combo.xpm +0 -27
- data/samples/controls/controls.rb +0 -1099
- data/samples/controls/gauge.xpm +0 -27
- data/samples/controls/list.xpm +0 -27
- data/samples/controls/mondrian.ico +0 -0
- data/samples/controls/mondrian.xpm +0 -44
- data/samples/controls/radio.xpm +0 -27
- data/samples/controls/stattext.xpm +0 -24
- data/samples/controls/test2.bmp +0 -0
- data/samples/controls/text.xpm +0 -27
- data/samples/controls/tn_books.png +0 -0
- data/samples/controls/tn_controls.png +0 -0
- data/samples/etc/choice.rb +0 -87
- data/samples/etc/tn_choice.png +0 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +0 -44
- /data/samples/{caret → etc}/tn_caret.png +0 -0
|
@@ -11,97 +11,101 @@
|
|
|
11
11
|
|
|
12
12
|
require 'wx'
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
# - Wx::
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
14
|
+
module BitmapImage
|
|
15
|
+
|
|
16
|
+
# Bitmap sample (rewritten by Chauk-Mean Proum)
|
|
17
|
+
|
|
18
|
+
# This sample demonstrates how to draw the same image in various forms
|
|
19
|
+
# (original, mirrored, greyscaled and blurred).
|
|
20
|
+
#
|
|
21
|
+
# This sample uses :
|
|
22
|
+
# - Wx::Image, which allows a wide range of manipulations such as rescaling
|
|
23
|
+
# and writing to files.
|
|
24
|
+
# - Wx::Bitmap, which is a platform-specific representation of an image.
|
|
25
|
+
|
|
26
|
+
# This is the class that must be used to actually display an image.
|
|
27
|
+
class ImageFrame < Wx::Frame
|
|
28
|
+
def initialize
|
|
29
|
+
super(nil, :title => 'Simple image demo', :size => [600, 600])
|
|
30
|
+
|
|
31
|
+
# Create the various images from the bitmap file
|
|
32
|
+
img_file = File.join( File.dirname(__FILE__), 'ruby-logo.jpg')
|
|
33
|
+
@image = Wx::Image.new(img_file)
|
|
34
|
+
@mirrored_image = Wx::Image.new(img_file).mirror
|
|
35
|
+
# load from Ruby IO (File)
|
|
36
|
+
@greyscaled_image = Wx::Image.new
|
|
37
|
+
File.open(img_file) { |f| @greyscaled_image.load_stream(f) }
|
|
38
|
+
@greyscaled_image = @greyscaled_image.convert_to_greyscale
|
|
39
|
+
# load from Ruby IO-like (at least #read) object
|
|
40
|
+
klass = Class.new do
|
|
41
|
+
def initialize(io)
|
|
42
|
+
@io = io
|
|
43
|
+
end
|
|
44
|
+
def read(size)
|
|
45
|
+
@io.read(size)
|
|
46
|
+
end
|
|
44
47
|
end
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
@blurred_image = @blurred_image.blur(15)
|
|
49
|
-
|
|
50
|
-
# Create the corresponding bitmaps
|
|
51
|
-
compute_bitmaps
|
|
48
|
+
@blurred_image = Wx::Image.new
|
|
49
|
+
@blurred_image.load_stream(klass.new(File.open(img_file)), 'image/jpeg')
|
|
50
|
+
@blurred_image = @blurred_image.blur(15)
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
evt_idle :on_idle
|
|
56
|
-
evt_paint :on_paint
|
|
57
|
-
end
|
|
52
|
+
# Create the corresponding bitmaps
|
|
53
|
+
compute_bitmaps
|
|
58
54
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
# Set up event handling
|
|
56
|
+
evt_size :on_size
|
|
57
|
+
evt_idle :on_idle
|
|
58
|
+
evt_paint :on_paint
|
|
59
|
+
end
|
|
64
60
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@bitmap2 = compute_bitmap(@mirrored_image, width, height)
|
|
71
|
-
@bitmap3 = compute_bitmap(@greyscaled_image, width, height)
|
|
72
|
-
@bitmap4 = compute_bitmap(@blurred_image, width, height)
|
|
73
|
-
@done = true
|
|
74
|
-
end
|
|
61
|
+
# Create a bitmap for the specified image and size
|
|
62
|
+
def compute_bitmap image, width, height
|
|
63
|
+
rescaled_image = image.copy.rescale(width, height)
|
|
64
|
+
rescaled_image.to_bitmap
|
|
65
|
+
end
|
|
75
66
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
67
|
+
# Create the bitmaps corresponding to the images and with half the size of the frame
|
|
68
|
+
def compute_bitmaps
|
|
69
|
+
width = client_size.width / 2
|
|
70
|
+
height = client_size.height / 2
|
|
71
|
+
@bitmap1 = compute_bitmap(@image, width, height)
|
|
72
|
+
@bitmap2 = compute_bitmap(@mirrored_image, width, height)
|
|
73
|
+
@bitmap3 = compute_bitmap(@greyscaled_image, width, height)
|
|
74
|
+
@bitmap4 = compute_bitmap(@blurred_image, width, height)
|
|
75
|
+
@done = true
|
|
76
|
+
end
|
|
81
77
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
refresh
|
|
78
|
+
# Note to recompute the bitmaps on a resize
|
|
79
|
+
def on_size(event)
|
|
80
|
+
@done = false
|
|
81
|
+
event.skip
|
|
87
82
|
end
|
|
88
|
-
end
|
|
89
83
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
width = client_size.width / 2
|
|
96
|
-
height = client_size.height / 2
|
|
97
|
-
dc.draw_bitmap(@bitmap1, 0, 0, false)
|
|
98
|
-
dc.draw_bitmap(@bitmap2, width, 0, false)
|
|
99
|
-
dc.draw_bitmap(@bitmap3, 0, height, false)
|
|
100
|
-
dc.draw_bitmap(@bitmap4, width, height, false)
|
|
84
|
+
# Recompute the bitmaps if needed, then do a refresh
|
|
85
|
+
def on_idle
|
|
86
|
+
if not @done
|
|
87
|
+
compute_bitmaps
|
|
88
|
+
refresh
|
|
101
89
|
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Paint the frame with the bitmaps
|
|
93
|
+
def on_paint
|
|
94
|
+
paint do | dc |
|
|
95
|
+
|
|
96
|
+
if @done
|
|
97
|
+
width = client_size.width / 2
|
|
98
|
+
height = client_size.height / 2
|
|
99
|
+
dc.draw_bitmap(@bitmap1, 0, 0, false)
|
|
100
|
+
dc.draw_bitmap(@bitmap2, width, 0, false)
|
|
101
|
+
dc.draw_bitmap(@bitmap3, 0, height, false)
|
|
102
|
+
dc.draw_bitmap(@bitmap4, width, height, false)
|
|
103
|
+
end
|
|
102
104
|
|
|
105
|
+
end
|
|
103
106
|
end
|
|
104
107
|
end
|
|
108
|
+
|
|
105
109
|
end
|
|
106
110
|
|
|
107
111
|
module BitmapImageSample
|
|
@@ -122,7 +126,7 @@ module BitmapImageSample
|
|
|
122
126
|
end
|
|
123
127
|
|
|
124
128
|
def self.activate
|
|
125
|
-
frame = ImageFrame.new
|
|
129
|
+
frame = BitmapImage::ImageFrame.new
|
|
126
130
|
frame.show
|
|
127
131
|
frame
|
|
128
132
|
end
|
|
@@ -11,236 +11,240 @@
|
|
|
11
11
|
|
|
12
12
|
require 'wx'
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@x_axis = 0
|
|
23
|
-
@y_axis = 0
|
|
24
|
-
@txt = ""
|
|
25
|
-
@rotation = 0
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def move(max_x,max_y,max_sp)
|
|
29
|
-
@x += @x_axis
|
|
30
|
-
@y += @y_axis
|
|
31
|
-
if @x <= 0
|
|
32
|
-
@x_axis = rand(max_sp)
|
|
14
|
+
module GraphicsDrawing
|
|
15
|
+
|
|
16
|
+
class GfxInfo
|
|
17
|
+
attr_accessor :font, :w, :h, :x, :y, :x_axis, :y_axis, :txt, :rotation
|
|
18
|
+
def initialize
|
|
19
|
+
@font = nil
|
|
20
|
+
@w = 0
|
|
21
|
+
@h = 0
|
|
33
22
|
@x = 0
|
|
34
|
-
elsif (@x+@w) >= max_x
|
|
35
|
-
@x_axis = (rand(max_sp)*-1)
|
|
36
|
-
@x = max_x - @w
|
|
37
|
-
end
|
|
38
|
-
if @y <= 0
|
|
39
|
-
@y_axis = rand(max_sp)
|
|
40
23
|
@y = 0
|
|
41
|
-
|
|
42
|
-
@y_axis =
|
|
43
|
-
@
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def rotate(run)
|
|
48
|
-
@rotation += run
|
|
49
|
-
if @rotation > 360
|
|
24
|
+
@x_axis = 0
|
|
25
|
+
@y_axis = 0
|
|
26
|
+
@txt = ""
|
|
50
27
|
@rotation = 0
|
|
51
28
|
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def draw(gdc)
|
|
55
|
-
gdc.set_font(font)
|
|
56
|
-
gdc.draw_text(txt,x,y,rotation)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def [](symbol)
|
|
60
|
-
self.__send__(symbol,*[])
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def []=(symbol,val)
|
|
64
|
-
self.__send__((symbol.to_s + "=").to_sym,*[val])
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
29
|
|
|
30
|
+
def move(max_x,max_y,max_sp)
|
|
31
|
+
@x += @x_axis
|
|
32
|
+
@y += @y_axis
|
|
33
|
+
if @x <= 0
|
|
34
|
+
@x_axis = rand(max_sp)
|
|
35
|
+
@x = 0
|
|
36
|
+
elsif (@x+@w) >= max_x
|
|
37
|
+
@x_axis = (rand(max_sp)*-1)
|
|
38
|
+
@x = max_x - @w
|
|
39
|
+
end
|
|
40
|
+
if @y <= 0
|
|
41
|
+
@y_axis = rand(max_sp)
|
|
42
|
+
@y = 0
|
|
43
|
+
elsif (@y+@h) >= max_y
|
|
44
|
+
@y_axis = (rand(max_sp)*-1)
|
|
45
|
+
@y = max_y - @h
|
|
46
|
+
end
|
|
47
|
+
end
|
|
68
48
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
# Setup the actual data to be stored in Brushes and Pens
|
|
89
|
-
RED_BRUSH.set_colour(Wx::RED)
|
|
90
|
-
RED_PEN.set_colour(Wx::RED)
|
|
91
|
-
GREEN_BRUSH.set_colour(Wx::GREEN)
|
|
92
|
-
GREEN_PEN.set_colour(Wx::GREEN)
|
|
93
|
-
BLUE_BRUSH.set_colour(Wx::BLUE)
|
|
94
|
-
BLUE_PEN.set_colour(Wx::BLUE)
|
|
95
|
-
# Create our Animation Timer
|
|
96
|
-
@timer = Wx::Timer.new(self,1000)
|
|
97
|
-
@fps = 0
|
|
98
|
-
# Set it to run every 25 milliseconds, you can set this value higher, to get
|
|
99
|
-
# higher frame rates, however, it may cause non-responsiveness of normal
|
|
100
|
-
# gui controls.
|
|
101
|
-
@timer.start(25)
|
|
102
|
-
# Setup the event Handler to do the drawing on this window.
|
|
103
|
-
evt_paint :on_paint
|
|
104
|
-
evt_timer 1000, :animate
|
|
105
|
-
set_background_style(Wx::BG_STYLE_PAINT)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def create_resources(gdc)
|
|
109
|
-
# Create our Resource Class for holding the Text to be displayed
|
|
110
|
-
@rtxt = GfxInfo.new
|
|
111
|
-
@gtxt = GfxInfo.new
|
|
112
|
-
@btxt = GfxInfo.new
|
|
113
|
-
# Store our fonts, and strings into the classes
|
|
114
|
-
@rtxt[:font] = gdc.create_font(@font,Wx::RED); @rtxt[:txt] = "This is a red string"
|
|
115
|
-
@gtxt[:font] = gdc.create_font(@font,Wx::GREEN); @gtxt[:txt] = "This is a green string"
|
|
116
|
-
@btxt[:font] = gdc.create_font(@font,Wx::BLUE); @btxt[:txt] = "This is a blue string"
|
|
117
|
-
# Create the GraphicsContext resources.
|
|
118
|
-
@rbrush = gdc.create_brush(RED_BRUSH)
|
|
119
|
-
@gbrush = gdc.create_brush(GREEN_BRUSH)
|
|
120
|
-
@bbrush = gdc.create_brush(BLUE_BRUSH)
|
|
121
|
-
@rpen = gdc.create_pen(RED_PEN)
|
|
122
|
-
@gpen = gdc.create_pen(GREEN_PEN)
|
|
123
|
-
@bpen = gdc.create_pen(BLUE_PEN)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def get_extents(gdc)
|
|
127
|
-
# Since we need a GDC and the text to get the extents, we do this in a
|
|
128
|
-
# separate method, though we should be able to do it with create_resources
|
|
129
|
-
width,height,*garbage = gdc.get_text_extent(@rtxt[:txt])
|
|
130
|
-
@rtxt[:w] = width.to_i; @rtxt[:h] = height.to_i
|
|
131
|
-
width,height,*garbage = gdc.get_text_extent(@gtxt[:txt])
|
|
132
|
-
@gtxt[:w] = width.to_i; @gtxt[:h] = height.to_i
|
|
133
|
-
width,height,*garbage = gdc.get_text_extent(@btxt[:txt])
|
|
134
|
-
@btxt[:w] = width.to_i; @btxt[:h] = height.to_i
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def setup_positions
|
|
138
|
-
# Setup our initial positions for drawing.
|
|
139
|
-
@rtxt[:x] = @rtxt[:y] = 0
|
|
140
|
-
size = self.get_client_size
|
|
141
|
-
pos_x = (size.width / 2) #- (@gtxt[:w] / 2)
|
|
142
|
-
pos_y = (size.height / 2) #- (@gtxt[:h] / 2)
|
|
143
|
-
@gtxt[:x] = pos_x
|
|
144
|
-
@gtxt[:y] = pos_y
|
|
145
|
-
@btxt[:x] = (size.width - @btxt[:w])
|
|
146
|
-
@btxt[:y] = (size.height - @btxt[:h])
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def animate
|
|
150
|
-
# This routine manily animates the Text, which is also is handled by the
|
|
151
|
-
# GfxInfo class as well. Mainly in #rotate and #move.
|
|
152
|
-
rect = self.get_client_size
|
|
153
|
-
@rtxt.move(rect.width,rect.height,8) unless @rtxt.nil?
|
|
154
|
-
@gtxt.rotate(-0.01) unless @gtxt.nil?
|
|
155
|
-
@btxt.move(rect.width,rect.height,5) unless @btxt.nil?
|
|
156
|
-
# We're now ready to draw our stuff to the window
|
|
157
|
-
refresh
|
|
49
|
+
def rotate(run)
|
|
50
|
+
@rotation += run
|
|
51
|
+
if @rotation > 360
|
|
52
|
+
@rotation = 0
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def draw(gdc)
|
|
57
|
+
gdc.set_font(font)
|
|
58
|
+
gdc.draw_text(txt,x,y,rotation)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def [](symbol)
|
|
62
|
+
self.__send__(symbol,*[])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def []=(symbol,val)
|
|
66
|
+
self.__send__((symbol.to_s + "=").to_sym,*[val])
|
|
67
|
+
end
|
|
158
68
|
end
|
|
159
|
-
|
|
160
|
-
def on_paint
|
|
161
|
-
# We do our drawing now
|
|
162
|
-
rect = self.get_client_size
|
|
163
|
-
paint_buffered do |paint_dc|
|
|
164
|
-
Wx::GCDC.draw_on(paint_dc) do |gcdc|
|
|
165
|
-
gdc = gcdc.get_graphics_context
|
|
166
|
-
unless @rtxt
|
|
167
|
-
create_resources(gdc)
|
|
168
|
-
end
|
|
169
69
|
|
|
170
|
-
gcdc.clear
|
|
171
70
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
71
|
+
class GraphicsWindow < Wx::Window
|
|
72
|
+
# Create Needed Brushes and Pens
|
|
73
|
+
RED_BRUSH = Wx::Brush.new
|
|
74
|
+
GREEN_BRUSH = Wx::Brush.new
|
|
75
|
+
BLUE_BRUSH = Wx::Brush.new
|
|
76
|
+
RED_PEN = Wx::Pen.new
|
|
77
|
+
GREEN_PEN = Wx::Pen.new
|
|
78
|
+
BLUE_PEN = Wx::Pen.new
|
|
79
|
+
|
|
80
|
+
# Instance Methods to keep track of toggle for corner, rect, and counter for frames per second
|
|
81
|
+
attr_accessor :corner, :rect, :fps
|
|
82
|
+
|
|
83
|
+
def initialize(parent)
|
|
84
|
+
super(parent)
|
|
85
|
+
# Create the font we'll use to create our pre-defined fonts for the painting
|
|
86
|
+
@font = Wx::Font.new(32,
|
|
87
|
+
Wx::FONTFAMILY_TELETYPE,
|
|
88
|
+
Wx::FONTSTYLE_NORMAL,
|
|
89
|
+
Wx::FONTWEIGHT_NORMAL)
|
|
90
|
+
# Setup the actual data to be stored in Brushes and Pens
|
|
91
|
+
RED_BRUSH.set_colour(Wx::RED)
|
|
92
|
+
RED_PEN.set_colour(Wx::RED)
|
|
93
|
+
GREEN_BRUSH.set_colour(Wx::GREEN)
|
|
94
|
+
GREEN_PEN.set_colour(Wx::GREEN)
|
|
95
|
+
BLUE_BRUSH.set_colour(Wx::BLUE)
|
|
96
|
+
BLUE_PEN.set_colour(Wx::BLUE)
|
|
97
|
+
# Create our Animation Timer
|
|
98
|
+
@timer = Wx::Timer.new(self,1000)
|
|
99
|
+
@fps = 0
|
|
100
|
+
# Set it to run every 25 milliseconds, you can set this value higher, to get
|
|
101
|
+
# higher frame rates, however, it may cause non-responsiveness of normal
|
|
102
|
+
# gui controls.
|
|
103
|
+
@timer.start(25)
|
|
104
|
+
# Setup the event Handler to do the drawing on this window.
|
|
105
|
+
evt_paint :on_paint
|
|
106
|
+
evt_timer 1000, :animate
|
|
107
|
+
set_background_style(Wx::BG_STYLE_PAINT)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def create_resources(gdc)
|
|
111
|
+
# Create our Resource Class for holding the Text to be displayed
|
|
112
|
+
@rtxt = GfxInfo.new
|
|
113
|
+
@gtxt = GfxInfo.new
|
|
114
|
+
@btxt = GfxInfo.new
|
|
115
|
+
# Store our fonts, and strings into the classes
|
|
116
|
+
@rtxt[:font] = gdc.create_font(@font,Wx::RED); @rtxt[:txt] = "This is a red string"
|
|
117
|
+
@gtxt[:font] = gdc.create_font(@font,Wx::GREEN); @gtxt[:txt] = "This is a green string"
|
|
118
|
+
@btxt[:font] = gdc.create_font(@font,Wx::BLUE); @btxt[:txt] = "This is a blue string"
|
|
119
|
+
# Create the GraphicsContext resources.
|
|
120
|
+
@rbrush = gdc.create_brush(RED_BRUSH)
|
|
121
|
+
@gbrush = gdc.create_brush(GREEN_BRUSH)
|
|
122
|
+
@bbrush = gdc.create_brush(BLUE_BRUSH)
|
|
123
|
+
@rpen = gdc.create_pen(RED_PEN)
|
|
124
|
+
@gpen = gdc.create_pen(GREEN_PEN)
|
|
125
|
+
@bpen = gdc.create_pen(BLUE_PEN)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def get_extents(gdc)
|
|
129
|
+
# Since we need a GDC and the text to get the extents, we do this in a
|
|
130
|
+
# separate method, though we should be able to do it with create_resources
|
|
131
|
+
width,height,*garbage = gdc.get_text_extent(@rtxt[:txt])
|
|
132
|
+
@rtxt[:w] = width.to_i; @rtxt[:h] = height.to_i
|
|
133
|
+
width,height,*garbage = gdc.get_text_extent(@gtxt[:txt])
|
|
134
|
+
@gtxt[:w] = width.to_i; @gtxt[:h] = height.to_i
|
|
135
|
+
width,height,*garbage = gdc.get_text_extent(@btxt[:txt])
|
|
136
|
+
@btxt[:w] = width.to_i; @btxt[:h] = height.to_i
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def setup_positions
|
|
140
|
+
# Setup our initial positions for drawing.
|
|
141
|
+
@rtxt[:x] = @rtxt[:y] = 0
|
|
142
|
+
size = self.get_client_size
|
|
143
|
+
pos_x = (size.width / 2) #- (@gtxt[:w] / 2)
|
|
144
|
+
pos_y = (size.height / 2) #- (@gtxt[:h] / 2)
|
|
145
|
+
@gtxt[:x] = pos_x
|
|
146
|
+
@gtxt[:y] = pos_y
|
|
147
|
+
@btxt[:x] = (size.width - @btxt[:w])
|
|
148
|
+
@btxt[:y] = (size.height - @btxt[:h])
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def animate
|
|
152
|
+
# This routine manily animates the Text, which is also is handled by the
|
|
153
|
+
# GfxInfo class as well. Mainly in #rotate and #move.
|
|
154
|
+
rect = self.get_client_size
|
|
155
|
+
@rtxt.move(rect.width,rect.height,8) unless @rtxt.nil?
|
|
156
|
+
@gtxt.rotate(-0.01) unless @gtxt.nil?
|
|
157
|
+
@btxt.move(rect.width,rect.height,5) unless @btxt.nil?
|
|
158
|
+
# We're now ready to draw our stuff to the window
|
|
159
|
+
refresh
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def on_paint
|
|
163
|
+
# We do our drawing now
|
|
164
|
+
rect = self.get_client_size
|
|
165
|
+
paint_buffered do |paint_dc|
|
|
166
|
+
Wx::GCDC.draw_on(paint_dc) do |gcdc|
|
|
167
|
+
gdc = gcdc.get_graphics_context
|
|
168
|
+
unless @rtxt
|
|
169
|
+
create_resources(gdc)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
gcdc.clear
|
|
173
|
+
|
|
174
|
+
unless @rtxt[:w] != 0
|
|
175
|
+
gdc.set_font(@rtxt[:font])
|
|
176
|
+
get_extents(gdc)
|
|
177
|
+
setup_positions
|
|
189
178
|
end
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
179
|
+
@rtxt.draw(gdc)
|
|
180
|
+
@gtxt.draw(gdc)
|
|
181
|
+
@btxt.draw(gdc)
|
|
182
|
+
# Draw our rectangles, if they are checked
|
|
183
|
+
15.times do
|
|
184
|
+
pen = gdc.create_pen(Wx::Pen.new(Wx::Colour.new(rand(256),rand(256),rand(256),rand(256))))
|
|
185
|
+
if @corner.is_checked
|
|
186
|
+
x = rand(rect.width)
|
|
187
|
+
y = rand(rect.height)
|
|
188
|
+
gdc.set_pen(pen)
|
|
189
|
+
gdc.draw_rectangle(x,y,x,1)
|
|
190
|
+
gdc.draw_rectangle(x,y,1,y)
|
|
191
|
+
end
|
|
192
|
+
if @rect.is_checked
|
|
193
|
+
x = rand(rect.width)
|
|
194
|
+
y = rand(rect.height)
|
|
195
|
+
w = rand(rect.width)
|
|
196
|
+
h = rand(rect.height)
|
|
197
|
+
w + x > rect.width ? (w -= x; w -= rand(150)) : 0
|
|
198
|
+
h + y > rect.height ? (h -= y; h -= rand(150)) : 0
|
|
199
|
+
gdc.set_pen(pen)
|
|
200
|
+
gdc.draw_rectangle(x,y,w,h)
|
|
201
|
+
end
|
|
199
202
|
end
|
|
200
203
|
end
|
|
201
204
|
end
|
|
205
|
+
@fps += 1
|
|
202
206
|
end
|
|
203
|
-
@fps += 1
|
|
204
207
|
end
|
|
205
|
-
end
|
|
206
208
|
|
|
207
|
-
class GraphicsFrame < Wx::Frame
|
|
208
|
-
|
|
209
|
-
|
|
209
|
+
class GraphicsFrame < Wx::Frame
|
|
210
|
+
def initialize
|
|
211
|
+
super(nil, title: "Graphics Context example", size: [500,400])
|
|
210
212
|
|
|
211
|
-
|
|
213
|
+
@win = GraphicsWindow.new(self)
|
|
212
214
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
create_status_bar(3)
|
|
216
|
+
status_bar.set_status_text("Frames per sec: 0", 0)
|
|
217
|
+
@win.rect = Wx::CheckBox.new(status_bar,:label=>"Draw Rectangles")
|
|
218
|
+
@win.corner = Wx::CheckBox.new(status_bar,:label=>"Draw Corners")
|
|
217
219
|
|
|
218
|
-
|
|
220
|
+
@fps_timer = Wx::Timer.every(1000) { fps_display }
|
|
219
221
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
+
evt_size :on_size
|
|
223
|
+
evt_close { |evt| @fps_timer.stop; evt.skip }
|
|
222
224
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
+
centre
|
|
226
|
+
end
|
|
225
227
|
|
|
226
228
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
229
|
+
# Place the two control checkboxes within the StatusBar
|
|
230
|
+
def on_size
|
|
231
|
+
cli_rect = self.client_rect
|
|
232
|
+
@win.size = [cli_rect.width, cli_rect.height]
|
|
233
|
+
rect = status_bar.field_rect(1)
|
|
234
|
+
@win.rect.move [ rect.x + 2, rect.y + 2]
|
|
235
|
+
@win.rect.size = [ rect.width - 4, rect.height - 4 ]
|
|
234
236
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
237
|
+
rect = status_bar.field_rect(2)
|
|
238
|
+
@win.corner.move [ rect.x + 2, rect.y + 2]
|
|
239
|
+
@win.corner.size = [ rect.width - 4, rect.height - 4 ]
|
|
240
|
+
end
|
|
239
241
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
242
|
+
def fps_display
|
|
243
|
+
get_status_bar.set_status_text("Frames per sec: #{@win.fps}", 0)
|
|
244
|
+
@win.fps = 0
|
|
245
|
+
end
|
|
243
246
|
end
|
|
247
|
+
|
|
244
248
|
end
|
|
245
249
|
|
|
246
250
|
module GraphicsSample
|
|
@@ -254,7 +258,7 @@ module GraphicsSample
|
|
|
254
258
|
end
|
|
255
259
|
|
|
256
260
|
def self.activate
|
|
257
|
-
frame = GraphicsFrame.new
|
|
261
|
+
frame = GraphicsDrawing::GraphicsFrame.new
|
|
258
262
|
frame.show
|
|
259
263
|
frame
|
|
260
264
|
end
|