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,46 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Method based event reaction.
|
|
3
|
+
class MethodEventReaction < EventReaction
|
|
4
|
+
|
|
5
|
+
# Attach copy of reaction to another manager.
|
|
6
|
+
def attach manager, always = false
|
|
7
|
+
self.class.new @method, manager, always
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Cancel reaction.
|
|
11
|
+
def cancel
|
|
12
|
+
super
|
|
13
|
+
@method = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# :section: LEVEL 2
|
|
17
|
+
|
|
18
|
+
def initialize method, ...
|
|
19
|
+
super(...)
|
|
20
|
+
@method = method
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_accessor :method
|
|
24
|
+
|
|
25
|
+
def call event = nil
|
|
26
|
+
return if !@always && event&.closed?
|
|
27
|
+
event&.reaction = self
|
|
28
|
+
begin
|
|
29
|
+
@method.call event
|
|
30
|
+
rescue => e
|
|
31
|
+
res = Kredki.app.rescue
|
|
32
|
+
if res
|
|
33
|
+
res.call e, event
|
|
34
|
+
else
|
|
35
|
+
raise inspect
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def inspect
|
|
41
|
+
"#{self.class}:#{object_id} #{@method.source_location}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Manage mouse events managers.
|
|
3
|
+
class MouseEventManager
|
|
4
|
+
|
|
5
|
+
# :section: LEVEL 2
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@managers = {}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def report event
|
|
12
|
+
id = event.code and @managers[id]&.report event
|
|
13
|
+
@managers[nil]&.report event
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def [](*ids)
|
|
17
|
+
case ids.size
|
|
18
|
+
when 0
|
|
19
|
+
@managers[nil] ||= EventManager.new
|
|
20
|
+
when 1
|
|
21
|
+
@managers[ids.first] ||= EventManager.new
|
|
22
|
+
else
|
|
23
|
+
CompositeEventManager.new ids.map{|it| @managers[it] ||= EventManager.new }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Immutable font model
|
|
3
|
+
class Font
|
|
4
|
+
|
|
5
|
+
# Get name.
|
|
6
|
+
def name
|
|
7
|
+
unless @loaded
|
|
8
|
+
@name = Font.load path
|
|
9
|
+
@loaded = true
|
|
10
|
+
end
|
|
11
|
+
@name
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Get path.
|
|
15
|
+
def path
|
|
16
|
+
@path
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# :section: LEVEL 2
|
|
20
|
+
|
|
21
|
+
def initialize path
|
|
22
|
+
@path = path
|
|
23
|
+
@loaded = false
|
|
24
|
+
@name = nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class << self
|
|
28
|
+
attr_accessor :loaded_fonts
|
|
29
|
+
|
|
30
|
+
def load path
|
|
31
|
+
name = path_to_name path
|
|
32
|
+
loaded = loaded_fonts[name]
|
|
33
|
+
return name if loaded == path
|
|
34
|
+
unload name if loaded
|
|
35
|
+
Pastele.font_load path
|
|
36
|
+
loaded_fonts[name] = path
|
|
37
|
+
name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def unload font
|
|
41
|
+
name = String === font ? font : font.name
|
|
42
|
+
path = loaded_fonts.delete name
|
|
43
|
+
Pastele.font_unload name if path
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def path_to_name path
|
|
47
|
+
path.split("/").last.split(".").first
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
self.loaded_fonts = {}
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed after 0 or more milisecond delay.
|
|
3
|
+
class AfterJob < 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
|
+
@run_ms = @host.app.ms + @delay
|
|
11
|
+
@host.put_job self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Cancel job and all subjobs.
|
|
15
|
+
def cancel event = nil
|
|
16
|
+
@host&.delete_job self
|
|
17
|
+
@event_manager.report event || CancelEvent.new
|
|
18
|
+
@host = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# :section: LEVEL 2
|
|
22
|
+
|
|
23
|
+
def initialize block, delay
|
|
24
|
+
super()
|
|
25
|
+
@block = block
|
|
26
|
+
@delay = delay
|
|
27
|
+
@run_ms = 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def inspect
|
|
31
|
+
"#{self.class}:#{object_id} #{@block}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def tick ms
|
|
35
|
+
dms = ms - @run_ms
|
|
36
|
+
if dms >= 0
|
|
37
|
+
if RunEvent === @event
|
|
38
|
+
if @block
|
|
39
|
+
result = @block.call self, @event.source || @event, @event.result
|
|
40
|
+
else
|
|
41
|
+
result = @event.result
|
|
42
|
+
end
|
|
43
|
+
@event_manager.report RunEvent.new result, @event.source || nil, @host
|
|
44
|
+
else
|
|
45
|
+
if @block
|
|
46
|
+
result = @block.call self, @event
|
|
47
|
+
else
|
|
48
|
+
result = nil
|
|
49
|
+
end
|
|
50
|
+
@event_manager.report RunEvent.new result, @event, @host
|
|
51
|
+
end
|
|
52
|
+
@host = nil
|
|
53
|
+
@event = nil
|
|
54
|
+
return false
|
|
55
|
+
end
|
|
56
|
+
true
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Base class for jobs.
|
|
3
|
+
class Job
|
|
4
|
+
|
|
5
|
+
# Create and attach job after.
|
|
6
|
+
def after delay = 0, &block
|
|
7
|
+
case delay
|
|
8
|
+
when Numeric
|
|
9
|
+
job = AfterJob.new block, delay
|
|
10
|
+
@event_manager << job
|
|
11
|
+
job
|
|
12
|
+
when Job
|
|
13
|
+
@event_manager << delay
|
|
14
|
+
delay
|
|
15
|
+
when Proc
|
|
16
|
+
job = AfterJob.new delay, 0
|
|
17
|
+
@event_manager << job
|
|
18
|
+
job
|
|
19
|
+
else raise_ia delay
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Create and attach Kredki::LoopJob.
|
|
24
|
+
def loop period = 0, &block
|
|
25
|
+
after LoopJob.new block, period
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Create and attach Kredki::SideJob.
|
|
29
|
+
def side &block
|
|
30
|
+
after SideJob.new block
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Create and attach play job.
|
|
34
|
+
def play subject, speed: 1, &block
|
|
35
|
+
case subject
|
|
36
|
+
when Numeric
|
|
37
|
+
after PlayJob.new block, subject, speed
|
|
38
|
+
else
|
|
39
|
+
after PlayAnimationJob.new block, subject, speed
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Create and attach play in loop job.
|
|
44
|
+
def play_loop subject, speed: 1, &block
|
|
45
|
+
case subject
|
|
46
|
+
when Numeric
|
|
47
|
+
after PlayLoopJob.new block, subject, speed
|
|
48
|
+
else
|
|
49
|
+
after PlayLoopAnimationJob.new block, subject, speed
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Push job after.
|
|
54
|
+
def << job
|
|
55
|
+
after job
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# Get event.
|
|
60
|
+
def event
|
|
61
|
+
@event
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Get host.
|
|
65
|
+
def host
|
|
66
|
+
@host
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Release result.
|
|
70
|
+
def release result = nil
|
|
71
|
+
@result = result
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# :section: LEVEL 2
|
|
75
|
+
|
|
76
|
+
class RunEvent < Event
|
|
77
|
+
def initialize result, ...
|
|
78
|
+
super(...)
|
|
79
|
+
@result = result
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def result
|
|
83
|
+
@result
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
class CancelEvent < Event
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def initialize
|
|
91
|
+
@event_manager = EventManager.new
|
|
92
|
+
@host = nil
|
|
93
|
+
@event = nil
|
|
94
|
+
@result = nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def call event
|
|
98
|
+
case event
|
|
99
|
+
when RunEvent
|
|
100
|
+
run event.target, event
|
|
101
|
+
when CancelEvent
|
|
102
|
+
cancel event
|
|
103
|
+
else
|
|
104
|
+
run event.target.pane, event
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in a loop.
|
|
3
|
+
class LoopJob < Job
|
|
4
|
+
|
|
5
|
+
# Get last iteration duration in milliseconds.
|
|
6
|
+
def ms
|
|
7
|
+
@ms
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get total duration in milliseconds.
|
|
11
|
+
def total_ms
|
|
12
|
+
@total_ms
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Release job.
|
|
16
|
+
def release result = nil
|
|
17
|
+
super
|
|
18
|
+
@released = true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Run job.
|
|
22
|
+
def run host, event = nil
|
|
23
|
+
cancel
|
|
24
|
+
@host = host
|
|
25
|
+
@event = event || RunEvent.new(nil, nil, self)
|
|
26
|
+
@next_ms = @host.app.ms
|
|
27
|
+
@total_ms = 0
|
|
28
|
+
@host.put_job self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Cancel job and all subjobs.
|
|
32
|
+
def cancel event = nil
|
|
33
|
+
@host&.delete_job self
|
|
34
|
+
@event_manager.report event || CancelEvent.new
|
|
35
|
+
@host = nil
|
|
36
|
+
@result = nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# :section: LEVEL 2
|
|
40
|
+
|
|
41
|
+
def initialize block, period
|
|
42
|
+
super()
|
|
43
|
+
@block = block
|
|
44
|
+
@period = period
|
|
45
|
+
@next_ms = 0
|
|
46
|
+
@released = false
|
|
47
|
+
@ms = nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def inspect
|
|
51
|
+
"#{self.class}:#{object_id} #{@block}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def tick ms
|
|
55
|
+
dms = ms - @next_ms
|
|
56
|
+
if dms >= 0
|
|
57
|
+
unless @released
|
|
58
|
+
@ms = dms + @period
|
|
59
|
+
@total_ms += @ms
|
|
60
|
+
if RunEvent === @event
|
|
61
|
+
@block.call self, @event.source || @event, @event.result
|
|
62
|
+
else
|
|
63
|
+
@block.call self, @event
|
|
64
|
+
end
|
|
65
|
+
if @period > 0
|
|
66
|
+
@next_ms += @period * (1 + dms / @period)
|
|
67
|
+
else
|
|
68
|
+
@next_ms += dms
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
if @released
|
|
72
|
+
@released = false
|
|
73
|
+
if RunEvent === @event
|
|
74
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
75
|
+
else
|
|
76
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
77
|
+
end
|
|
78
|
+
@host = nil
|
|
79
|
+
@event = nil
|
|
80
|
+
@result = nil
|
|
81
|
+
return false
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
true
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in a loop.
|
|
3
|
+
class PlayAnimationJob < PlayLoopAnimationJob
|
|
4
|
+
|
|
5
|
+
# Get play progress.
|
|
6
|
+
def progress
|
|
7
|
+
progress = @total_ms * @speed / @period
|
|
8
|
+
progress > 1 ? 1.0 : progress
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def tick ms
|
|
12
|
+
dms = ms - @next_ms
|
|
13
|
+
if dms >= 0
|
|
14
|
+
unless @released
|
|
15
|
+
@ms = dms
|
|
16
|
+
@total_ms += @ms
|
|
17
|
+
if !@block
|
|
18
|
+
frame = progress
|
|
19
|
+
elsif RunEvent === @event
|
|
20
|
+
frame = @block.call self, @event.source || @event, @event.result
|
|
21
|
+
else
|
|
22
|
+
frame = @block.call self, @event
|
|
23
|
+
end
|
|
24
|
+
@animation.set_frame frame if frame
|
|
25
|
+
@next_ms += dms
|
|
26
|
+
end
|
|
27
|
+
release if !@released && @animation.duration <= @total_ms
|
|
28
|
+
if @released
|
|
29
|
+
@released = false
|
|
30
|
+
if RunEvent === @event
|
|
31
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
32
|
+
else
|
|
33
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
34
|
+
end
|
|
35
|
+
@host = nil
|
|
36
|
+
@event = nil
|
|
37
|
+
@result = nil
|
|
38
|
+
return false
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in a loop.
|
|
3
|
+
class PlayJob < PlayLoopJob
|
|
4
|
+
|
|
5
|
+
# Get play progress.
|
|
6
|
+
def progress
|
|
7
|
+
progress = @total_ms * @speed / @duration
|
|
8
|
+
progress > 1 ? 1.0 : progress
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def tick ms
|
|
12
|
+
dms = ms - @next_ms
|
|
13
|
+
if dms >= 0
|
|
14
|
+
unless @released
|
|
15
|
+
@ms = dms
|
|
16
|
+
@total_ms += @ms
|
|
17
|
+
if RunEvent === @event
|
|
18
|
+
@block.call self, @event.source || @event, @event.result
|
|
19
|
+
else
|
|
20
|
+
@block.call self, @event
|
|
21
|
+
end
|
|
22
|
+
@next_ms += dms
|
|
23
|
+
end
|
|
24
|
+
release if !@released && @duration <= @total_ms
|
|
25
|
+
if @released
|
|
26
|
+
@released = false
|
|
27
|
+
if RunEvent === @event
|
|
28
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
29
|
+
else
|
|
30
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
31
|
+
end
|
|
32
|
+
@host = nil
|
|
33
|
+
@event = nil
|
|
34
|
+
@result = nil
|
|
35
|
+
return false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in a loop.
|
|
3
|
+
class PlayLoopAnimationJob < Job
|
|
4
|
+
|
|
5
|
+
# Get the period between the last two iterations in milliseconds.
|
|
6
|
+
def ms
|
|
7
|
+
@ms
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get the period between the first and the last iteration in milliseconds.
|
|
11
|
+
def total_ms
|
|
12
|
+
@total_ms
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Get play progress.
|
|
16
|
+
def progress period = nil
|
|
17
|
+
duration = @animation.duration
|
|
18
|
+
if period == true
|
|
19
|
+
@total_ms * @speed % duration / duration
|
|
20
|
+
else
|
|
21
|
+
total_progress = @total_ms * @speed / duration
|
|
22
|
+
period ? total_progress - (total_progress / period).floor * period : total_progress
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Release job.
|
|
27
|
+
def release result = nil
|
|
28
|
+
super
|
|
29
|
+
@released = true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Run job.
|
|
33
|
+
def run host, event = nil
|
|
34
|
+
cancel
|
|
35
|
+
@host = host
|
|
36
|
+
@event = event || RunEvent.new(nil, nil, self)
|
|
37
|
+
@next_ms = @host.app.ms
|
|
38
|
+
@total_ms = 0
|
|
39
|
+
@host.put_job self
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Cancel job and all subjobs.
|
|
43
|
+
def cancel event = nil
|
|
44
|
+
@host&.delete_job self
|
|
45
|
+
@event_manager.report event || CancelEvent.new
|
|
46
|
+
@host = nil
|
|
47
|
+
@result = nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# :section: LEVEL 2
|
|
51
|
+
|
|
52
|
+
def initialize block, animation, speed
|
|
53
|
+
super()
|
|
54
|
+
@block = block
|
|
55
|
+
@animation = animation
|
|
56
|
+
@speed = speed
|
|
57
|
+
@next_ms = 0
|
|
58
|
+
@released = false
|
|
59
|
+
@ms = nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def inspect
|
|
63
|
+
"#{self.class}:#{object_id} #{@block}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def tick ms
|
|
67
|
+
dms = ms - @next_ms
|
|
68
|
+
if dms >= 0
|
|
69
|
+
unless @released
|
|
70
|
+
@ms = dms
|
|
71
|
+
@total_ms += @ms
|
|
72
|
+
if !@block
|
|
73
|
+
frame = progress true
|
|
74
|
+
elsif RunEvent === @event
|
|
75
|
+
frame = @block.call self, @event.source || @event, @event.result
|
|
76
|
+
else
|
|
77
|
+
frame = @block.call self, @event
|
|
78
|
+
end
|
|
79
|
+
@animation.set_frame frame if frame
|
|
80
|
+
@next_ms += dms
|
|
81
|
+
end
|
|
82
|
+
if @released
|
|
83
|
+
@released = false
|
|
84
|
+
if RunEvent === @event
|
|
85
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
86
|
+
else
|
|
87
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
88
|
+
end
|
|
89
|
+
@host = nil
|
|
90
|
+
@event = nil
|
|
91
|
+
@result = nil
|
|
92
|
+
return false
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
true
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Job executed in a loop.
|
|
3
|
+
class PlayLoopJob < Job
|
|
4
|
+
|
|
5
|
+
# Get the period between the last two iterations in milliseconds.
|
|
6
|
+
def ms
|
|
7
|
+
@ms
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Get the period between the first and the last iteration in milliseconds.
|
|
11
|
+
def total_ms
|
|
12
|
+
@total_ms
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Get play progress.
|
|
16
|
+
def progress period = nil
|
|
17
|
+
if period == true
|
|
18
|
+
@total_ms * @speed % @duration / @duration
|
|
19
|
+
else
|
|
20
|
+
total_progress = @total_ms * @speed / @duration
|
|
21
|
+
period ? total_progress - (total_progress / period).floor * period : total_progress
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Get animation progress
|
|
26
|
+
def progress clamp = false
|
|
27
|
+
if clamp
|
|
28
|
+
@total_ms % @duration / @duration
|
|
29
|
+
else
|
|
30
|
+
@total_ms / @duration
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Release job.
|
|
35
|
+
def release result = nil
|
|
36
|
+
super
|
|
37
|
+
@released = true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Run job.
|
|
41
|
+
def run host, event = nil
|
|
42
|
+
cancel
|
|
43
|
+
@host = host
|
|
44
|
+
@event = event || RunEvent.new(nil, nil, self)
|
|
45
|
+
@next_ms = @host.app.ms
|
|
46
|
+
@total_ms = 0
|
|
47
|
+
@host.put_job self
|
|
48
|
+
release if @duration <= 0
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Cancel job and all subjobs.
|
|
52
|
+
def cancel event = nil
|
|
53
|
+
@host&.delete_job self
|
|
54
|
+
@event_manager.report event || CancelEvent.new
|
|
55
|
+
@host = nil
|
|
56
|
+
@result = nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# :section: LEVEL 2
|
|
60
|
+
|
|
61
|
+
def initialize block, duration, speed
|
|
62
|
+
super()
|
|
63
|
+
@block = block
|
|
64
|
+
@duration = duration
|
|
65
|
+
@speed = speed
|
|
66
|
+
@next_ms = 0
|
|
67
|
+
@released = false
|
|
68
|
+
@ms = nil
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def inspect
|
|
72
|
+
"#{self.class}:#{object_id} #{@block}"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def tick ms
|
|
76
|
+
dms = ms - @next_ms
|
|
77
|
+
if dms >= 0
|
|
78
|
+
unless @released
|
|
79
|
+
@ms = dms
|
|
80
|
+
@total_ms += @ms
|
|
81
|
+
if RunEvent === @event
|
|
82
|
+
@block.call self, @event.source || @event, @event.result
|
|
83
|
+
else
|
|
84
|
+
@block.call self, @event
|
|
85
|
+
end
|
|
86
|
+
@next_ms += dms
|
|
87
|
+
end
|
|
88
|
+
if @released
|
|
89
|
+
@released = false
|
|
90
|
+
if RunEvent === @event
|
|
91
|
+
@event_manager.report RunEvent.new @result, @event.source || nil, @host
|
|
92
|
+
else
|
|
93
|
+
@event_manager.report RunEvent.new @result, @event, @host
|
|
94
|
+
end
|
|
95
|
+
@host = nil
|
|
96
|
+
@event = nil
|
|
97
|
+
@result = nil
|
|
98
|
+
return false
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
true
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|