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,584 @@
|
|
|
1
|
+
module Kredki
|
|
2
|
+
class Window
|
|
3
|
+
|
|
4
|
+
# Show a window.
|
|
5
|
+
def show
|
|
6
|
+
Pastele.window_show @pointer
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Hide a window.
|
|
10
|
+
def hide
|
|
11
|
+
Pastele.window_hide @pointer
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Maximize a window.
|
|
15
|
+
def maximize
|
|
16
|
+
Pastele.window_maximize @pointer
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Minimize a window.
|
|
20
|
+
def minimize
|
|
21
|
+
Pastele.window_minimize @pointer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Request that a window be raised above other windows and gain the input focus.
|
|
25
|
+
def focus
|
|
26
|
+
Pastele.window_focus @pointer
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Request that the size and position of a minimized or maximized window be restored.
|
|
30
|
+
def restore
|
|
31
|
+
Pastele.window_restore @pointer
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Set whether the window has an stroke.
|
|
35
|
+
def set_stroke value = true
|
|
36
|
+
return if (c = stroke) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
37
|
+
Pastele.window_set_bordered @pointer, value ? 1 : 0
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# See #set_stroke.
|
|
42
|
+
def stroke= value
|
|
43
|
+
set_stroke value
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Get whether the window has an stroke.
|
|
47
|
+
def stroke
|
|
48
|
+
Pastele.window_get_flags(@pointer) & 0x10 == 0
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# See #stroke.
|
|
52
|
+
def stroke?
|
|
53
|
+
!!stroke
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Set whether fullscreen mode is on.
|
|
57
|
+
def set_fullscreen value = true
|
|
58
|
+
return if (c = fullscreen) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
59
|
+
Pastele.window_set_fullscreen @pointer, value ? 1 : 0
|
|
60
|
+
true
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# See #set_fullscreen.
|
|
64
|
+
def fullscreen= value
|
|
65
|
+
set_fullscreen value
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Get whether fullscreen mode is on.
|
|
69
|
+
def fullscreen
|
|
70
|
+
Pastele.window_get_flags(@pointer) & 0x1000 != 0
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# See #fullscreen.
|
|
74
|
+
def fullscreen?
|
|
75
|
+
!!fullscreen
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Set whether text input mode is on.
|
|
79
|
+
def set_text_input value = true
|
|
80
|
+
return if (c = text_input) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
81
|
+
Pastele.window_set_text_input @pointer, value ? 1 : 0
|
|
82
|
+
true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# See #set_text_input.
|
|
86
|
+
def text_input= value
|
|
87
|
+
set_text_input value
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Get whether text input mode is on.
|
|
91
|
+
def text_input
|
|
92
|
+
Pastele.window_get_text_input(@pointer) != 0
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# See #text_input.
|
|
96
|
+
def text_input?
|
|
97
|
+
!!text_input
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Set opacity.
|
|
101
|
+
def set_opacity opacity = @opacity
|
|
102
|
+
return set_opacity yield self.opacity if block_given?
|
|
103
|
+
return if @opacity == opacity
|
|
104
|
+
Pastele.window_set_opacity @pointer, opacity > 1 ? opacity / 255.0 : opacity
|
|
105
|
+
@opacity = opacity
|
|
106
|
+
true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# See #set_opacity.
|
|
110
|
+
def opacity= param
|
|
111
|
+
set_opacity param
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Get opacity.
|
|
115
|
+
def opacity
|
|
116
|
+
@opacity
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Set position along X and Y axes.
|
|
120
|
+
def set_xy x = 0, y = x
|
|
121
|
+
return send_bundle :set_xy, yield(self.xy) if block_given?
|
|
122
|
+
x = case x
|
|
123
|
+
when Start
|
|
124
|
+
0
|
|
125
|
+
when Center
|
|
126
|
+
(display_size[0] - size[0]) * 0.5
|
|
127
|
+
when End
|
|
128
|
+
display_size[0] - size[0]
|
|
129
|
+
when Numeric
|
|
130
|
+
x
|
|
131
|
+
else raise_ia x
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
y = case y
|
|
135
|
+
when Start
|
|
136
|
+
0
|
|
137
|
+
when Center
|
|
138
|
+
(display_size[1] - size[1]) * 0.5
|
|
139
|
+
when End
|
|
140
|
+
display_size[1] - size[1]
|
|
141
|
+
when Numeric
|
|
142
|
+
y
|
|
143
|
+
else raise_ia y
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
Pastele.window_set_position @pointer, x, y
|
|
147
|
+
true
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# See #set_xy.
|
|
151
|
+
def xy= param
|
|
152
|
+
send_bundle :set_xy, param
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Get position along X and Y axes.
|
|
156
|
+
def xy
|
|
157
|
+
point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
|
|
158
|
+
Pastele.window_get_position @pointer, point
|
|
159
|
+
[point.x, point.y]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Set size.
|
|
163
|
+
def set_size size_x = 400, size_y = size_x, **ka
|
|
164
|
+
return send_bundle :set_size, yield(self.size) if block_given?
|
|
165
|
+
size_x = case size_x
|
|
166
|
+
when Rational
|
|
167
|
+
display_size[0] * size_x
|
|
168
|
+
when Numeric
|
|
169
|
+
size_x
|
|
170
|
+
else raise_ia size_x
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
size_y = case size_y
|
|
174
|
+
when Rational
|
|
175
|
+
display_size[1] * size_y
|
|
176
|
+
when Numeric
|
|
177
|
+
size_y
|
|
178
|
+
else raise_ia size_y
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
Pastele.window_set_size @pointer, size_x, size_y
|
|
182
|
+
ka.each{ send_bundle "size_#{_1}!", _2 }
|
|
183
|
+
report ResizeEvent.new size_x, size_y
|
|
184
|
+
true
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# See #set_size.
|
|
188
|
+
def size= param
|
|
189
|
+
send_bundle :set_size, param
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Get size.
|
|
193
|
+
def size
|
|
194
|
+
point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
|
|
195
|
+
Pastele.window_get_size @pointer, point
|
|
196
|
+
[point.x, point.y]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Get size in X axis.
|
|
200
|
+
def size_x
|
|
201
|
+
size[0]
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Get size in Y axis.
|
|
205
|
+
def size_y
|
|
206
|
+
size[1]
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Set size limit.
|
|
210
|
+
def set_size_limit x, y = x
|
|
211
|
+
return send_bundle :set_size_limit, yield(self.size_limit) if block_given?
|
|
212
|
+
x_min, x_max = parse_limit x
|
|
213
|
+
y_min, y_max = parse_limit y
|
|
214
|
+
Pastele.window_set_minimum_size @pointer, x_min, y_min
|
|
215
|
+
Pastele.window_set_maximum_size @pointer, x_max, y_max
|
|
216
|
+
true
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# See #set_size_limit.
|
|
220
|
+
def size_limit= param
|
|
221
|
+
send_bundle :set_size_limit, param
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Get size limit.
|
|
225
|
+
def size_limit
|
|
226
|
+
point = Pastele::IntPoint.malloc(Fiddle::RUBY_FREE)
|
|
227
|
+
Pastele.window_get_minimum_size @pointer, point
|
|
228
|
+
x_min, y_min = [point.x, point.y]
|
|
229
|
+
Pastele.window_get_maximum_size @pointer, point
|
|
230
|
+
[x_min..point.x, y_min..point.y]
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Set whether a window width and height can be customized by dragging its border.
|
|
234
|
+
def set_resizable value = true
|
|
235
|
+
return if (c = resizable) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
236
|
+
Pastele.window_set_resizable @pointer, value ? 1 : 0
|
|
237
|
+
true
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# See #set_resizable.
|
|
241
|
+
def resizable= param
|
|
242
|
+
set_resizable param
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Get whether a window width and height can be customized by dragging its border.
|
|
246
|
+
def resizable
|
|
247
|
+
Pastele.window_get_flags(@pointer) & 0x20 != 0
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# See #resizable.
|
|
251
|
+
def resizable?
|
|
252
|
+
!!resizable
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Set title.
|
|
256
|
+
def set_title title = nil
|
|
257
|
+
return set_title yield self.title if block_given?
|
|
258
|
+
Pastele.window_set_title @pointer, title.to_s
|
|
259
|
+
true
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# See #set_title.
|
|
263
|
+
def title= param
|
|
264
|
+
set_title param
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Get title.
|
|
268
|
+
def title
|
|
269
|
+
title = Pastele.window_get_title @pointer
|
|
270
|
+
title.to_s.force_encoding "utf-8"
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Set whether window is always in the foreground.
|
|
274
|
+
def set_top value = true
|
|
275
|
+
return if (c = top) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
276
|
+
Pastele.window_set_always_on_top @pointer, value ? 1 : 0
|
|
277
|
+
true
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# See #set_top.
|
|
281
|
+
def top= param
|
|
282
|
+
set_top param
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Get whether window is always in the foreground.
|
|
286
|
+
def top
|
|
287
|
+
Pastele.window_get_flags(@pointer) & 0x10000 != 0
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# See #top.
|
|
291
|
+
def top?
|
|
292
|
+
!!top
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
# Get mouse pointer position relative to the window [0, 0].
|
|
296
|
+
def mouse_xy
|
|
297
|
+
x, y = Kredki.mouse.xy
|
|
298
|
+
wx, wy = window.xy
|
|
299
|
+
[x - wx, y - wy]
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# Set whether mouse pointer is confined to the window.
|
|
303
|
+
def set_mouse_grab value = true
|
|
304
|
+
return if (c = mouse_grab) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
305
|
+
Pastele.window_set_mouse_mouse_grab @pointer, value ? 1 : 0
|
|
306
|
+
true
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# See #set_mouse_grab.
|
|
310
|
+
def mouse_grab= value
|
|
311
|
+
set_mouse_grab value
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
# Get whether mouse pointer is confined to the window.
|
|
315
|
+
def mouse_grab
|
|
316
|
+
Pastele.window_get_mouse_grab(@pointer) != 0
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# See #mouse_grab.
|
|
320
|
+
def mouse_grab?
|
|
321
|
+
!!mouse_grab
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Set whether relative mouse mode is on.
|
|
325
|
+
def set_mouse_relative value = true
|
|
326
|
+
return if (c = relative) == (value = block_given? ? yield(c) : value == Not ? !c : value)
|
|
327
|
+
Pastele.window_set_mouse_relative_mode @pointer, value ? 1 : 0
|
|
328
|
+
true
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
# See #set_mouse_relative.
|
|
332
|
+
def mouse_relative= value
|
|
333
|
+
set_mouse_relative value
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# Get whether relative mouse mode is on.
|
|
337
|
+
def mouse_relative
|
|
338
|
+
Pastele.window_get_mouse_relative_mode(@pointer) != 0
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# See #mouse_relative.
|
|
342
|
+
def mouse_relative?
|
|
343
|
+
!!mouse_relative
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
# Get whether mouse pointer is in window.
|
|
347
|
+
def mouse_in
|
|
348
|
+
@mouse_in.nil? ? Kredki.mouse.get_cursor_position != [0, 0] : @mouse_in
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Get whether capture mode is on.
|
|
352
|
+
def mouse_capture
|
|
353
|
+
Pastele.window_get_flags(@pointer) & 0x4000 != 0
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# See #capture.
|
|
357
|
+
def mouse_capture?
|
|
358
|
+
!!mouse_capture
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# Set default pane.
|
|
362
|
+
def pane! ...
|
|
363
|
+
set_pane(default_pane).set(...)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Set pane.
|
|
367
|
+
def set_pane pane = default_pane
|
|
368
|
+
case pane
|
|
369
|
+
when Class
|
|
370
|
+
set_pane pane.new
|
|
371
|
+
when String
|
|
372
|
+
pane_service = set_pane
|
|
373
|
+
pane_service.set{ eval File.read pane }
|
|
374
|
+
when Pane
|
|
375
|
+
update_pane pane
|
|
376
|
+
pane.context_service
|
|
377
|
+
else raise_ia pane
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# See #set_pane.
|
|
382
|
+
def pane= param
|
|
383
|
+
send_bundle :set_pane, param
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
# Get pane.
|
|
387
|
+
def pane
|
|
388
|
+
@pane
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
# Get window (self).
|
|
392
|
+
def window
|
|
393
|
+
self
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
def << feature
|
|
397
|
+
case feature
|
|
398
|
+
when Pane
|
|
399
|
+
set_pane feature
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
# Request window close.
|
|
404
|
+
def close
|
|
405
|
+
Pastele.window_close @pointer
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
# Get display size.
|
|
409
|
+
def display_size
|
|
410
|
+
bounds = Pastele::Bounds.malloc(Fiddle::RUBY_FREE)
|
|
411
|
+
Pastele.window_get_display_bounds @pointer, bounds
|
|
412
|
+
[bounds.w, bounds.h]
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
# Set fps limit.
|
|
416
|
+
def set_fps_limit fps_limit = @fps_limit
|
|
417
|
+
return set_fps_limit yield(@fps_limit) if block_given?
|
|
418
|
+
return if @fps_limit == fps_limit
|
|
419
|
+
@fps_limit = fps_limit
|
|
420
|
+
true
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# See #set_fps_limit.
|
|
424
|
+
def fps_limit= param
|
|
425
|
+
send_bundle :set_fps_limit, param
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
# Get fps limit.
|
|
429
|
+
def fps_limit
|
|
430
|
+
@fps_limit
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
# Save window as PNG image.
|
|
434
|
+
def to_png filepath
|
|
435
|
+
@pane.arrange
|
|
436
|
+
Pastele.window_surface_to_png @pointer, File.expand_path(filepath)
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
# Get pixel color.
|
|
440
|
+
def pixel_color x, y
|
|
441
|
+
rg = Pastele::IntPoint.malloc Fiddle::RUBY_FREE
|
|
442
|
+
ba = Pastele::IntPoint.malloc Fiddle::RUBY_FREE
|
|
443
|
+
Pastele.window_get_pixel_color @pointer, x, y, rg, ba
|
|
444
|
+
Kredki.color [rg.x, rg.y, ba.x, ba.y]
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
# :section: LEVEL 2
|
|
448
|
+
|
|
449
|
+
def initialize *a
|
|
450
|
+
@pointer = default_pointer *a
|
|
451
|
+
@app = nil
|
|
452
|
+
@sketched = false
|
|
453
|
+
@update_thread = nil
|
|
454
|
+
@update_queue = Thread::Queue.new
|
|
455
|
+
@update_timestamp = 0
|
|
456
|
+
@update_error = 0
|
|
457
|
+
@fps_limit = 100
|
|
458
|
+
@expose_timestamp = 0
|
|
459
|
+
@pane = nil
|
|
460
|
+
@mouse_in = nil
|
|
461
|
+
ObjectSpace.define_finalizer(self, Window.finalizer(@pointer))
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def self.finalizer pointer
|
|
465
|
+
proc{ Pastele.window_delete pointer }
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
def default_pointer size_x = 400, size_y = 400
|
|
469
|
+
Pastele.window_new_sw size_x, size_y
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def default_pane
|
|
473
|
+
Pane.new
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
attr :pointer
|
|
477
|
+
|
|
478
|
+
def sketch_window
|
|
479
|
+
return if @sketched
|
|
480
|
+
@sketched = true
|
|
481
|
+
sketch
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
def sketch
|
|
485
|
+
set_resizable true
|
|
486
|
+
set_text_input true
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
def attach app
|
|
490
|
+
@app = app
|
|
491
|
+
sketch_window
|
|
492
|
+
@update_thread = Thread.new do
|
|
493
|
+
loop do
|
|
494
|
+
Pastele.window_update_request window.pointer
|
|
495
|
+
@update_queue.pop&.then{|it| sleep it }
|
|
496
|
+
end
|
|
497
|
+
end
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
def detach
|
|
501
|
+
@app = nil
|
|
502
|
+
@update_thread&.kill
|
|
503
|
+
@update_thread = nil
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def app
|
|
507
|
+
@app
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
def update_complete event
|
|
511
|
+
if @fps_limit
|
|
512
|
+
@update_queue.push (update_delay (event.timestamp - @update_timestamp) / 1000000000.0, 1.0 / @fps_limit)
|
|
513
|
+
else
|
|
514
|
+
@update_queue.push nil
|
|
515
|
+
end
|
|
516
|
+
@update_timestamp = event.timestamp
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
def update_delay last, target
|
|
520
|
+
return target if last > 2 * target
|
|
521
|
+
@update_error += (target - last) * 0.01
|
|
522
|
+
e = target + @update_error
|
|
523
|
+
e < 0 ? target : e
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
def report event, ...
|
|
527
|
+
case event
|
|
528
|
+
when UpdateCompleteEvent
|
|
529
|
+
update_complete event
|
|
530
|
+
when WindowExposeEvent
|
|
531
|
+
update = if @fps_limit
|
|
532
|
+
delay = (event.timestamp - @expose_timestamp) / 1000000000.0
|
|
533
|
+
rate_delay = 1.0 / @fps_limit
|
|
534
|
+
delay >= rate_delay
|
|
535
|
+
else true
|
|
536
|
+
end
|
|
537
|
+
if update
|
|
538
|
+
@expose_timestamp = event.timestamp
|
|
539
|
+
@pane&.report(event, ...)
|
|
540
|
+
Pastele.window_update @pointer, 1
|
|
541
|
+
end
|
|
542
|
+
else
|
|
543
|
+
@pane&.report(event, ...)
|
|
544
|
+
end
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
def update_paint paint
|
|
548
|
+
Pastele.window_paint_to_update @pointer, paint.pointer
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
def inspect
|
|
552
|
+
"#{self.class}:#{object_id}"
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
def update_pane pane, &block
|
|
556
|
+
pane&.window&.update_pane nil
|
|
557
|
+
pane&.window = self
|
|
558
|
+
Pastele.window_set_scene @pointer, pane&.pointer
|
|
559
|
+
update_paint pane if pane
|
|
560
|
+
@pane = pane
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
def paint_displayed pane
|
|
564
|
+
@pane == pane && !!@app
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
def update_mouse_in set
|
|
568
|
+
@mouse_in = set
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
def get_capture
|
|
572
|
+
Pastele.window_get_flags(@pointer) & 0x4000 != 0
|
|
573
|
+
end
|
|
574
|
+
|
|
575
|
+
def parse_limit limit
|
|
576
|
+
case limit
|
|
577
|
+
when Range
|
|
578
|
+
[limit.begin || 0, limit.end || 0]
|
|
579
|
+
else
|
|
580
|
+
[0, limit || 0]
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
end
|
|
584
|
+
end
|
data/lib/kredki/core.rb
ADDED
data/lib/kredki/hide.rb
ADDED
data/lib/kredki/irb.rb
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'irb'
|
|
2
|
+
|
|
3
|
+
class KredkiWorkSpace < IRB::WorkSpace
|
|
4
|
+
def initialize app, ...
|
|
5
|
+
super(...)
|
|
6
|
+
@app = app
|
|
7
|
+
@mutex = Thread::Mutex.new
|
|
8
|
+
@convar = Thread::ConditionVariable.new
|
|
9
|
+
@cmd = nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
alias_method :oeval, :evaluate
|
|
13
|
+
|
|
14
|
+
def evaluate *a
|
|
15
|
+
@mutex.synchronize do
|
|
16
|
+
@cmd = a
|
|
17
|
+
@convar.wait @mutex
|
|
18
|
+
result = @cmd
|
|
19
|
+
@cmd = nil
|
|
20
|
+
result
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def release
|
|
25
|
+
@mutex.synchronize do
|
|
26
|
+
if @cmd
|
|
27
|
+
if @cmd == [:exit]
|
|
28
|
+
@app.return
|
|
29
|
+
else
|
|
30
|
+
@cmd = oeval *@cmd
|
|
31
|
+
end
|
|
32
|
+
@convar.signal
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
KredkiProc = proc do
|
|
39
|
+
mutex = Thread::Mutex.new
|
|
40
|
+
convar = Thread::ConditionVariable.new
|
|
41
|
+
Thread.new do
|
|
42
|
+
app = Kredki.app
|
|
43
|
+
MainLayer = app.open hidden: true
|
|
44
|
+
module Kredki
|
|
45
|
+
module Extend
|
|
46
|
+
extend Forwardable
|
|
47
|
+
|
|
48
|
+
(MainLayer.methods - Object.instance_methods).each do |it|
|
|
49
|
+
def_delegator :MainLayer, it
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
extend Kredki::Extend
|
|
54
|
+
include Kredki
|
|
55
|
+
include Kredki::Pads
|
|
56
|
+
|
|
57
|
+
window.set do
|
|
58
|
+
set_resizable
|
|
59
|
+
set_text_input
|
|
60
|
+
set_top
|
|
61
|
+
pane.set_fill 20, 70, 20
|
|
62
|
+
pane.close_on_esc
|
|
63
|
+
end
|
|
64
|
+
MainLayer.carry_focus_on_tab
|
|
65
|
+
|
|
66
|
+
kredki_workspace = KredkiWorkSpace.new app, binding
|
|
67
|
+
IRB.CurrentContext.replace_workspace kredki_workspace
|
|
68
|
+
IRB.conf[:AT_EXIT] << proc{ kredki_workspace.evaluate :exit }
|
|
69
|
+
job.loop{ kredki_workspace.release }
|
|
70
|
+
mutex.synchronize{ convar.signal }
|
|
71
|
+
window.show
|
|
72
|
+
app.run
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
mutex.synchronize{ convar.wait mutex }
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
if IRB.CurrentContext
|
|
79
|
+
KredkiProc.call
|
|
80
|
+
else
|
|
81
|
+
module IRB
|
|
82
|
+
class Irb
|
|
83
|
+
alias_method :o_configure_io, :configure_io
|
|
84
|
+
def configure_io
|
|
85
|
+
KredkiProc.call
|
|
86
|
+
o_configure_io
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|