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,248 @@
|
|
|
1
|
+
require 'weakref'
|
|
2
|
+
require_relative 'service_event_manager'
|
|
3
|
+
require_relative 'service_inherited'
|
|
4
|
+
require_relative 'service_filter'
|
|
5
|
+
|
|
6
|
+
module Kredki
|
|
7
|
+
module Pads
|
|
8
|
+
# Base class of Pads tree nodes.
|
|
9
|
+
class Service
|
|
10
|
+
extend ServiceInherited
|
|
11
|
+
include ServiceFilter
|
|
12
|
+
|
|
13
|
+
# Get lower services.
|
|
14
|
+
def lower_iterator include_self = true
|
|
15
|
+
Enumerator.new do |e|
|
|
16
|
+
c = include_self ? self : lower
|
|
17
|
+
while c && !c.is(Pane)
|
|
18
|
+
e << c
|
|
19
|
+
c = c.lower
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Get service layer.
|
|
25
|
+
def layer
|
|
26
|
+
is Layer or find_lower Layer
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Get service pane.
|
|
30
|
+
def pane
|
|
31
|
+
layer&.lower_pad
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Get service window.
|
|
35
|
+
def window
|
|
36
|
+
pane&.window
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Get service application.
|
|
40
|
+
def app
|
|
41
|
+
window&.app
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Get whether +lower+ is lower service of +self+.
|
|
45
|
+
def in? lower
|
|
46
|
+
lower_iterator(false).include? lower
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Get whether +upper+ is upper service of +self+.
|
|
50
|
+
def include? upper
|
|
51
|
+
upper.in? self
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Get lower service.
|
|
55
|
+
def lower
|
|
56
|
+
@lower
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Attach self to +lower+ service.
|
|
60
|
+
def attach lower, at: nil
|
|
61
|
+
raise "service loop detected" if find_lower self
|
|
62
|
+
detach true if @lower
|
|
63
|
+
lower&.put_service self, at: at
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Detach self.
|
|
67
|
+
def detach transfer = false
|
|
68
|
+
@lower&.delete_upper self
|
|
69
|
+
@lower = nil
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def on event_type, early: false, always: false, do: nil, &block
|
|
73
|
+
@event_manager.manager event_type, block || binding.local_variable_get(:do), early, always
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Match self with +filter+.
|
|
77
|
+
def =~ filter
|
|
78
|
+
case filter
|
|
79
|
+
when nil
|
|
80
|
+
true
|
|
81
|
+
when Symbol
|
|
82
|
+
if filter.end_with? "?"
|
|
83
|
+
respond_to? filter and send filter
|
|
84
|
+
else
|
|
85
|
+
!!@tags[filter]
|
|
86
|
+
end
|
|
87
|
+
when Service
|
|
88
|
+
filter == self
|
|
89
|
+
when Module, Proc
|
|
90
|
+
filter === self
|
|
91
|
+
when Integer
|
|
92
|
+
pad_index == filter
|
|
93
|
+
when WeakRef
|
|
94
|
+
self =~ filter.__getobj__
|
|
95
|
+
when Array
|
|
96
|
+
filter.all?{|it| self =~ it }
|
|
97
|
+
when Hash
|
|
98
|
+
filter.all?{|key, value| respond_to? key and value === send(key) }
|
|
99
|
+
else
|
|
100
|
+
raise "Unsupported =~ (#{filter} : #{filter.class})"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Set whether Pad is tagged with +tag+.
|
|
105
|
+
def set_tag tag, value = true
|
|
106
|
+
return if (c = self.tag tag) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
107
|
+
if value
|
|
108
|
+
@tags[tag] = true
|
|
109
|
+
else
|
|
110
|
+
@tags.delete tag
|
|
111
|
+
end
|
|
112
|
+
true
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# See #set_tag.
|
|
116
|
+
def tag= param
|
|
117
|
+
send_bundle :set_tag, param
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Get whether Pad is tagged with +tag+.
|
|
121
|
+
def tag tag
|
|
122
|
+
@tags[tag]
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Get tags.
|
|
126
|
+
def tags
|
|
127
|
+
@tags.keys
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Create new job tree.
|
|
131
|
+
def job run = true, &block
|
|
132
|
+
job = AfterJob.new block, 0
|
|
133
|
+
job.run pane if run
|
|
134
|
+
job
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Set a feature recognized by its class.
|
|
138
|
+
def << feature
|
|
139
|
+
case feature
|
|
140
|
+
when Symbol
|
|
141
|
+
set_tag feature
|
|
142
|
+
# eval "#{feature} = WeakRef.new self" if feature.start_with? "$"
|
|
143
|
+
# lower&.instance_variable_set feature, self if feature.start_with? "@"
|
|
144
|
+
when Hash
|
|
145
|
+
set **feature
|
|
146
|
+
when Array
|
|
147
|
+
set *feature
|
|
148
|
+
when Proc
|
|
149
|
+
set &feature
|
|
150
|
+
else
|
|
151
|
+
raise "Unsupported << (#{feature} : #{feature.class})"
|
|
152
|
+
end
|
|
153
|
+
self
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# :section: LEVEL 2
|
|
157
|
+
|
|
158
|
+
def initialize
|
|
159
|
+
super
|
|
160
|
+
@lower = nil
|
|
161
|
+
@tags = {}
|
|
162
|
+
@services = []
|
|
163
|
+
@event_manager = ServiceEventManager.new
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def sketch_service
|
|
167
|
+
sketch
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def sketch
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def inspect
|
|
174
|
+
"#{self.class}:#{object_id}"
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
attr :services
|
|
178
|
+
attr :event_manager
|
|
179
|
+
|
|
180
|
+
def service_tree
|
|
181
|
+
@services.map{|it| [it, it.service_tree] }.to_h
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def put service_class, *a, at: nil, **ka, &b
|
|
185
|
+
service = service_class.new
|
|
186
|
+
put_service service, at: at if at != false
|
|
187
|
+
service.sketch_service
|
|
188
|
+
service.set *a, **ka, &b
|
|
189
|
+
service
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def put_service service, at: nil
|
|
193
|
+
service.update_lower self, at
|
|
194
|
+
case at
|
|
195
|
+
when Integer
|
|
196
|
+
@services.insert at, service
|
|
197
|
+
when Pad
|
|
198
|
+
@services.insert @services.index(at), service
|
|
199
|
+
else
|
|
200
|
+
@services << service
|
|
201
|
+
end
|
|
202
|
+
service
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def service_index service
|
|
206
|
+
@services.index service
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def delete_upper upper
|
|
210
|
+
@services.delete upper
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def update_lower lower, at = nil
|
|
214
|
+
different_lower = @lower != lower
|
|
215
|
+
if different_lower
|
|
216
|
+
@lower = lower
|
|
217
|
+
c_set_lower at
|
|
218
|
+
end
|
|
219
|
+
different_lower
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def c_set_lower at
|
|
223
|
+
@services.each{|it| it.update_lower self }
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def lower_pad_detached
|
|
227
|
+
@services.each{ _1.lower_pad_detached }
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def report event, path = false, instant = false
|
|
231
|
+
event.target ||= self
|
|
232
|
+
event_queue = pane&.event_queue
|
|
233
|
+
return unless event_queue
|
|
234
|
+
if path
|
|
235
|
+
path.each do |it|
|
|
236
|
+
event_queue.push event, it.event_manager, true, instant
|
|
237
|
+
end
|
|
238
|
+
path.reverse_each do |it|
|
|
239
|
+
event_queue.push event, it.event_manager, false, instant
|
|
240
|
+
end
|
|
241
|
+
else
|
|
242
|
+
event_queue.push event, @event_manager, true, instant
|
|
243
|
+
event_queue.push event, @event_manager, false, instant
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
# Event manager for Service.
|
|
3
|
+
class ServiceEventManager
|
|
4
|
+
|
|
5
|
+
# :section: LEVEL 2
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@managers = {
|
|
9
|
+
true => {},
|
|
10
|
+
false => {},
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def manager event_class, block, early, always
|
|
15
|
+
manager = (@managers[early][event_class] ||= EventManager.new)
|
|
16
|
+
block ? manager.attach(block, always:) : manager
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def keyboard_manager event_class, keycodes, block, early, always
|
|
20
|
+
manager = (@managers[early][event_class] ||= KeyboardEventManager.new)[*keycodes]
|
|
21
|
+
block ? manager.attach(block, always:) : manager
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def mouse_manager event_class, indexes, block, early, always
|
|
25
|
+
manager = (@managers[early][event_class] ||= MouseEventManager.new)[*indexes]
|
|
26
|
+
block ? manager.attach(block, always:) : manager
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def joystick_manager event_class, joystick, indexes, block, early, always
|
|
30
|
+
manager = (@managers[early][event_class] ||= JoystickEventManager.new)[joystick, indexes]
|
|
31
|
+
block ? manager.attach(block, always:) : manager
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def report event, early
|
|
35
|
+
cl = event.class
|
|
36
|
+
manager = @managers[early]
|
|
37
|
+
while cl != Object
|
|
38
|
+
manager[cl]&.report event
|
|
39
|
+
cl = cl.superclass
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
module Pads
|
|
3
|
+
# Module to include in service containers.
|
|
4
|
+
module ServiceFilter
|
|
5
|
+
|
|
6
|
+
def respond_to? name, include_all = false
|
|
7
|
+
name.end_with? "?" or super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def method_missing name, ...
|
|
11
|
+
if name.end_with? "?"
|
|
12
|
+
find_upper(name.to_s.tr("?", "!").to_sym, ...)
|
|
13
|
+
else
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Get self if it matches filters.
|
|
19
|
+
def is *filters, **ka, &block
|
|
20
|
+
return self if self =~ [*filters, ka, block]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Find direct upper service matching filters.
|
|
24
|
+
def find *filters, last: false, **ka, &block
|
|
25
|
+
each(*filters, **ka, reverse: last, &block).first
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Find upper service matching filters.
|
|
29
|
+
def find_upper *filters, last: false, **ka, &block
|
|
30
|
+
each_upper(*filters, **ka, reverse: last, &block).first
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Find lower service matching filters.
|
|
34
|
+
def find_lower *filters, last: false, **ka, &block
|
|
35
|
+
each_lower(*filters, **ka, reverse: last, &block).first
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Get each direct lower service matching filters.
|
|
39
|
+
def each *filters, reverse: false, **ka, &block
|
|
40
|
+
upper_iterator deep: false, reverse:, filter: [*filters, ka, block]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Get each lower service matching filters.
|
|
44
|
+
def each_lower *filters, reverse: false, **ka, &block
|
|
45
|
+
lower_iterator(false).then{|it| reverse ? it.reverse_each : it }.filter{|it| it =~ [*filters, ka, block] }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Get each upper service matching filters.
|
|
49
|
+
def each_upper *filters, reverse: false, **ka, &block
|
|
50
|
+
upper_iterator deep: true, reverse:, filter: [*filters, ka, block]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Get upper services iterator.
|
|
54
|
+
def upper_iterator enum = nil, reverse: false, deep: true, filter: nil
|
|
55
|
+
if enum
|
|
56
|
+
method = reverse ? :reverse_each : :each
|
|
57
|
+
case deep
|
|
58
|
+
when false
|
|
59
|
+
@services.send(method){|it| enum << it if it =~ filter }
|
|
60
|
+
when :first
|
|
61
|
+
@services.send method do |it|
|
|
62
|
+
enum << it if it =~ filter
|
|
63
|
+
it.upper_iterator enum, reverse:, deep:, filter: ;
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
@services.send(method){|it| enum << it if it =~ filter }
|
|
67
|
+
@services.send(method){|it| it.upper_iterator enum, reverse:, deep:, filter: }
|
|
68
|
+
end
|
|
69
|
+
enum
|
|
70
|
+
else
|
|
71
|
+
Enumerator.new{|enum| upper_iterator enum, reverse:, deep:, filter: }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Iterate over pad descedants.
|
|
76
|
+
def upper_pad_iterator enum = nil, reverse: false, deep: true
|
|
77
|
+
if enum
|
|
78
|
+
method = reverse ? :reverse_each : :each
|
|
79
|
+
case deep
|
|
80
|
+
when false
|
|
81
|
+
@pads.send(method){ enum << _1 }
|
|
82
|
+
when :first
|
|
83
|
+
@pads.send method do
|
|
84
|
+
enum << _1
|
|
85
|
+
_1.upper_pad_iterator enum, reverse:, deep:;
|
|
86
|
+
end
|
|
87
|
+
else
|
|
88
|
+
@pads.send(method){ enum << _1 }
|
|
89
|
+
@pads.send(method){ _1.upper_pad_iterator enum, reverse:, deep: }
|
|
90
|
+
end
|
|
91
|
+
enum
|
|
92
|
+
else
|
|
93
|
+
Enumerator.new{|enum| upper_pad_iterator enum, reverse:, deep: }
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
module Pads
|
|
3
|
+
# Module extended in Kredki::Pads::Service and all inherited classes.
|
|
4
|
+
module ServiceInherited
|
|
5
|
+
def self.extended cl
|
|
6
|
+
cl.define_singleton_method :inherited do |cl1|
|
|
7
|
+
cl1.extend ServiceInherited
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def method_missing name, ...
|
|
12
|
+
if name.end_with? "!"
|
|
13
|
+
define(name, ...)
|
|
14
|
+
else
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def respond_to? name, all = false
|
|
20
|
+
name.end_with? "!" or super
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Define method.
|
|
24
|
+
def define name, klass = nil, &block
|
|
25
|
+
case klass
|
|
26
|
+
when Class
|
|
27
|
+
class_eval <<~xx
|
|
28
|
+
def #{name} ...
|
|
29
|
+
put(#{klass}, :#{name}, ...)
|
|
30
|
+
end
|
|
31
|
+
xx
|
|
32
|
+
when nil
|
|
33
|
+
if block.parameters.empty?
|
|
34
|
+
define_method name do |*a, **ka, &b|
|
|
35
|
+
instance_exec(&block).set *a, **ka, &b
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
define_method name do |*a, **ka, &b|
|
|
39
|
+
instance_exec(*a, **ka, &block).set &b
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
else raise_ia klass
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end#ServiceInherited
|
|
47
|
+
end#Pads
|
|
48
|
+
end#Kredki
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_relative 'service/service_inherited'
|
|
2
|
+
require_relative "layout/layout"
|
|
3
|
+
|
|
4
|
+
module Kredki
|
|
5
|
+
module Pads
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
attr_accessor :layout_map
|
|
9
|
+
|
|
10
|
+
def layout! id, layout
|
|
11
|
+
@layout_map[id] = layout
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def layout param = nil
|
|
15
|
+
case param
|
|
16
|
+
in Layout
|
|
17
|
+
param
|
|
18
|
+
else
|
|
19
|
+
@layout_map[param] or raise "Unknown layout '#{param}'"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attr_accessor :config
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
self.layout_map = {}
|
|
27
|
+
self.config = "#{Kredki.dir}/stuff/config/pads_config.rb"
|
|
28
|
+
|
|
29
|
+
Auto = :auto
|
|
30
|
+
Fit = :fit
|
|
31
|
+
Ratio = :ratio
|
|
32
|
+
Start = :start
|
|
33
|
+
Center = :center
|
|
34
|
+
End = :end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
module Pads
|
|
3
|
+
# A base class for controls that allows you to set a value by dragging a handle.
|
|
4
|
+
class Slider < RectanglePad
|
|
5
|
+
|
|
6
|
+
class EditEvent < Event
|
|
7
|
+
def initialize value, ...
|
|
8
|
+
super(...)
|
|
9
|
+
@value = value
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def value
|
|
13
|
+
@value
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def param
|
|
17
|
+
value
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Set value.
|
|
22
|
+
def set_value value = @value
|
|
23
|
+
return send_bundle :set_value, yield(self.value) if block_given?
|
|
24
|
+
return if @value == value
|
|
25
|
+
@value = value
|
|
26
|
+
layer&.break_layout
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# See #set_value.
|
|
30
|
+
def value= param
|
|
31
|
+
send_bundle :set_value, param
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Get value.
|
|
35
|
+
def value
|
|
36
|
+
@value
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Set suit.
|
|
40
|
+
def set_suit *suit
|
|
41
|
+
return send_bundle :set_suit, yield(self.suit) if block_given?
|
|
42
|
+
suit = Util.uncover suit
|
|
43
|
+
return if @suit == suit && suit != :random
|
|
44
|
+
@suit = suit
|
|
45
|
+
repaint
|
|
46
|
+
true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# See #set_suit.
|
|
50
|
+
def suit= param
|
|
51
|
+
send_bundle :set_suit, param
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Get suit.
|
|
55
|
+
def suit
|
|
56
|
+
@suit
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Create and attach edit event reaction.
|
|
60
|
+
def on_edit ...
|
|
61
|
+
on(EditEvent, ...)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# See #on_edit.
|
|
65
|
+
def on_edit= param
|
|
66
|
+
on_edit do: param
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# :section: LEVEL 2
|
|
70
|
+
|
|
71
|
+
def initialize
|
|
72
|
+
super
|
|
73
|
+
|
|
74
|
+
@value = 0.0
|
|
75
|
+
@c0 = 0
|
|
76
|
+
@handle = put RectanglePad, fill: :gray
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
attr :handle
|
|
80
|
+
|
|
81
|
+
def sketch
|
|
82
|
+
super
|
|
83
|
+
|
|
84
|
+
set_suit :gray
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def presence
|
|
88
|
+
super
|
|
89
|
+
|
|
90
|
+
Event.each(
|
|
91
|
+
on_mouse_press,
|
|
92
|
+
on_mouse_release,
|
|
93
|
+
on_mouse_enter,
|
|
94
|
+
on_mouse_leave,
|
|
95
|
+
do: method(:repaint)
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def repaint event = nil
|
|
100
|
+
color = Kredki.color @suit
|
|
101
|
+
|
|
102
|
+
if in_disabled
|
|
103
|
+
set_opacity 3/4r
|
|
104
|
+
handle.area.set_fill color.darken
|
|
105
|
+
else
|
|
106
|
+
set_opacity 1r
|
|
107
|
+
handle.area.set_fill mouse_in ? color.lighten : color.darken
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def behavior
|
|
112
|
+
super
|
|
113
|
+
|
|
114
|
+
on_mouse_scroll do |e|
|
|
115
|
+
v, y = Kredki.relative_scroll *e.xy
|
|
116
|
+
v = y if v.abs < y.abs
|
|
117
|
+
jump = 0.1
|
|
118
|
+
v = (@value - jump * v).clamp(0..1)
|
|
119
|
+
report EditEvent.new(v, e)
|
|
120
|
+
e.close
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
on_mouse_move do |e|
|
|
124
|
+
if e.drag?
|
|
125
|
+
process_drag e
|
|
126
|
+
e.close
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
on_edit early: true do |e|
|
|
131
|
+
e.close if in_disabled
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
on_edit do |e|
|
|
135
|
+
set_value e.value
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
@handle.on_mouse_press do |e|
|
|
139
|
+
@handle.start_drag e.xy, e.button.id
|
|
140
|
+
e.close
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
module Pads
|
|
3
|
+
# A control that allows you to set a value by dragging a handle in X axis.
|
|
4
|
+
class SliderX < Slider
|
|
5
|
+
|
|
6
|
+
# :section: LEVEL 2
|
|
7
|
+
|
|
8
|
+
def process_drag e, speed = 1
|
|
9
|
+
hsx = @handle.area_size_x
|
|
10
|
+
max_x = area_size_x - hsx
|
|
11
|
+
@c0 = @handle.area_x if e.start?
|
|
12
|
+
start_x = layer.pin_xy[0]
|
|
13
|
+
x = [[0, @c0 + (e.x - start_x) * speed].max, max_x].min
|
|
14
|
+
report EditEvent.new(1.0 * x / max_x, e) if max_x > 0
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def sketch
|
|
18
|
+
super
|
|
19
|
+
|
|
20
|
+
set_size_y 10
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def behavior
|
|
24
|
+
super
|
|
25
|
+
|
|
26
|
+
on_mouse_press :primary do |e|
|
|
27
|
+
@handle.start_drag @handle.translate(@handle.area_size_x * 0.5, 0), :primary
|
|
28
|
+
e.close
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def arrange request_size_x = nil
|
|
33
|
+
csx = clip_size_x
|
|
34
|
+
request_size_x ||= 3 * csx
|
|
35
|
+
size_x = (csx.to_f / request_size_x * csx).clamp 20, [csx - 20, 20].max
|
|
36
|
+
@handle.update_size size_x, area_size_y
|
|
37
|
+
@handle.update_xy ((csx - size_x) * @value.to_f.then{|it| it.nan? ? 0 : it.clamp(0..1) }).ceil, 0
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
module Pads
|
|
3
|
+
# A control that allows you to set a value by dragging a handle in Y axis.
|
|
4
|
+
class SliderY < Slider
|
|
5
|
+
|
|
6
|
+
# :section: LEVEL 2
|
|
7
|
+
|
|
8
|
+
def process_drag e, speed = 1
|
|
9
|
+
hsy = @handle.area_size_y
|
|
10
|
+
max_y = area_size_y - hsy
|
|
11
|
+
@c0 = @handle.area_y if e.start?
|
|
12
|
+
start_y = layer.pin_xy[1]
|
|
13
|
+
y = [[0, @c0 + (e.y - start_y) * speed].max, max_y].min
|
|
14
|
+
report EditEvent.new(1.0 * y / max_y, e) if max_y > 0
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def sketch
|
|
18
|
+
super
|
|
19
|
+
|
|
20
|
+
set_size_x 10
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def behavior
|
|
24
|
+
super
|
|
25
|
+
|
|
26
|
+
on_mouse_press :primary do |e|
|
|
27
|
+
@handle.start_drag @handle.translate(0, @handle.area_size_x * 0.5), :primary
|
|
28
|
+
e.close
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def arrange request_size_y = nil
|
|
33
|
+
csy = clip_size_y
|
|
34
|
+
request_size_y ||= 3 * csy
|
|
35
|
+
size_y = (csy.to_f / request_size_y * csy).clamp 20, [csy - 20, 20].max
|
|
36
|
+
@handle.update_size area_size_x, size_y
|
|
37
|
+
@handle.update_xy 0, ((csy - size_y) * @value.to_f.then{|it| it.nan? ? 0 : it.clamp(0..1) }).ceil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|