kredki 0.1.0
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 +7 -0
- data/lib/kredki/core/application.rb +314 -0
- data/lib/kredki/core/color.rb +100 -0
- data/lib/kredki/core/event/block_event_reaction.rb +44 -0
- data/lib/kredki/core/event/composite_event_manager.rb +37 -0
- data/lib/kredki/core/event/event.rb +91 -0
- data/lib/kredki/core/event/event_manager.rb +60 -0
- data/lib/kredki/core/event/event_manager_jobs.rb +53 -0
- data/lib/kredki/core/event/event_reaction.rb +36 -0
- data/lib/kredki/core/event/family/drop_event.rb +40 -0
- data/lib/kredki/core/event/family/exit_event.rb +5 -0
- data/lib/kredki/core/event/family/focus_enter_event.rb +5 -0
- data/lib/kredki/core/event/family/focus_leave_event.rb +5 -0
- data/lib/kredki/core/event/family/hide_event.rb +5 -0
- data/lib/kredki/core/event/family/joystick_event.rb +102 -0
- data/lib/kredki/core/event/family/key_event.rb +40 -0
- data/lib/kredki/core/event/family/mouse_event.rb +190 -0
- data/lib/kredki/core/event/family/pastele_event.rb +11 -0
- data/lib/kredki/core/event/family/show_event.rb +5 -0
- data/lib/kredki/core/event/family/text_event.rb +23 -0
- data/lib/kredki/core/event/family/tick_event.rb +5 -0
- data/lib/kredki/core/event/family/update_complete_event.rb +5 -0
- data/lib/kredki/core/event/family/window_event.rb +108 -0
- data/lib/kredki/core/event/job_event_reaction.rb +44 -0
- data/lib/kredki/core/event/joystick_event_manager.rb +30 -0
- data/lib/kredki/core/event/keyboard_event_manager.rb +29 -0
- data/lib/kredki/core/event/method_event_reaction.rb +46 -0
- data/lib/kredki/core/event/mouse_event_manager.rb +27 -0
- data/lib/kredki/core/font.rb +53 -0
- data/lib/kredki/core/job/after_job.rb +59 -0
- data/lib/kredki/core/job/job.rb +108 -0
- data/lib/kredki/core/job/loop_job.rb +87 -0
- data/lib/kredki/core/job/play_animation_job.rb +44 -0
- data/lib/kredki/core/job/play_job.rb +41 -0
- data/lib/kredki/core/job/play_loop_animation_job.rb +98 -0
- data/lib/kredki/core/job/play_loop_job.rb +104 -0
- data/lib/kredki/core/job/side_job.rb +62 -0
- data/lib/kredki/core/kernel-path.rb +71 -0
- data/lib/kredki/core/kredki.rb +89 -0
- data/lib/kredki/core/linear_gradient.rb +43 -0
- data/lib/kredki/core/media/clipboard.rb +35 -0
- data/lib/kredki/core/media/joystick.rb +199 -0
- data/lib/kredki/core/media/keyboard.rb +84 -0
- data/lib/kredki/core/media/keyboard_modifiers_decoder.rb +154 -0
- data/lib/kredki/core/media/mouse.rb +197 -0
- data/lib/kredki/core/paint/animation.rb +247 -0
- data/lib/kredki/core/paint/area.rb +67 -0
- data/lib/kredki/core/paint/block_shape_area.rb +102 -0
- data/lib/kredki/core/paint/ellipse.rb +22 -0
- data/lib/kredki/core/paint/paint.rb +392 -0
- data/lib/kredki/core/paint/picture.rb +126 -0
- data/lib/kredki/core/paint/rectangle.rb +202 -0
- data/lib/kredki/core/paint/scene.rb +277 -0
- data/lib/kredki/core/paint/shape.rb +394 -0
- data/lib/kredki/core/paint/shape_area.rb +57 -0
- data/lib/kredki/core/paint/text.rb +222 -0
- data/lib/kredki/core/pastele/pastele-extern.rb +139 -0
- data/lib/kredki/core/pastele/pastele.rb +205 -0
- data/lib/kredki/core/radial_gradient.rb +45 -0
- data/lib/kredki/core/setup.rb +214 -0
- data/lib/kredki/core/window/pane.rb +178 -0
- data/lib/kredki/core/window/pane_event_manager.rb +44 -0
- data/lib/kredki/core/window/pane_events.rb +366 -0
- data/lib/kredki/core/window/window.rb +584 -0
- data/lib/kredki/core.rb +2 -0
- data/lib/kredki/hide.rb +9 -0
- data/lib/kredki/irb.rb +90 -0
- data/lib/kredki/module.rb +3 -0
- data/lib/kredki/pads/application.rb +13 -0
- data/lib/kredki/pads/button.rb +151 -0
- data/lib/kredki/pads/checkbox/checkbox.rb +68 -0
- data/lib/kredki/pads/checkbox/checkbox_button.rb +65 -0
- data/lib/kredki/pads/context/item.rb +65 -0
- data/lib/kredki/pads/context/item_group.rb +10 -0
- data/lib/kredki/pads/context/layer.rb +59 -0
- data/lib/kredki/pads/context/menu.rb +77 -0
- data/lib/kredki/pads/context/pad.rb +26 -0
- data/lib/kredki/pads/context/primary_layer.rb +51 -0
- data/lib/kredki/pads/context/secondary_layer.rb +60 -0
- data/lib/kredki/pads/item/item.rb +140 -0
- data/lib/kredki/pads/item/item_group.rb +44 -0
- data/lib/kredki/pads/item/item_x.rb +22 -0
- data/lib/kredki/pads/item/item_y.rb +31 -0
- data/lib/kredki/pads/label.rb +71 -0
- data/lib/kredki/pads/layer.rb +326 -0
- data/lib/kredki/pads/layout/align.rb +10 -0
- data/lib/kredki/pads/layout/layout.rb +88 -0
- data/lib/kredki/pads/layout/way.rb +99 -0
- data/lib/kredki/pads/layout/x_way.rb +119 -0
- data/lib/kredki/pads/layout/y_way.rb +120 -0
- data/lib/kredki/pads/list/item.rb +117 -0
- data/lib/kredki/pads/list/item_group.rb +36 -0
- data/lib/kredki/pads/list/pad.rb +74 -0
- data/lib/kredki/pads/list/tree/item.rb +138 -0
- data/lib/kredki/pads/list/tree/item_group.rb +86 -0
- data/lib/kredki/pads/list/tree/pad.rb +94 -0
- data/lib/kredki/pads/module.rb +11 -0
- data/lib/kredki/pads/note.rb +212 -0
- data/lib/kredki/pads/notes.rb +32 -0
- data/lib/kredki/pads/option/option.rb +121 -0
- data/lib/kredki/pads/option/option_item.rb +15 -0
- data/lib/kredki/pads/option/option_item_group.rb +16 -0
- data/lib/kredki/pads/option/option_layer.rb +81 -0
- data/lib/kredki/pads/pad/animation_pad.rb +106 -0
- data/lib/kredki/pads/pad/glyph_pad.rb +71 -0
- data/lib/kredki/pads/pad/pad.rb +1290 -0
- data/lib/kredki/pads/pad/pad_events.rb +358 -0
- data/lib/kredki/pads/pad/picture_pad.rb +89 -0
- data/lib/kredki/pads/pad/rectangle_pad.rb +181 -0
- data/lib/kredki/pads/pad/scroll_pad.rb +176 -0
- data/lib/kredki/pads/pad/shape_pad.rb +148 -0
- data/lib/kredki/pads/pad/space_pad.rb +33 -0
- data/lib/kredki/pads/pad/text_pad.rb +310 -0
- data/lib/kredki/pads/pane.rb +267 -0
- data/lib/kredki/pads/portal_layer.rb +94 -0
- data/lib/kredki/pads/radio/group.rb +45 -0
- data/lib/kredki/pads/radio/item.rb +69 -0
- data/lib/kredki/pads/radio/item_button.rb +143 -0
- data/lib/kredki/pads/service/event_queue.rb +79 -0
- data/lib/kredki/pads/service/service.rb +248 -0
- data/lib/kredki/pads/service/service_event_manager.rb +43 -0
- data/lib/kredki/pads/service/service_filter.rb +98 -0
- data/lib/kredki/pads/service/service_inherited.rb +48 -0
- data/lib/kredki/pads/setup.rb +36 -0
- data/lib/kredki/pads/slider/slider.rb +145 -0
- data/lib/kredki/pads/slider/slider_x.rb +41 -0
- data/lib/kredki/pads/slider/slider_y.rb +41 -0
- data/lib/kredki/pads/table/cell.rb +22 -0
- data/lib/kredki/pads/table/column.rb +63 -0
- data/lib/kredki/pads/table/column_layout.rb +88 -0
- data/lib/kredki/pads/table/pad.rb +116 -0
- data/lib/kredki/pads/table/row.rb +24 -0
- data/lib/kredki/pads/table/scroll_rows.rb +50 -0
- data/lib/kredki/pads/text/editable_text_verse.rb +77 -0
- data/lib/kredki/pads/text/editable_text_verses.rb +59 -0
- data/lib/kredki/pads/text/navigable_text_pad.rb +413 -0
- data/lib/kredki/pads/text/text_edition.rb +97 -0
- data/lib/kredki/pads/text/text_navigation.rb +109 -0
- data/lib/kredki/pads/toolbar/item.rb +62 -0
- data/lib/kredki/pads/toolbar/item_group.rb +22 -0
- data/lib/kredki/pads/toolbar/layer.rb +41 -0
- data/lib/kredki/pads/toolbar/pad.rb +51 -0
- data/lib/kredki/pads/toolbar/primary_layer.rb +64 -0
- data/lib/kredki/pads/window.rb +11 -0
- data/lib/kredki/script.rb +29 -0
- data/lib/kredki/setup.rb +2 -0
- data/lib/kredki/test.rb +35 -0
- data/lib/kredki.rb +10 -0
- data/lib/readme.md +31 -0
- data/stuff/config/config.rb +431 -0
- data/stuff/config/pads_config.rb +111 -0
- data/stuff/dll/SDL3.dll +0 -0
- data/stuff/dll/pastele.dll +0 -0
- data/stuff/dll/thorvg-1.dll +0 -0
- data/stuff/font/MartianMono-StdRg.ttf +0 -0
- data/stuff/font/MavenPro-Medium.ttf +0 -0
- data/stuff/font/MavenPro-Regular.ttf +0 -0
- data/stuff/glyph/alert-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/alert-triangle-svgrepo-com.svg +12 -0
- data/stuff/glyph/archivebox-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-2-ccw-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-2-cw-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-2-rectangle-path-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-4-way-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-ccw-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-circle-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-circle-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-circle-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-circle-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-cw-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-from-line-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-from-line-left-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-from-line-right-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-from-line-up-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-from-shape-right-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-from-shape-up-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-right-arrow-left-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-shape-turn-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-shape-turn-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-small-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-small-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-small-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-small-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-thin-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-thin-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-thin-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-thin-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-to-line-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-to-line-left-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-to-line-right-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-to-line-up-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-to-shape-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-to-shape-right-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-trend-down-svgrepo-com.svg +12 -0
- data/stuff/glyph/arrow-trend-up-svgrepo-com.svg +12 -0
- data/stuff/glyph/arrow-turn-down-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-down-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-left-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-left-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-right-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-right-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-up-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-turn-up-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/arrow-up-arrow-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/arrow-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/at-sign-svgrepo-com.svg +4 -0
- data/stuff/glyph/bag-svgrepo-com.svg +4 -0
- data/stuff/glyph/bell-slash-svgrepo-com.svg +6 -0
- data/stuff/glyph/bell-svgrepo-com.svg +5 -0
- data/stuff/glyph/book-open-svgrepo-com.svg +5 -0
- data/stuff/glyph/bookmark-svgrepo-com.svg +4 -0
- data/stuff/glyph/box-svgrepo-com.svg +6 -0
- data/stuff/glyph/calendar-svgrepo-com.svg +5 -0
- data/stuff/glyph/camera-svgrepo-com.svg +4 -0
- data/stuff/glyph/caret-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/caret-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/caret-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/caret-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/cart-svgrepo-com.svg +6 -0
- data/stuff/glyph/chart-pie-svgrepo-com.svg +5 -0
- data/stuff/glyph/chartbar-2-svgrepo-com.svg +7 -0
- data/stuff/glyph/chartbar-svgrepo-com.svg +7 -0
- data/stuff/glyph/checkmark-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/checkmark-double-svgrepo-com.svg +5 -0
- data/stuff/glyph/checkmark-square-svgrepo-com.svg +4 -0
- data/stuff/glyph/checkmark-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-left-chevron-right-svgrepo-com.svg +5 -0
- data/stuff/glyph/chevron-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-small-down-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-small-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-small-right-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-small-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/chevron-up-chevron-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/chevron-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/clock-svgrepo-com.svg +4 -0
- data/stuff/glyph/cloud-arrow-up-svgrepo-com.svg +4 -0
- data/stuff/glyph/cloud-download-svgrepo-com.svg +4 -0
- data/stuff/glyph/cloud-slash-svgrepo-com.svg +5 -0
- data/stuff/glyph/cloud-svgrepo-com.svg +4 -0
- data/stuff/glyph/columns-svgrepo-com.svg +5 -0
- data/stuff/glyph/command-svgrepo-com.svg +4 -0
- data/stuff/glyph/compass-svgrepo-com.svg +5 -0
- data/stuff/glyph/credit-card-svgrepo-com.svg +5 -0
- data/stuff/glyph/crop-svgrepo-com.svg +5 -0
- data/stuff/glyph/crown-svgrepo-com.svg +4 -0
- data/stuff/glyph/delete-left-svgrepo-com.svg +4 -0
- data/stuff/glyph/device-desktop-svgrepo-com.svg +4 -0
- data/stuff/glyph/device-mobile-svgrepo-com.svg +4 -0
- data/stuff/glyph/device-tablet-svgrepo-com.svg +4 -0
- data/stuff/glyph/doc-svgrepo-com.svg +5 -0
- data/stuff/glyph/dot-small-svgrepo-com.svg +4 -0
- data/stuff/glyph/dots-3-horizontal-svgrepo-com.svg +6 -0
- data/stuff/glyph/dots-3-vertical-svgrepo-com.svg +6 -0
- data/stuff/glyph/dots-6-horizontal-svgrepo-com.svg +9 -0
- data/stuff/glyph/dots-6-vertical-svgrepo-com.svg +9 -0
- data/stuff/glyph/dots-9-svgrepo-com.svg +12 -0
- data/stuff/glyph/emoji-frown-svgrepo-com.svg +4 -0
- data/stuff/glyph/emoji-meh-svgrepo-com.svg +4 -0
- data/stuff/glyph/emoji-smile-svgrepo-com.svg +4 -0
- data/stuff/glyph/envelope-svgrepo-com.svg +5 -0
- data/stuff/glyph/external-link-svgrepo-com.svg +5 -0
- data/stuff/glyph/eye-slash-svgrepo-com.svg +15 -0
- data/stuff/glyph/eye-svgrepo-com.svg +4 -0
- data/stuff/glyph/filter-svgrepo-com.svg +4 -0
- data/stuff/glyph/flame-svgrepo-com.svg +4 -0
- data/stuff/glyph/floppy-disk-svgrepo-com.svg +4 -0
- data/stuff/glyph/folder-svgrepo-com.svg +4 -0
- data/stuff/glyph/fullscreen-alt-svgrepo-com.svg +7 -0
- data/stuff/glyph/fullscreen-exit-alt-svgrepo-com.svg +7 -0
- data/stuff/glyph/fullscreen-exit-svgrepo-com.svg +5 -0
- data/stuff/glyph/fullscreen-svgrepo-com.svg +5 -0
- data/stuff/glyph/gear-svgrepo-com.svg +4 -0
- data/stuff/glyph/giftbox-svgrepo-com.svg +6 -0
- data/stuff/glyph/half-star-svgrepo-com.svg +4 -0
- data/stuff/glyph/hashtag-svgrepo-com.svg +4 -0
- data/stuff/glyph/headphones-svgrepo-com.svg +4 -0
- data/stuff/glyph/heart-half-svgrepo-com.svg +4 -0
- data/stuff/glyph/heart-svgrepo-com.svg +4 -0
- data/stuff/glyph/house-svgrepo-com.svg +4 -0
- data/stuff/glyph/image-svgrepo-com.svg +4 -0
- data/stuff/glyph/info-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/key-svgrepo-com.svg +4 -0
- data/stuff/glyph/layers-3-svgrepo-com.svg +6 -0
- data/stuff/glyph/layout-svgrepo-com.svg +6 -0
- data/stuff/glyph/line-3-svgrepo-com.svg +6 -0
- data/stuff/glyph/link-alt-svgrepo-com.svg +5 -0
- data/stuff/glyph/link-svgrepo-com.svg +6 -0
- data/stuff/glyph/list-bullet-svgrepo-com.svg +9 -0
- data/stuff/glyph/location-svgrepo-com.svg +4 -0
- data/stuff/glyph/lock-open-svgrepo-com.svg +4 -0
- data/stuff/glyph/lock-svgrepo-com.svg +4 -0
- data/stuff/glyph/map-pin-svgrepo-com.svg +4 -0
- data/stuff/glyph/medal-svgrepo-com.svg +13 -0
- data/stuff/glyph/media-backward-end-svgrepo-com.svg +5 -0
- data/stuff/glyph/media-backward-svgrepo-com.svg +5 -0
- data/stuff/glyph/media-forward-end-svgrepo-com.svg +5 -0
- data/stuff/glyph/media-forward-svgrepo-com.svg +4 -0
- data/stuff/glyph/media-pause-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/media-pause-svgrepo-com.svg +5 -0
- data/stuff/glyph/media-play-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/media-play-svgrepo-com.svg +4 -0
- data/stuff/glyph/media-stop-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/media-stop-svgrepo-com.svg +4 -0
- data/stuff/glyph/message-bubble-2-svgrepo-com.svg +4 -0
- data/stuff/glyph/message-bubble-svgrepo-com.svg +4 -0
- data/stuff/glyph/mic-slash-svgrepo-com.svg +6 -0
- data/stuff/glyph/mic-svgrepo-com.svg +5 -0
- data/stuff/glyph/minus-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/minus-square-svgrepo-com.svg +4 -0
- data/stuff/glyph/minus-svgrepo-com.svg +4 -0
- data/stuff/glyph/moon-svgrepo-com.svg +4 -0
- data/stuff/glyph/music-note-svgrepo-com.svg +4 -0
- data/stuff/glyph/nosign-svgrepo-com.svg +4 -0
- data/stuff/glyph/paper-clip-svgrepo-com.svg +4 -0
- data/stuff/glyph/paper-plane-svgrepo-com.svg +4 -0
- data/stuff/glyph/pen-tool-svgrepo-com.svg +4 -0
- data/stuff/glyph/pencil-svgrepo-com.svg +5 -0
- data/stuff/glyph/percent-svgrepo-com.svg +6 -0
- data/stuff/glyph/phone-incoming-svgrepo-com.svg +5 -0
- data/stuff/glyph/phone-missed-svgrepo-com.svg +4 -0
- data/stuff/glyph/phone-outgoing-svgrepo-com.svg +5 -0
- data/stuff/glyph/phone-slash-svgrepo-com.svg +4 -0
- data/stuff/glyph/phone-svgrepo-com.svg +4 -0
- data/stuff/glyph/plus-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/plus-square-svgrepo-com.svg +4 -0
- data/stuff/glyph/plus-svgrepo-com.svg +4 -0
- data/stuff/glyph/power-svgrepo-com.svg +5 -0
- data/stuff/glyph/printer-svgrepo-com.svg +5 -0
- data/stuff/glyph/question-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/scissors-svgrepo-com.svg +5 -0
- data/stuff/glyph/search-svgrepo-com.svg +4 -0
- data/stuff/glyph/server-svgrepo-com.svg +5 -0
- data/stuff/glyph/shape-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/shape-rhombus-svgrepo-com.svg +4 -0
- data/stuff/glyph/shape-square-svgrepo-com.svg +4 -0
- data/stuff/glyph/shape-triangle-svgrepo-com.svg +12 -0
- data/stuff/glyph/share-svgrepo-com.svg +4 -0
- data/stuff/glyph/shield-slash-svgrepo-com.svg +13 -0
- data/stuff/glyph/shield-svgrepo-com.svg +4 -0
- data/stuff/glyph/shippingbox-svgrepo-com.svg +7 -0
- data/stuff/glyph/slider-3-horizontal-svgrepo-com.svg +9 -0
- data/stuff/glyph/slider-3-vertical-svgrepo-com.svg +9 -0
- data/stuff/glyph/speaker-svgrepo-com.svg +4 -0
- data/stuff/glyph/speaker-wave-1-svgrepo-com.svg +5 -0
- data/stuff/glyph/speaker-wave-2-svgrepo-com.svg +6 -0
- data/stuff/glyph/speaker-xmark-svgrepo-com.svg +5 -0
- data/stuff/glyph/square-4-grid-svgrepo-com.svg +7 -0
- data/stuff/glyph/square-on-square-svgrepo-com.svg +5 -0
- data/stuff/glyph/star-svgrepo-com.svg +4 -0
- data/stuff/glyph/sun-svgrepo-com.svg +12 -0
- data/stuff/glyph/tag-svgrepo-com.svg +4 -0
- data/stuff/glyph/text-align-center-svgrepo-com.svg +7 -0
- data/stuff/glyph/text-align-justify-svgrepo-com.svg +7 -0
- data/stuff/glyph/text-align-left-svgrepo-com.svg +7 -0
- data/stuff/glyph/text-align-right-svgrepo-com.svg +7 -0
- data/stuff/glyph/text-bold-svgrepo-com.svg +4 -0
- data/stuff/glyph/text-heading-svgrepo-com.svg +4 -0
- data/stuff/glyph/text-italic-svgrepo-com.svg +4 -0
- data/stuff/glyph/text-svgrepo-com.svg +4 -0
- data/stuff/glyph/text-underline-svgrepo-com.svg +5 -0
- data/stuff/glyph/thumbs-down-svgrepo-com.svg +5 -0
- data/stuff/glyph/thumbs-up-svgrepo-com.svg +5 -0
- data/stuff/glyph/trash-svgrepo-com.svg +5 -0
- data/stuff/glyph/tray-svgrepo-com.svg +4 -0
- data/stuff/glyph/umbrela-svgrepo-com.svg +4 -0
- data/stuff/glyph/user-svgrepo-com.svg +5 -0
- data/stuff/glyph/users-svgrepo-com.svg +7 -0
- data/stuff/glyph/video-svgrepo-com.svg +12 -0
- data/stuff/glyph/waveform-ecg-svgrepo-com.svg +4 -0
- data/stuff/glyph/wi-fi-svgrepo-com.svg +7 -0
- data/stuff/glyph/xmark-circle-svgrepo-com.svg +4 -0
- data/stuff/glyph/xmark-small-svgrepo-com.svg +4 -0
- data/stuff/glyph/xmark-svgrepo-com.svg +4 -0
- data/stuff/glyph/zap-svgrepo-com.svg +4 -0
- data/stuff/glyph/zoom-in-svgrepo-com.svg +5 -0
- data/stuff/glyph/zoom-out-svgrepo-com.svg +5 -0
- data/stuff/readme.md +266 -0
- data/stuff/so/libSDL3.so +0 -0
- data/stuff/so/libpastele.so +0 -0
- data/stuff/so/libthorvg-1.so +0 -0
- metadata +427 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in separated thread.
|
|
3
|
+
class SideJob < Job
|
|
4
|
+
|
|
5
|
+
# Run job.
|
|
6
|
+
def run host, event = nil
|
|
7
|
+
cancel
|
|
8
|
+
@host = host
|
|
9
|
+
@event = event || RunEvent.new(nil, nil, self)
|
|
10
|
+
@thread = Thread.new do
|
|
11
|
+
if RunEvent === @event
|
|
12
|
+
@block.call self, @event.source || @event, @event.result
|
|
13
|
+
else
|
|
14
|
+
@block.call self, @event
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
@host.put_job self
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Report some partial result.
|
|
21
|
+
def report &block
|
|
22
|
+
@host.job &block
|
|
23
|
+
nil # creating job tree in SideJob is not thread safe - nil returned to prevent such pattern
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Cancel job and all subjobs.
|
|
27
|
+
def cancel event = nil
|
|
28
|
+
@thread&.kill
|
|
29
|
+
@thread = nil
|
|
30
|
+
@host&.delete_job self
|
|
31
|
+
@event_manager.report event || CancelEvent.new
|
|
32
|
+
@host = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# :section: LEVEL 2
|
|
36
|
+
|
|
37
|
+
def initialize block
|
|
38
|
+
super()
|
|
39
|
+
@block = block
|
|
40
|
+
@threat = nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def inspect
|
|
44
|
+
"#{self.class}:#{object_id} #{@block}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def tick ms
|
|
48
|
+
if !@thread&.alive?
|
|
49
|
+
if RunEvent === @event
|
|
50
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
51
|
+
else
|
|
52
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
53
|
+
end
|
|
54
|
+
@host = nil
|
|
55
|
+
@event = nil
|
|
56
|
+
@result = nil
|
|
57
|
+
return false
|
|
58
|
+
end
|
|
59
|
+
true
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
# Raise invalid argument exception.
|
|
3
|
+
def raise_ia argument, message = nil
|
|
4
|
+
raise "Invalid argument #{argument.inspect}. #{message}"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# Raise invalid state exception.
|
|
8
|
+
def raise_is state
|
|
9
|
+
raise "Invalid state #{state.inspect}."
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# General purpose object altering.
|
|
13
|
+
def set *a, filter_keywords: false, **ka, &block
|
|
14
|
+
a.each{|it| self << it }
|
|
15
|
+
ka.each do |key, arg|
|
|
16
|
+
key = "#{key}=" if key =~ /^\w+$/
|
|
17
|
+
send key, arg if !filter_keywords || self.respond_to?(key)
|
|
18
|
+
end
|
|
19
|
+
instance_exec self, &block if block
|
|
20
|
+
self
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Parameter DSL helper.
|
|
24
|
+
def send_bundle method, param
|
|
25
|
+
if Array === param
|
|
26
|
+
if Hash === param.last
|
|
27
|
+
*a, h = param
|
|
28
|
+
send method, *a, **h
|
|
29
|
+
else
|
|
30
|
+
send method, *param
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
send method, param
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Another parameter DSL helper.
|
|
38
|
+
def send_branch root, branches, separator = "_"
|
|
39
|
+
branches.count{ send_bundle "#{root}#{separator}#{_1}", _2 }.nonzero?
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Symbol
|
|
44
|
+
alias_method :old_cmp, :<=>
|
|
45
|
+
|
|
46
|
+
# For DSL purposes ex. size_x_limit: Fit..1r .
|
|
47
|
+
def <=> that
|
|
48
|
+
Numeric === that ? 0 : old_cmp(that)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
module Enumerable
|
|
53
|
+
# General purpose enumerable objects altering.
|
|
54
|
+
def each_set ...
|
|
55
|
+
each{|it| it.set(...) }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class TrueClass
|
|
60
|
+
# Negation.
|
|
61
|
+
def not
|
|
62
|
+
false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class FalseClass
|
|
67
|
+
# Negation.
|
|
68
|
+
def not
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
|
|
3
|
+
module Util
|
|
4
|
+
class << self
|
|
5
|
+
|
|
6
|
+
def eqr a, b
|
|
7
|
+
a == b and (Rational === a) == (Rational === b)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def polarize left, right
|
|
11
|
+
both = []
|
|
12
|
+
right_only = right.reject{|it| both << it if left.include? it }
|
|
13
|
+
[left - both, both, right_only]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def uncover array
|
|
17
|
+
case array.size
|
|
18
|
+
when 0 then nil
|
|
19
|
+
when 1 then array.first
|
|
20
|
+
else array
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def cover object
|
|
25
|
+
object.is_a?(Array) ? object : [object]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def sin01 value, offset = 0
|
|
29
|
+
Math.sin(0.5 * Math::PI * value) + offset
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def cos01 value, offset = 0
|
|
33
|
+
Math.cos(0.5 * Math::PI * value) + offset
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
require_relative 'pastele/pastele'
|
|
40
|
+
|
|
41
|
+
require_relative 'event/event'
|
|
42
|
+
require_relative 'event/family/pastele_event'
|
|
43
|
+
require_relative 'event/family/focus_enter_event'
|
|
44
|
+
require_relative 'event/family/focus_leave_event'
|
|
45
|
+
require_relative 'event/family/show_event'
|
|
46
|
+
require_relative 'event/family/hide_event'
|
|
47
|
+
require_relative 'event/family/drop_event'
|
|
48
|
+
require_relative 'event/family/key_event'
|
|
49
|
+
require_relative 'event/family/mouse_event'
|
|
50
|
+
require_relative 'event/family/tick_event'
|
|
51
|
+
require_relative 'event/family/update_complete_event'
|
|
52
|
+
require_relative 'event/family/exit_event'
|
|
53
|
+
require_relative 'event/family/text_event'
|
|
54
|
+
require_relative 'event/family/window_event'
|
|
55
|
+
require_relative 'event/family/joystick_event'
|
|
56
|
+
|
|
57
|
+
require_relative 'paint/paint'
|
|
58
|
+
require_relative 'paint/shape'
|
|
59
|
+
require_relative 'paint/scene'
|
|
60
|
+
require_relative 'paint/area'
|
|
61
|
+
require_relative 'paint/shape_area'
|
|
62
|
+
require_relative 'paint/block_shape_area'
|
|
63
|
+
require_relative 'paint/ellipse'
|
|
64
|
+
require_relative 'paint/rectangle'
|
|
65
|
+
require_relative 'paint/text'
|
|
66
|
+
require_relative 'paint/picture'
|
|
67
|
+
require_relative 'paint/animation'
|
|
68
|
+
|
|
69
|
+
require_relative 'job/job'
|
|
70
|
+
require_relative 'job/after_job'
|
|
71
|
+
require_relative 'job/loop_job'
|
|
72
|
+
require_relative 'job/side_job'
|
|
73
|
+
require_relative 'job/play_loop_job'
|
|
74
|
+
require_relative 'job/play_job'
|
|
75
|
+
require_relative 'job/play_loop_animation_job'
|
|
76
|
+
require_relative 'job/play_animation_job'
|
|
77
|
+
|
|
78
|
+
require_relative 'event/event_manager'
|
|
79
|
+
require_relative 'event/keyboard_event_manager'
|
|
80
|
+
require_relative 'event/mouse_event_manager'
|
|
81
|
+
require_relative 'event/joystick_event_manager'
|
|
82
|
+
|
|
83
|
+
require_relative 'window/pane'
|
|
84
|
+
require_relative 'window/window'
|
|
85
|
+
require_relative 'application'
|
|
86
|
+
|
|
87
|
+
Kredki.app = Kredki::Application
|
|
88
|
+
|
|
89
|
+
load Kredki.config
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
class LinearGradient
|
|
3
|
+
|
|
4
|
+
def initialize colors, ex, ey = 0, x = 0, y = 0, offsets: nil, spread: nil
|
|
5
|
+
@x = x
|
|
6
|
+
@y = y
|
|
7
|
+
@ex = ex
|
|
8
|
+
@ey = ey
|
|
9
|
+
@colors = colors
|
|
10
|
+
@offsets = offsets
|
|
11
|
+
@spread = spread
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.[](...)
|
|
15
|
+
self.new(...)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# :section: LEVEL 2
|
|
19
|
+
|
|
20
|
+
def inspect
|
|
21
|
+
"#{self.class}:#{object_id}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def ffi
|
|
25
|
+
rgbas = @colors.map{|color| Kredki.color(color).to_rgba }.flatten
|
|
26
|
+
offsets = @offsets || (0...@colors.size).map{|it| it.to_f / (@colors.size - 1) }
|
|
27
|
+
spread = case @spread
|
|
28
|
+
when :pad, nil, 0 then 0
|
|
29
|
+
when :reflect, 1 then 1
|
|
30
|
+
when :repeat, 2 then 2
|
|
31
|
+
else raise_is @spread
|
|
32
|
+
end
|
|
33
|
+
[
|
|
34
|
+
@x, @y, @ex, @ey,
|
|
35
|
+
Fiddle::Pointer[rgbas.pack "C*"],
|
|
36
|
+
Fiddle::Pointer[offsets.pack "f*"],
|
|
37
|
+
@colors.size,
|
|
38
|
+
spread
|
|
39
|
+
]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end#LinearGradient
|
|
43
|
+
end#Kredki
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Clipboard interface.
|
|
3
|
+
class Clipboard
|
|
4
|
+
|
|
5
|
+
# Set content.
|
|
6
|
+
def set_content content = nil
|
|
7
|
+
return set_content yield self.content if block_given?
|
|
8
|
+
Pastele.clipboard_set_text content.to_s
|
|
9
|
+
true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# See #set_content.
|
|
13
|
+
def content= param
|
|
14
|
+
set_content param
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Get content.
|
|
18
|
+
def content
|
|
19
|
+
ptr = Pastele.clipboard_get_text
|
|
20
|
+
str = ptr.to_s.force_encoding("utf-8")
|
|
21
|
+
ptr.free
|
|
22
|
+
return str
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Get available mime types in clipboard.
|
|
26
|
+
def mime_types
|
|
27
|
+
mime_types = []
|
|
28
|
+
callback = Fiddle::Closure::BlockCaller.new Fiddle::TYPE_VOID, [Fiddle::TYPE_VOIDP] do |pointer|
|
|
29
|
+
mime_types << pointer.to_s
|
|
30
|
+
end
|
|
31
|
+
Pastele.clipboard_get_mime_types callback
|
|
32
|
+
mime_types
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Joystick device interface.
|
|
3
|
+
class Joystick
|
|
4
|
+
# Joystick button interface.
|
|
5
|
+
class Button
|
|
6
|
+
|
|
7
|
+
# Get button id.
|
|
8
|
+
def id
|
|
9
|
+
@id
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Get button code.
|
|
13
|
+
def code
|
|
14
|
+
@code
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# :section: LEVEL 2
|
|
18
|
+
|
|
19
|
+
def initialize id, code
|
|
20
|
+
@id = id
|
|
21
|
+
@code = code
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def ==(other)
|
|
25
|
+
Button === other &&
|
|
26
|
+
@code == other.code &&
|
|
27
|
+
@id == other.id
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Joystick axis interface.
|
|
32
|
+
class Axis
|
|
33
|
+
# Get axis id.
|
|
34
|
+
def id
|
|
35
|
+
@id
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Get axis code.
|
|
39
|
+
def code
|
|
40
|
+
@code
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# :section: LEVEL 2
|
|
44
|
+
|
|
45
|
+
def initialize id, code
|
|
46
|
+
@id = id
|
|
47
|
+
@code = code
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def ==(other)
|
|
51
|
+
Axis === other &&
|
|
52
|
+
@code == other.code &&
|
|
53
|
+
@id == other.id
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Joystick hat interface.
|
|
58
|
+
class Hat
|
|
59
|
+
# Get hat id.
|
|
60
|
+
def id
|
|
61
|
+
@id
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Get hat code.
|
|
65
|
+
def code
|
|
66
|
+
@code
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Set state.
|
|
70
|
+
def state! id, code
|
|
71
|
+
@state_map[id] = @statecode_map[code] = id
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Get state.
|
|
75
|
+
def state param
|
|
76
|
+
@statecode_map[param] or @state_map[param]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# :section: LEVEL 2
|
|
80
|
+
|
|
81
|
+
def initialize id, code
|
|
82
|
+
@id = id
|
|
83
|
+
@code = code
|
|
84
|
+
@state_map = {}
|
|
85
|
+
@statecode_map = {}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def ==(other)
|
|
89
|
+
Hat === other &&
|
|
90
|
+
@code == other.code &&
|
|
91
|
+
@id == other.id
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Get button codes for input.
|
|
96
|
+
def buttons input
|
|
97
|
+
input.flatten.map{ button(_1).code }.uniq
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Get axis codes for input.
|
|
101
|
+
def axes input
|
|
102
|
+
input.flatten.map{ axis(_1).code }.uniq
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Get hat codes for input.
|
|
106
|
+
def hats input
|
|
107
|
+
input.flatten.map{ hat(_1).code }.uniq
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Set button.
|
|
111
|
+
def button! id, code
|
|
112
|
+
@button_map[id] = @buttoncode_map[code] = Button.new id, code
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Get button.
|
|
116
|
+
def button param
|
|
117
|
+
case param
|
|
118
|
+
when Button
|
|
119
|
+
param
|
|
120
|
+
else
|
|
121
|
+
@buttoncode_map[param] or @button_map[param]
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Set axis.
|
|
126
|
+
def axis! id, code
|
|
127
|
+
@axis_map[id] = @axiscode_map[code] = Axis.new id, code
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Get axis.
|
|
131
|
+
def axis param
|
|
132
|
+
case param
|
|
133
|
+
when Axis
|
|
134
|
+
param
|
|
135
|
+
else
|
|
136
|
+
@axiscode_map[param] or @axis_map[param]
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Set hat.
|
|
141
|
+
def hat! id, code, &block
|
|
142
|
+
@hat_map[id] = @hatcode_map[code] = Hat.new(id, code).set &block
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Get hat.
|
|
146
|
+
def hat param
|
|
147
|
+
case param
|
|
148
|
+
when Hat
|
|
149
|
+
param
|
|
150
|
+
else
|
|
151
|
+
@hatcode_map[param] or @hat_map[param]
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Get whether button is pressed.
|
|
156
|
+
def pressed? key
|
|
157
|
+
return nil if !opened?
|
|
158
|
+
button = button key
|
|
159
|
+
Pastele.joystick_get_button_state(@device_id, button.code) != 0 if button
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Get axis value.
|
|
163
|
+
def value key
|
|
164
|
+
return nil if !opened?
|
|
165
|
+
axis = axis key
|
|
166
|
+
Pastele.joystick_get_axis_value @device_id, axis.code if axis
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Get whether joystick is opened.
|
|
170
|
+
def opened?
|
|
171
|
+
!!@device_id
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# :section: LEVEL 2
|
|
175
|
+
|
|
176
|
+
@@next_name = :joystick_1
|
|
177
|
+
|
|
178
|
+
def initialize
|
|
179
|
+
@button_map = {}
|
|
180
|
+
@buttoncode_map = {}
|
|
181
|
+
@axis_map = {}
|
|
182
|
+
@axiscode_map = {}
|
|
183
|
+
@hat_map = {}
|
|
184
|
+
@hatcode_map = {}
|
|
185
|
+
@device_id = nil
|
|
186
|
+
if @name.nil?
|
|
187
|
+
@name = @@next_name
|
|
188
|
+
@@next_name = @@next_name.next
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def match device_index
|
|
193
|
+
0
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
attr_accessor :device_id
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
module Kredki
|
|
3
|
+
# Keyboard device interface.
|
|
4
|
+
class Keyboard
|
|
5
|
+
include ModifiersDecoder
|
|
6
|
+
|
|
7
|
+
# Keyboard key interface.
|
|
8
|
+
class Key
|
|
9
|
+
|
|
10
|
+
# Get key id.
|
|
11
|
+
def id
|
|
12
|
+
@id
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Get key code.
|
|
16
|
+
def keycode
|
|
17
|
+
@keycode
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# :section: LEVEL 2
|
|
21
|
+
|
|
22
|
+
def initialize id, keycode
|
|
23
|
+
@id = id
|
|
24
|
+
@keycode = keycode
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def ==(other)
|
|
28
|
+
Key === other &&
|
|
29
|
+
@keycode == other.keycode &&
|
|
30
|
+
@id == other.id
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Get keycodes for input.
|
|
35
|
+
def keycodes input
|
|
36
|
+
input.flatten.map{ _1.is_a?(String) ? _1.downcase.codepoints : _1 }.flatten.map{ key(_1).keycode }.uniq
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Set key.
|
|
40
|
+
def key! id, keycode
|
|
41
|
+
@key_map[id] = @keycode_map[keycode] = Key.new id, keycode
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Get key.
|
|
45
|
+
def key param
|
|
46
|
+
case param
|
|
47
|
+
when Key
|
|
48
|
+
param
|
|
49
|
+
when String
|
|
50
|
+
key param.to_sym
|
|
51
|
+
else
|
|
52
|
+
@keycode_map[param] or @key_map[param]
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Get whether key is pressed.
|
|
57
|
+
def pressed? param
|
|
58
|
+
Pastele.keyboard_get_key_state(key(param).keycode) != 0
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# :section: LEVEL 2
|
|
62
|
+
|
|
63
|
+
def initialize
|
|
64
|
+
@key_map = {}
|
|
65
|
+
@keycode_map = {}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def inspect
|
|
69
|
+
"#{self.class}:#{object_id}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def modifiers
|
|
73
|
+
Pastele.keyboard_get_mod_state
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def key_press_event pastele_event
|
|
77
|
+
KeyboardKeyPressEvent.new self, pastele_event
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def key_release_event pastele_event
|
|
81
|
+
KeyboardKeyReleaseEvent.new self, pastele_event
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|