├── .github └── workflows │ └── test.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── build.zig ├── build.zig.zon ├── docs ├── add_doc_logo.zig ├── favicon.svg ├── image_gen_test_runner.zig ├── index.html ├── logo.svg └── readme-docs.md ├── examples ├── app.zig ├── dx11-ontop.zig ├── dx11-standalone.zig ├── raylib-ontop.zig ├── raylib-standalone.zig ├── sdl-ontop.zig ├── sdl-standalone.zig ├── web-test.zig └── zig-favicon.png ├── readme-implementation.md ├── screenshot_demo.png ├── snapshots ├── app.zig-test.snapshot-0 └── app.zig-test.snapshot-1 ├── src ├── App.zig ├── Backend.zig ├── Color.zig ├── Event.zig ├── Examples.zig ├── Font.zig ├── Options.zig ├── Point.zig ├── Rect.zig ├── RectScale.zig ├── ScrollInfo.zig ├── Size.zig ├── Theme.zig ├── Vertex.zig ├── Widget.zig ├── WidgetData.zig ├── Window.zig ├── backends │ ├── dx11.zig │ ├── index.html │ ├── raylib.zig │ ├── sdl.zig │ ├── testing.zig │ ├── web.js │ └── web.zig ├── cacheBuster.zig ├── dvui.zig ├── easing.zig ├── enums.zig ├── fonts │ ├── Aleo │ │ ├── Aleo-Italic-VariableFont_wght.ttf │ │ ├── Aleo-VariableFont_wght.ttf │ │ ├── OFL.txt │ │ ├── README.txt │ │ └── static │ │ │ ├── Aleo-Black.ttf │ │ │ ├── Aleo-BlackItalic.ttf │ │ │ ├── Aleo-Bold.ttf │ │ │ ├── Aleo-BoldItalic.ttf │ │ │ ├── Aleo-ExtraBold.ttf │ │ │ ├── Aleo-ExtraBoldItalic.ttf │ │ │ ├── Aleo-ExtraLight.ttf │ │ │ ├── Aleo-ExtraLightItalic.ttf │ │ │ ├── Aleo-Italic.ttf │ │ │ ├── Aleo-Light.ttf │ │ │ ├── Aleo-LightItalic.ttf │ │ │ ├── Aleo-Medium.ttf │ │ │ ├── Aleo-MediumItalic.ttf │ │ │ ├── Aleo-Regular.ttf │ │ │ ├── Aleo-SemiBold.ttf │ │ │ ├── Aleo-SemiBoldItalic.ttf │ │ │ ├── Aleo-Thin.ttf │ │ │ └── Aleo-ThinItalic.ttf │ ├── NotoSansKR-Regular.ttf │ ├── OpenDyslexic │ │ ├── FONTLOG.txt │ │ ├── OFL-FAQ.txt │ │ ├── OFL.txt │ │ ├── README.md │ │ └── compiled │ │ │ ├── OpenDyslexic-Bold-Italic.otf │ │ │ ├── OpenDyslexic-Bold.otf │ │ │ ├── OpenDyslexic-Italic.otf │ │ │ └── OpenDyslexic-Regular.otf │ ├── Pixelify_Sans │ │ ├── OFL.txt │ │ ├── PixelifySans-VariableFont_wght.ttf │ │ ├── README.txt │ │ └── static │ │ │ ├── PixelifySans-Bold.ttf │ │ │ ├── PixelifySans-Medium.ttf │ │ │ ├── PixelifySans-Regular.ttf │ │ │ └── PixelifySans-SemiBold.ttf │ ├── bitstream-vera │ │ ├── COPYRIGHT.TXT │ │ ├── README.TXT │ │ ├── RELEASENOTES.TXT │ │ ├── Vera.ttf │ │ ├── VeraBI.ttf │ │ ├── VeraBd.ttf │ │ ├── VeraIt.ttf │ │ ├── VeraMoBI.ttf │ │ ├── VeraMoBd.ttf │ │ ├── VeraMoIt.ttf │ │ ├── VeraMono.ttf │ │ ├── VeraSe.ttf │ │ ├── VeraSeBd.ttf │ │ └── local.conf │ └── hack │ │ ├── Hack-Bold.ttf │ │ ├── Hack-BoldItalic.ttf │ │ ├── Hack-Italic.ttf │ │ ├── Hack-Regular.ttf │ │ └── LICENSE ├── hsluv.zig ├── icons │ ├── entypo.zig │ └── entypo │ │ ├── add-to-list.tvg │ │ ├── add-user.tvg │ │ ├── address.tvg │ │ ├── adjust.tvg │ │ ├── air.tvg │ │ ├── aircraft-landing.tvg │ │ ├── aircraft-take-off.tvg │ │ ├── aircraft.tvg │ │ ├── align-bottom.tvg │ │ ├── align-horizontal-middle.tvg │ │ ├── align-left.tvg │ │ ├── align-right.tvg │ │ ├── align-top.tvg │ │ ├── align-vertical-middle.tvg │ │ ├── archive.tvg │ │ ├── area-graph.tvg │ │ ├── arrow-bold-down.tvg │ │ ├── arrow-bold-left.tvg │ │ ├── arrow-bold-right.tvg │ │ ├── arrow-bold-up.tvg │ │ ├── arrow-down.tvg │ │ ├── arrow-left.tvg │ │ ├── arrow-long-down.tvg │ │ ├── arrow-long-left.tvg │ │ ├── arrow-long-right.tvg │ │ ├── arrow-long-up.tvg │ │ ├── arrow-right.tvg │ │ ├── arrow-up.tvg │ │ ├── arrow-with-circle-down.tvg │ │ ├── arrow-with-circle-left.tvg │ │ ├── arrow-with-circle-right.tvg │ │ ├── arrow-with-circle-up.tvg │ │ ├── attachment.tvg │ │ ├── awareness-ribbon.tvg │ │ ├── back-in-time.tvg │ │ ├── back.tvg │ │ ├── bar-graph.tvg │ │ ├── battery.tvg │ │ ├── beamed-note.tvg │ │ ├── bell.tvg │ │ ├── blackboard.tvg │ │ ├── block.tvg │ │ ├── book.tvg │ │ ├── bookmark.tvg │ │ ├── bookmarks.tvg │ │ ├── bowl.tvg │ │ ├── box.tvg │ │ ├── briefcase.tvg │ │ ├── browser.tvg │ │ ├── brush.tvg │ │ ├── bucket.tvg │ │ ├── bug.tvg │ │ ├── cake.tvg │ │ ├── calculator.tvg │ │ ├── calendar.tvg │ │ ├── camera.tvg │ │ ├── ccw.tvg │ │ ├── chat.tvg │ │ ├── check.tvg │ │ ├── chevron-down.tvg │ │ ├── chevron-left.tvg │ │ ├── chevron-right.tvg │ │ ├── chevron-small-down.tvg │ │ ├── chevron-small-left.tvg │ │ ├── chevron-small-right.tvg │ │ ├── chevron-small-up.tvg │ │ ├── chevron-thin-down.tvg │ │ ├── chevron-thin-left.tvg │ │ ├── chevron-thin-right.tvg │ │ ├── chevron-thin-up.tvg │ │ ├── chevron-up.tvg │ │ ├── chevron-with-circle-down.tvg │ │ ├── chevron-with-circle-left.tvg │ │ ├── chevron-with-circle-right.tvg │ │ ├── chevron-with-circle-up.tvg │ │ ├── circle-with-cross.tvg │ │ ├── circle-with-minus.tvg │ │ ├── circle-with-plus.tvg │ │ ├── circle.tvg │ │ ├── circular-graph.tvg │ │ ├── clapperboard.tvg │ │ ├── classic-computer.tvg │ │ ├── clipboard.tvg │ │ ├── clock.tvg │ │ ├── cloud.tvg │ │ ├── code.tvg │ │ ├── cog.tvg │ │ ├── colours.tvg │ │ ├── compass.tvg │ │ ├── controller-fast-backward.tvg │ │ ├── controller-fast-forward.tvg │ │ ├── controller-jump-to-start.tvg │ │ ├── controller-next.tvg │ │ ├── controller-pause.tvg │ │ ├── controller-play.tvg │ │ ├── controller-record.tvg │ │ ├── controller-stop.tvg │ │ ├── controller-volume.tvg │ │ ├── copy.tvg │ │ ├── creative-commons-attribution.tvg │ │ ├── creative-commons-noderivs.tvg │ │ ├── creative-commons-noncommercial-eu.tvg │ │ ├── creative-commons-noncommercial-us.tvg │ │ ├── creative-commons-public-domain.tvg │ │ ├── creative-commons-remix.tvg │ │ ├── creative-commons-share.tvg │ │ ├── creative-commons-sharealike.tvg │ │ ├── creative-commons.tvg │ │ ├── credit-card.tvg │ │ ├── credit.tvg │ │ ├── crop.tvg │ │ ├── cross.tvg │ │ ├── cup.tvg │ │ ├── cw.tvg │ │ ├── cycle.tvg │ │ ├── database.tvg │ │ ├── dial-pad.tvg │ │ ├── direction.tvg │ │ ├── document-landscape.tvg │ │ ├── document.tvg │ │ ├── documents.tvg │ │ ├── dot-single.tvg │ │ ├── dots-three-horizontal.tvg │ │ ├── dots-three-vertical.tvg │ │ ├── dots-two-horizontal.tvg │ │ ├── dots-two-vertical.tvg │ │ ├── download.tvg │ │ ├── drink.tvg │ │ ├── drive.tvg │ │ ├── drop.tvg │ │ ├── dropbox.tvg │ │ ├── edit.tvg │ │ ├── email.tvg │ │ ├── emoji-flirt.tvg │ │ ├── emoji-happy.tvg │ │ ├── emoji-neutral.tvg │ │ ├── emoji-sad.tvg │ │ ├── erase.tvg │ │ ├── eraser.tvg │ │ ├── export.tvg │ │ ├── eye-with-line.tvg │ │ ├── eye.tvg │ │ ├── feather.tvg │ │ ├── fingerprint.tvg │ │ ├── flag.tvg │ │ ├── flash.tvg │ │ ├── flashlight.tvg │ │ ├── flat-brush.tvg │ │ ├── flow-branch.tvg │ │ ├── flow-cascade.tvg │ │ ├── flow-line.tvg │ │ ├── flow-parallel.tvg │ │ ├── flow-tree.tvg │ │ ├── flower.tvg │ │ ├── folder-images.tvg │ │ ├── folder-music.tvg │ │ ├── folder-video.tvg │ │ ├── folder.tvg │ │ ├── forward.tvg │ │ ├── funnel.tvg │ │ ├── game-controller.tvg │ │ ├── gauge.tvg │ │ ├── globe.tvg │ │ ├── graduation-cap.tvg │ │ ├── grid.tvg │ │ ├── hair-cross.tvg │ │ ├── hand.tvg │ │ ├── heart-outlined.tvg │ │ ├── heart.tvg │ │ ├── help-with-circle.tvg │ │ ├── help.tvg │ │ ├── home.tvg │ │ ├── hour-glass.tvg │ │ ├── image-inverted.tvg │ │ ├── image.tvg │ │ ├── images.tvg │ │ ├── inbox.tvg │ │ ├── infinity.tvg │ │ ├── info-with-circle.tvg │ │ ├── info.tvg │ │ ├── install.tvg │ │ ├── key.tvg │ │ ├── keyboard.tvg │ │ ├── lab-flask.tvg │ │ ├── landline.tvg │ │ ├── language.tvg │ │ ├── laptop.tvg │ │ ├── layers.tvg │ │ ├── leaf.tvg │ │ ├── level-down.tvg │ │ ├── level-up.tvg │ │ ├── lifebuoy.tvg │ │ ├── light-bulb.tvg │ │ ├── light-down.tvg │ │ ├── light-up.tvg │ │ ├── line-graph.tvg │ │ ├── link.tvg │ │ ├── list.tvg │ │ ├── location-pin.tvg │ │ ├── location.tvg │ │ ├── lock-open.tvg │ │ ├── lock.tvg │ │ ├── log-out.tvg │ │ ├── login.tvg │ │ ├── loop.tvg │ │ ├── magnet.tvg │ │ ├── magnifying-glass.tvg │ │ ├── mail-with-circle.tvg │ │ ├── mail.tvg │ │ ├── man.tvg │ │ ├── map.tvg │ │ ├── mask.tvg │ │ ├── medal.tvg │ │ ├── megaphone.tvg │ │ ├── menu.tvg │ │ ├── merge.tvg │ │ ├── message.tvg │ │ ├── mic.tvg │ │ ├── minus.tvg │ │ ├── mobile.tvg │ │ ├── modern-mic.tvg │ │ ├── moon.tvg │ │ ├── mouse-pointer.tvg │ │ ├── mouse.tvg │ │ ├── music.tvg │ │ ├── network.tvg │ │ ├── new-message.tvg │ │ ├── new.tvg │ │ ├── news.tvg │ │ ├── newsletter.tvg │ │ ├── note.tvg │ │ ├── notification.tvg │ │ ├── notifications-off.tvg │ │ ├── old-mobile.tvg │ │ ├── old-phone.tvg │ │ ├── open-book.tvg │ │ ├── palette.tvg │ │ ├── paper-plane.tvg │ │ ├── pencil.tvg │ │ ├── phone.tvg │ │ ├── pie-chart.tvg │ │ ├── pin.tvg │ │ ├── plus.tvg │ │ ├── popup.tvg │ │ ├── power-plug.tvg │ │ ├── price-ribbon.tvg │ │ ├── price-tag.tvg │ │ ├── print.tvg │ │ ├── progress-empty.tvg │ │ ├── progress-full.tvg │ │ ├── progress-one.tvg │ │ ├── progress-two.tvg │ │ ├── publish.tvg │ │ ├── quote.tvg │ │ ├── radio.tvg │ │ ├── rainbow.tvg │ │ ├── remove-user.tvg │ │ ├── reply-all.tvg │ │ ├── reply.tvg │ │ ├── resize-100.tvg │ │ ├── resize-full-screen.tvg │ │ ├── retweet.tvg │ │ ├── rocket.tvg │ │ ├── round-brush.tvg │ │ ├── rss.tvg │ │ ├── ruler.tvg │ │ ├── save.tvg │ │ ├── scissors.tvg │ │ ├── select-arrows.tvg │ │ ├── share-alternative.tvg │ │ ├── share.tvg │ │ ├── shareable.tvg │ │ ├── shield.tvg │ │ ├── shop.tvg │ │ ├── shopping-bag.tvg │ │ ├── shopping-basket.tvg │ │ ├── shopping-cart.tvg │ │ ├── shuffle.tvg │ │ ├── signal.tvg │ │ ├── sound-mix.tvg │ │ ├── sound-mute.tvg │ │ ├── sound.tvg │ │ ├── sports-club.tvg │ │ ├── spreadsheet.tvg │ │ ├── squared-cross.tvg │ │ ├── squared-minus.tvg │ │ ├── squared-plus.tvg │ │ ├── star-outlined.tvg │ │ ├── star.tvg │ │ ├── stopwatch.tvg │ │ ├── suitcase.tvg │ │ ├── swap.tvg │ │ ├── swarm.tvg │ │ ├── switch.tvg │ │ ├── tablet-mobile-combo.tvg │ │ ├── tablet.tvg │ │ ├── tag.tvg │ │ ├── tail-spin.tvg │ │ ├── text-document-inverted.tvg │ │ ├── text-document.tvg │ │ ├── text.tvg │ │ ├── thermometer.tvg │ │ ├── thumbs-down.tvg │ │ ├── thumbs-up.tvg │ │ ├── thunder-cloud.tvg │ │ ├── ticket.tvg │ │ ├── time-slot.tvg │ │ ├── tools.tvg │ │ ├── traffic-cone.tvg │ │ ├── trash.tvg │ │ ├── tree.tvg │ │ ├── triangle-down.tvg │ │ ├── triangle-left.tvg │ │ ├── triangle-right.tvg │ │ ├── triangle-up.tvg │ │ ├── trophy.tvg │ │ ├── tv.tvg │ │ ├── typing.tvg │ │ ├── uninstall.tvg │ │ ├── unread.tvg │ │ ├── untag.tvg │ │ ├── upload-to-cloud.tvg │ │ ├── upload.tvg │ │ ├── user.tvg │ │ ├── users.tvg │ │ ├── v-card.tvg │ │ ├── video-camera.tvg │ │ ├── video.tvg │ │ ├── vinyl.tvg │ │ ├── voicemail.tvg │ │ ├── wallet.tvg │ │ ├── warning.tvg │ │ └── water.tvg ├── import_widgets.zig ├── main.manifest ├── shrinking_arena_allocator.zig ├── stb │ ├── stb_image.h │ ├── stb_image_impl.c │ ├── stb_image_libc.c │ ├── stb_image_write.h │ ├── stb_image_write_impl.c │ ├── stb_truetype.h │ ├── stb_truetype_impl.c │ └── stb_truetype_libc.c ├── structEntry.zig ├── testing.zig ├── tfd │ ├── tinyfiledialogs.c │ └── tinyfiledialogs.h ├── themes │ ├── Adwaita.zig │ ├── adwaita_dark.json │ ├── adwaita_light.json │ ├── dracula.json │ ├── gruvbox.json │ ├── jungle.json │ └── opendyslexic.json ├── widgets │ ├── AnimateWidget.zig │ ├── BoxWidget.zig │ ├── ButtonWidget.zig │ ├── CacheWidget.zig │ ├── ColorPickerWidget.zig │ ├── ContextWidget.zig │ ├── DropdownWidget.zig │ ├── FlexBoxWidget.zig │ ├── FloatingMenuWidget.zig │ ├── FloatingTooltipWidget.zig │ ├── FloatingWidget.zig │ ├── FloatingWindowWidget.zig │ ├── GridWidget.zig │ ├── IconWidget.zig │ ├── LabelWidget.zig │ ├── MenuItemWidget.zig │ ├── MenuWidget.zig │ ├── OverlayWidget.zig │ ├── PanedWidget.zig │ ├── PlotWidget.zig │ ├── ReorderWidget.zig │ ├── ScaleWidget.zig │ ├── ScrollAreaWidget.zig │ ├── ScrollBarWidget.zig │ ├── ScrollContainerWidget.zig │ ├── SuggestionWidget.zig │ ├── TabsWidget.zig │ ├── TextEntryWidget.zig │ ├── TextLayoutWidget.zig │ └── VirtualParentWidget.zig └── zig-favicon.png └── todo.txt /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | # Controls when the workflow will run 4 | on: 5 | # Triggers the workflow on push or pull request events but only for the $default-branch branch 6 | push: 7 | branches: [$default-branch] 8 | pull_request: 9 | workflow_dispatch: 10 | 11 | jobs: 12 | test: 13 | runs-on: ubuntu-latest 14 | name: Build and test 15 | 16 | # Steps represent a sequence of tasks that will be executed as part of the job 17 | steps: 18 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 19 | - uses: actions/checkout@v4 20 | # uses .minimum_zig_version from build.zig.zon 21 | - uses: mlugg/setup-zig@v2 22 | 23 | - name: Install libraries 24 | run: | 25 | sudo apt-get update 26 | sudo apt-get install mesa-common-dev libgl-dev libglx-dev libegl-dev libpulse-dev libxext-dev libxfixes-dev libxrender-dev libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-dev libwayland-dev libxkbcommon-dev 27 | 28 | - name: Compile 29 | run: zig build -Duse-lld=false # compile all backends 30 | 31 | - name: Run tests 32 | run: zig build test -Dbackend=testing -Duse-lld=false 33 | 34 | test-windows: 35 | runs-on: windows-latest 36 | name: Build and test Windows 37 | 38 | # Steps represent a sequence of tasks that will be executed as part of the job 39 | steps: 40 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 41 | - uses: actions/checkout@v4 42 | # uses .minimum_zig_version from build.zig.zon 43 | - uses: mlugg/setup-zig@v2 44 | 45 | - name: Compile Dx11 46 | run: zig build -Dbackend=dx11 47 | 48 | - name: Run tests 49 | run: zig build test -Dbackend=testing 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | snapshots/images 3 | zig-cache 4 | .zig-cache 5 | zig-out 6 | *.swp 7 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libs/curl"] 2 | path = libs/curl 3 | url = https://github.com/david-vanderson/curl 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) David Vanderson 4 | 5 | TinyVG Copyright (c) Felix Queißner 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /build.zig.zon: -------------------------------------------------------------------------------- 1 | .{ 2 | .name = .dvui, 3 | .fingerprint = 0xa35affe599490101, 4 | .version = "0.2.0", 5 | .minimum_zig_version = "0.14.0", 6 | .paths = .{""}, 7 | .dependencies = .{ 8 | .sdl = .{ 9 | .url = "git+https://github.com/david-vanderson/SDL#7c01b8a263915dc1aa0067d7ff9089dbe047cef9", 10 | .hash = "SDL-2.32.2-JToi31GUEgEEqcSkGTse-l1nCSkB30CRkWPAQ2moXSFp", 11 | .lazy = true, 12 | }, 13 | .sdl3 = .{ 14 | .url = "git+https://github.com/castholm/SDL#f6bbe8ac5e7b901db69ba62f017596090c362d84", 15 | .hash = "sdl-0.2.1+3.2.10-7uIn9PLkfQHKJO7TvSXbVa0VnySCHbLz28PDZIlKWF4Y", 16 | .lazy = true, 17 | }, 18 | .freetype = .{ 19 | .url = "git+https://github.com/rohlem/freetype-update-zig#a50182dc5787a8d49dd1ad922699a1c8771aa34a", 20 | .hash = "freetype-2.13.0-AAAAAI6NqAA4EbABl7qfk5qBFJQb2xjUIcP6SY7EBFvJ", 21 | .lazy = true, 22 | }, 23 | .raylib = .{ 24 | .url = "git+https://github.com/raysan5/raylib#688a81d3334c789493b24617778a334ac786f52e", 25 | .hash = "raylib-5.5.0-whq8uFq2NATO2aMsuIJtFw9YBQyYfVbO-ln5TAvN0bWP", 26 | .lazy = true, 27 | }, 28 | //used in the raylib-ontop example 29 | .raygui = .{ 30 | .url = "https://github.com/raysan5/raygui/archive/33f1659.tar.gz", 31 | .hash = "N-V-__8AAAHFTwBfBg00dnFXcYkNbjC8BSyi1CDcrnh12ypL", 32 | .lazy = true, 33 | }, 34 | // required for the directx11 backend 35 | .win32 = .{ 36 | .url = "git+https://github.com/marlersoft/zigwin32#be58d3816810c1e4c20781cc7223a60906467d3c", 37 | .hash = "zigwin32-25.0.28-preview-AAAAAHsJ-wPA4nREAzT_OOkF6gLrornNuHqREfHDADoS", 38 | .lazy = true, 39 | }, 40 | // for rendering tvg icons 41 | .svg2tvg = .{ 42 | .url = "git+https://github.com/nat3Github/zig-lib-svg2tvg#628e32e87e7a2f57493a4af1b70870877e461358", 43 | .hash = "svg2tvg-0.0.0-HpMZuTN2BgAWaLEMONTjaMrPki2_9x6KJZtO4W7NNHh2", 44 | }, 45 | }, 46 | } 47 | -------------------------------------------------------------------------------- /docs/add_doc_logo.zig: -------------------------------------------------------------------------------- 1 | //! Stupid script to insert the DVUI logo in autodocs. 2 | //! 3 | //! Replace a string tag by base64 encoding version of the logos, and is 4 | //! called by the build system, so this is easy to change the logo. 5 | 6 | const std = @import("std"); 7 | const Encoder = std.base64.standard.Encoder; 8 | const Decoder = std.base64.standard.Decoder; 9 | 10 | pub fn main() !void { 11 | var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); 12 | defer arena.deinit(); 13 | const allocator = arena.allocator(); 14 | 15 | // Get files via arguments (passed by build system) 16 | const args = try std.process.argsAlloc(allocator); 17 | 18 | // Open and read the files 19 | var html_file = try std.fs.openFileAbsolute(args[1], .{}); 20 | defer html_file.close(); 21 | const html = try html_file.readToEndAlloc(allocator, std.math.maxInt(usize)); 22 | 23 | var favico_file = try std.fs.openFileAbsolute(args[2], .{}); 24 | defer favico_file.close(); 25 | const favico = try favico_file.readToEndAlloc(allocator, std.math.maxInt(usize)); 26 | 27 | var logo_file = try std.fs.openFileAbsolute(args[3], .{}); 28 | defer logo_file.close(); 29 | const logo = try logo_file.readToEndAlloc(allocator, std.math.maxInt(usize)); 30 | 31 | // Encode images 32 | const fav_len = Encoder.calcSize(favico.len); 33 | const b64_favico = try allocator.alloc(u8, fav_len); 34 | _ = Encoder.encode(b64_favico, favico); 35 | const logo_len = Encoder.calcSize(logo.len); 36 | const b64_logo = try allocator.alloc(u8, logo_len); 37 | _ = Encoder.encode(b64_logo, logo); 38 | 39 | // Replace needles 40 | var html_out = try std.mem.replaceOwned(u8, allocator, html, "B64_FAVICON_DATA_TO_INSERT_HERE", b64_favico); 41 | html_out = try std.mem.replaceOwned(u8, allocator, html_out, "B64_LOGO_DATA_TO_INSERT_HERE", b64_logo); 42 | 43 | // Output resulting html file for the build system to do it's magic. 44 | try std.io.getStdOut().writer().writeAll(html_out); 45 | } 46 | -------------------------------------------------------------------------------- /docs/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/image_gen_test_runner.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const builtin = @import("builtin"); 3 | 4 | pub const std_options = std.Options{ 5 | .log_level = .warn, 6 | }; 7 | 8 | pub const DvuiDocGenRunner = @This(); 9 | 10 | pub fn main() !void { 11 | const test_fn_list: []const std.builtin.TestFn = builtin.test_functions; 12 | for (test_fn_list) |test_fn| { 13 | try test_fn.func(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/logo.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /docs/readme-docs.md: -------------------------------------------------------------------------------- 1 | # How to 2 | 3 | Just run `zig build docs` 4 | 5 | This will generate the docs, ready for static server, in `zig-out/docs` 6 | 7 | Viewing in local can be achieve with, for exemple : 8 | - `python -m http.server -d zig-out/docs/` 9 | - `caddy file-server --root zig-out/docs/ --listen :8000` 10 | 11 | Note that `zig build docs --watch` should works beautifully. 12 | I also add success temporarily adding in the `` section of `docs/index.html` : 13 | ` ` 14 | For a full auto reload experience. Cool enough to be mentioned. 15 | 16 | # About Images 17 | 18 | Images/screenshots are integrated in the docs. It works by : 19 | 20 | - Declaring a `test` block whose name ends with `.png` 21 | - Said test block should use `dvui.testing.saveDocImage` function 22 | - It relies on `docs/image_gen_test_runner.zig` test runner to provide a path. 23 | - To use the image, use the markdown image syntax with the test name. 24 | 25 | e.g. : 26 | - `test "my-image.png" { // declare gui element and call dvui.testing.saveDocImage }` 27 | - `/// ![image description](my-image.png)` 28 | 29 | 30 | # About Customization 31 | 32 | Simple Customization of the logo is performed with `docs/add_doc_logo.zig` that is automatically called via the `build.zig`. 33 | 34 | `docs/index.html` is mostly a copy paste of the default one generated by the zig tool chain. 35 | 36 | Changes : 37 | - Removed logo and favico for a NEEDLE_STRING that is replaced at build time. 38 | - Played a bit around with the colors to roughly match Web Demo style 39 | 40 | ## Note to future self (or other future people) 41 | 42 | It's possible (likely ?) that zig update will change stuff enough to make the current `index.html` broken at some point. 43 | In which case one would need to comment out the "Html Customization" section in `build.zig`, build the docs, copy-paste the default `index.html` and reapply the relevant changes. 44 | 45 | # CI 46 | 47 | TODO 48 | -------------------------------------------------------------------------------- /examples/zig-favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/examples/zig-favicon.png -------------------------------------------------------------------------------- /screenshot_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/screenshot_demo.png -------------------------------------------------------------------------------- /snapshots/app.zig-test.snapshot-0: -------------------------------------------------------------------------------- 1 | 4598DC1A661EBC58 -------------------------------------------------------------------------------- /snapshots/app.zig-test.snapshot-1: -------------------------------------------------------------------------------- 1 | A3F10E876E37B553 -------------------------------------------------------------------------------- /src/App.zig: -------------------------------------------------------------------------------- 1 | //! For apps that want dvui to provide the mainloop which runs these callbacks. 2 | //! 3 | //! In your root file, have a declaration named "dvui_app" of this type: 4 | //! ``` 5 | //! pub const dvui_app: dvui.App = .{ .initFn = AppInit, ...}; 6 | //! ``` 7 | //! 8 | //! Also must use the App's main, panic and log functions: 9 | //! ``` 10 | //! pub const main = dvui.App.main; 11 | //! pub const panic = dvui.App.panic; 12 | //! pub const std_options: std.Options = .{ 13 | //! .logFn = dvui.App.logFn, 14 | //! }; 15 | //! ``` 16 | 17 | pub const App = @This(); 18 | 19 | /// The configuration options for the app, either directly or a function that 20 | /// is run at startup that returns the options. 21 | config: AppConfig, 22 | /// Runs before the first frame, allowing for configuring the Window. Window 23 | /// and Backend have run init() already. 24 | initFn: ?fn (*dvui.Window) void = null, 25 | /// Runs when the app is exiting, before Window.deinit(). 26 | deinitFn: ?fn () void = null, 27 | /// Runs once every frame between `Window.begin` and `Window.end` 28 | /// 29 | /// Returns whether the app should continue running or close. 30 | frameFn: frameFunction, 31 | 32 | pub const frameFunction = fn () anyerror!Result; 33 | 34 | fn nop_main() !void {} 35 | /// The root file needs to expose the App main function: 36 | /// ``` 37 | /// pub const main = dvui.App.main; 38 | /// ``` 39 | pub const main = if (@hasDecl(dvui.backend, "main")) dvui.backend.main else nop_main; 40 | 41 | /// The root file needs to expose the App panic function: 42 | /// ``` 43 | /// pub const panic = dvui.App.panic; 44 | /// ``` 45 | pub const panic = if (@hasDecl(dvui.backend, "panic")) dvui.backend.panic else std.debug.FullPanic(std.debug.defaultPanic); 46 | 47 | /// Some backends, like web, cannot use stdout and has a custom logFn to be used. 48 | /// Dvui apps should always prefer to use std.log over stdout to work across all backends. 49 | /// 50 | /// The root file needs to use the App logFn function: 51 | /// ``` 52 | /// pub const std_options: std.Options = .{ 53 | /// .logFn = dvui.App.logFn, 54 | /// }; 55 | /// ``` 56 | pub const logFn: @FieldType(std.Options, "logFn") = if (@hasDecl(dvui.backend, "logFn")) dvui.backend.logFn else std.log.defaultLog; 57 | 58 | pub const AppConfig = union(enum) { 59 | options: StartOptions, 60 | /// Runs before anything else. Can be used to programmatically create the `StartOptions` 61 | startFn: fn () StartOptions, 62 | 63 | pub fn get(self: AppConfig) StartOptions { 64 | switch (self) { 65 | .options => |opts| return opts, 66 | .startFn => |startFn| return startFn(), 67 | } 68 | } 69 | }; 70 | 71 | pub const StartOptions = struct { 72 | /// The initial size of the application window 73 | size: dvui.Size, 74 | /// Set the minimum size of the window 75 | min_size: ?dvui.Size = null, 76 | /// Set the maximum size of the window 77 | max_size: ?dvui.Size = null, 78 | vsync: bool = true, 79 | /// The application title to display 80 | title: [:0]const u8, 81 | /// content of a PNG image (or any other format stb_image can load) 82 | /// tip: use @embedFile 83 | icon: ?[]const u8 = null, 84 | /// use when running tests 85 | hidden: bool = false, 86 | }; 87 | 88 | pub const Result = enum { 89 | /// App should continue 90 | ok, 91 | /// App should close and exit 92 | close, 93 | }; 94 | 95 | /// Used internally to get the dvui_app if it's defined 96 | pub fn get() ?App { 97 | const root = @import("root"); 98 | // return error instead of failing compile to allow for reference in tests without dvui_app defined 99 | if (!@hasDecl(root, "dvui_app")) return null; 100 | 101 | if (!@hasDecl(root, "main") or @field(root, "main") != main) { 102 | @compileError( 103 | \\Using the App interface requires using the App main function 104 | \\ 105 | \\Add the following line to your root file: 106 | \\pub const main = dvui.App.main; 107 | ); 108 | } 109 | 110 | return root.dvui_app; 111 | } 112 | 113 | const std = @import("std"); 114 | const dvui = @import("dvui.zig"); 115 | 116 | test { 117 | std.testing.refAllDecls(@This()); 118 | } 119 | -------------------------------------------------------------------------------- /src/Point.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("dvui.zig"); 3 | 4 | pub const Point = PointType(.none); 5 | 6 | pub fn PointType(comptime units: dvui.enums.Units) type { 7 | return struct { 8 | const Self = @This(); 9 | 10 | x: f32 = 0, 11 | y: f32 = 0, 12 | 13 | /// Natural pixels is the unit for subwindows. It differs from 14 | /// physical pixels on hidpi screens or with content scaling. 15 | pub const Natural = if (units == .none) PointType(.natural) else @compileError("tried to nest Point.Natural"); 16 | 17 | /// Physical pixels is the units for rendering and dvui events. 18 | /// Regardless of dpi or content scaling, physical pixels always 19 | /// matches the output screen. 20 | /// 21 | /// To convert between Point and Point.Physical, use `RectScale.pointToPhysical` and `RectScale.pointFromPhysical` 22 | pub const Physical = if (units == .none) PointType(.physical) else @compileError("tried to nest Point.Physical"); 23 | 24 | pub fn cast(point: anytype) Self { 25 | return .{ .x = point.x, .y = point.y }; 26 | } 27 | 28 | pub fn nonZero(self: *const Self) bool { 29 | return (self.x != 0 or self.y != 0); 30 | } 31 | 32 | pub fn plus(self: *const Self, b: Self) Self { 33 | return .{ .x = self.x + b.x, .y = self.y + b.y }; 34 | } 35 | 36 | pub fn diff(a: Self, b: Self) Self { 37 | return .{ .x = a.x - b.x, .y = a.y - b.y }; 38 | } 39 | 40 | pub fn min(a: Self, b: Self) Self { 41 | return .{ .x = @min(a.x, b.x), .y = @min(a.y, b.y) }; 42 | } 43 | 44 | pub fn max(a: Self, b: Self) Self { 45 | return .{ .x = @max(a.x, b.x), .y = @max(a.y, b.y) }; 46 | } 47 | 48 | /// Pass the scale and the type of Point it now represents. 49 | pub fn scale(self: *const Self, s: f32, pointType: type) pointType { 50 | return pointType{ .x = self.x * s, .y = self.y * s }; 51 | } 52 | 53 | pub fn equals(self: *const Self, b: Self) bool { 54 | return (self.x == b.x and self.y == b.y); 55 | } 56 | 57 | pub fn length(self: *const Self) f32 { 58 | return @sqrt((self.x * self.x) + (self.y * self.y)); 59 | } 60 | 61 | pub fn normalize(self: *const Self) Self { 62 | const d2 = self.x * self.x + self.y * self.y; 63 | if (d2 == 0) { 64 | return Self{ .x = 1.0, .y = 0.0 }; 65 | } else { 66 | const inv_len = 1.0 / @sqrt(d2); 67 | return Self{ .x = self.x * inv_len, .y = self.y * inv_len }; 68 | } 69 | } 70 | 71 | /// Only valid between `dvui.Window.begin`and `dvui.Window.end`. 72 | pub fn toNatural(self: Point.Physical) Point.Natural { 73 | return self.scale(1 / dvui.windowNaturalScale(), Point.Natural); 74 | } 75 | 76 | pub fn format(self: *const Self, comptime _: []const u8, _: std.fmt.FormatOptions, writer: anytype) !void { 77 | const type_name = switch (units) { 78 | .none => "Point", 79 | .natural => "Point.Natural", 80 | .physical => "Point.Physical", 81 | }; 82 | try std.fmt.format(writer, "{s}{{ {d} {d} }}", .{ type_name, self.x, self.y }); 83 | } 84 | }; 85 | } 86 | 87 | test { 88 | @import("std").testing.refAllDecls(@This()); 89 | } 90 | -------------------------------------------------------------------------------- /src/RectScale.zig: -------------------------------------------------------------------------------- 1 | const dvui = @import("dvui.zig"); 2 | 3 | const Point = dvui.Point; 4 | const Rect = dvui.Rect; 5 | 6 | const RectScale = @This(); 7 | 8 | r: Rect.Physical = .{}, 9 | s: f32 = 1.0, 10 | 11 | pub fn rectToRectScale(rs: *const RectScale, r: Rect) RectScale { 12 | return .{ .r = r.scale(rs.s, Rect.Physical).offset(rs.r), .s = rs.s }; 13 | } 14 | 15 | pub fn rectToPhysical(rs: *const RectScale, r: Rect) Rect.Physical { 16 | return r.scale(rs.s, Rect.Physical).offset(rs.r); 17 | } 18 | 19 | pub fn rectFromPhysical(rs: *const RectScale, r: Rect.Physical) Rect { 20 | return r.offsetNeg(rs.r).scale(1 / rs.s, Rect); 21 | } 22 | 23 | pub fn pointToPhysical(rs: *const RectScale, p: Point) Point.Physical { 24 | return p.scale(rs.s, Point.Physical).plus(rs.r.topLeft()); 25 | } 26 | 27 | pub fn pointFromPhysical(rs: *const RectScale, p: Point.Physical) Point { 28 | return p.diff(rs.r.topLeft()).scale(1 / rs.s, Point); 29 | } 30 | 31 | test { 32 | @import("std").testing.refAllDecls(@This()); 33 | } 34 | -------------------------------------------------------------------------------- /src/ScrollInfo.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("dvui.zig"); 3 | 4 | const Point = dvui.Point; 5 | const Rect = dvui.Rect; 6 | const Size = dvui.Size; 7 | 8 | const enums = dvui.enums; 9 | 10 | const ScrollInfo = @This(); 11 | 12 | pub const ScrollMode = enum { 13 | /// no scrolling 14 | none, 15 | /// virtual size calculated from children 16 | auto, 17 | /// virtual size left as given 18 | given, 19 | }; 20 | 21 | pub const ScrollBarMode = enum { 22 | /// no scrollbar 23 | hide, 24 | /// show scrollbar if viewport is smaller than virtual_size 25 | auto, 26 | /// overlay scrollbar on content if viewport is smaller than virtual_size 27 | auto_overlay, 28 | /// always show scrollbar 29 | show, 30 | 31 | pub fn autoAny(self: ScrollBarMode) bool { 32 | return self == .auto or self == .auto_overlay; 33 | } 34 | }; 35 | 36 | vertical: ScrollMode = .auto, 37 | horizontal: ScrollMode = .none, 38 | 39 | /// Minimum size needed to show all contents without scrolling. 40 | virtual_size: Size = Size{}, 41 | 42 | viewport: Rect = Rect{}, 43 | velocity: Point = Point{}, 44 | 45 | pub fn scrollMax(self: ScrollInfo, dir: enums.Direction) f32 { 46 | switch (dir) { 47 | .vertical => return @max(0.0, self.virtual_size.h - self.viewport.h), 48 | .horizontal => return @max(0.0, self.virtual_size.w - self.viewport.w), 49 | } 50 | } 51 | 52 | pub fn visibleFraction(self: ScrollInfo, dir: enums.Direction) f32 { 53 | const viewport_start = switch (dir) { 54 | .vertical => self.viewport.y, 55 | .horizontal => self.viewport.x, 56 | }; 57 | const viewport_size = switch (dir) { 58 | .vertical => self.viewport.h, 59 | .horizontal => self.viewport.w, 60 | }; 61 | const virtual_size = switch (dir) { 62 | .vertical => self.virtual_size.h, 63 | .horizontal => self.virtual_size.w, 64 | }; 65 | 66 | if (viewport_size == 0) return 1.0; 67 | 68 | const max_hard_scroll = self.scrollMax(dir); 69 | var length = @max(viewport_size, virtual_size); 70 | if (viewport_start < 0) { 71 | // temporarily adding the dead space we are showing 72 | length += -viewport_start; 73 | } else if (viewport_start > max_hard_scroll) { 74 | length += (viewport_start - max_hard_scroll); 75 | } 76 | 77 | return viewport_size / length; // <= 1 78 | } 79 | 80 | pub fn offset(self: ScrollInfo, dir: enums.Direction) f32 { 81 | return switch (dir) { 82 | .vertical => self.viewport.y, 83 | .horizontal => self.viewport.x, 84 | }; 85 | } 86 | 87 | pub fn offsetFraction(self: ScrollInfo, dir: enums.Direction) f32 { 88 | const viewport_start = switch (dir) { 89 | .vertical => self.viewport.y, 90 | .horizontal => self.viewport.x, 91 | }; 92 | const viewport_size = switch (dir) { 93 | .vertical => self.viewport.h, 94 | .horizontal => self.viewport.w, 95 | }; 96 | const virtual_size = switch (dir) { 97 | .vertical => self.virtual_size.h, 98 | .horizontal => self.virtual_size.w, 99 | }; 100 | 101 | if (viewport_size == 0) return 0; 102 | 103 | const max_hard_scroll = self.scrollMax(dir); 104 | var length = @max(viewport_size, virtual_size); 105 | if (viewport_start < 0) { 106 | // temporarily adding the dead space we are showing 107 | length += -viewport_start; 108 | } else if (viewport_start > max_hard_scroll) { 109 | length += (viewport_start - max_hard_scroll); 110 | } 111 | 112 | const max_scroll = @max(0, length - viewport_size); 113 | if (max_scroll == 0) return 0; 114 | 115 | return @max(0, @min(1.0, viewport_start / max_scroll)); 116 | } 117 | 118 | pub fn scrollByOffset(self: *ScrollInfo, dir: enums.Direction, off: f32) void { 119 | self.scrollToOffset(dir, self.offset(dir) + off); 120 | } 121 | 122 | pub fn scrollToOffset(self: *ScrollInfo, dir: enums.Direction, off: f32) void { 123 | switch (dir) { 124 | .vertical => self.viewport.y = std.math.clamp(off, 0, self.scrollMax(dir)), 125 | .horizontal => self.viewport.x = std.math.clamp(off, 0, self.scrollMax(dir)), 126 | } 127 | } 128 | 129 | pub fn scrollToFraction(self: *ScrollInfo, dir: enums.Direction, fin: f32) void { 130 | const f = @max(0, @min(1, fin)); 131 | switch (dir) { 132 | .vertical => self.viewport.y = f * self.scrollMax(dir), 133 | .horizontal => self.viewport.x = f * self.scrollMax(dir), 134 | } 135 | } 136 | 137 | /// Scrolls a viewport (screen) amount. 138 | /// dir: scroll vertically or horizontally 139 | /// up: true to scroll up or left, false to scroll down or right 140 | pub fn scrollPage(self: *ScrollInfo, dir: enums.Direction, up: bool) void { 141 | var fi = self.visibleFraction(dir); 142 | // the last page is offset fraction 1.0, so there is 143 | // one less scroll position between 0 and 1.0 144 | fi = 1.0 / ((1.0 / fi) - 1); 145 | var f: f32 = undefined; 146 | if (up) { 147 | f = self.offsetFraction(dir) - fi; 148 | } else { 149 | f = self.offsetFraction(dir) + fi; 150 | } 151 | self.scrollToFraction(dir, f); 152 | } 153 | 154 | pub fn scrollPageUp(self: *ScrollInfo, dir: enums.Direction) void { 155 | self.scrollPage(dir, true); 156 | } 157 | 158 | pub fn scrollPageDown(self: *ScrollInfo, dir: enums.Direction) void { 159 | self.scrollPage(dir, false); 160 | } 161 | 162 | test { 163 | @import("std").testing.refAllDecls(@This()); 164 | } 165 | -------------------------------------------------------------------------------- /src/Size.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("dvui.zig"); 3 | 4 | pub const Size = SizeType(.none); 5 | 6 | pub fn SizeType(comptime units: dvui.enums.Units) type { 7 | return struct { 8 | const Self = @This(); 9 | 10 | w: f32 = 0, 11 | h: f32 = 0, 12 | 13 | pub fn width(w: f32) Self { 14 | return .{ .w = w }; 15 | } 16 | 17 | pub fn height(h: f32) Self { 18 | return .{ .h = h }; 19 | } 20 | 21 | /// Natural pixels is the unit for subwindows. It differs from 22 | /// physical pixels on hidpi screens or with content scaling. 23 | pub const Natural = if (units == .none) SizeType(.natural) else @compileError("tried to nest Size.Natural"); 24 | 25 | /// Physical pixels is the units for rendering and dvui events. 26 | /// Regardless of dpi or content scaling, physical pixels always 27 | /// matches the output screen. 28 | pub const Physical = if (units == .none) SizeType(.physical) else @compileError("tried to nest Size.Physical"); 29 | 30 | pub const RectType = switch (units) { 31 | .none => dvui.Rect, 32 | .natural => dvui.Rect.Natural, 33 | .physical => dvui.Rect.Physical, 34 | }; 35 | 36 | pub fn cast(size: anytype) Self { 37 | return .{ .w = size.w, .h = size.h }; 38 | } 39 | 40 | pub fn all(v: f32) Self { 41 | return .{ .w = v, .h = v }; 42 | } 43 | 44 | pub fn ceil(self: *const Self) Self { 45 | return .{ .w = @ceil(self.w), .h = @ceil(self.h) }; 46 | } 47 | 48 | pub fn pad(s: *const Self, padding: RectType) Self { 49 | return .{ .w = s.w + padding.x + padding.w, .h = s.h + padding.y + padding.h }; 50 | } 51 | 52 | pub fn padNeg(s: *const Self, padding: RectType) Self { 53 | return .{ .w = @max(0, s.w - padding.x - padding.w), .h = @max(0, s.h - padding.y - padding.h) }; 54 | } 55 | 56 | pub fn max(a: Self, b: Self) Self { 57 | return .{ .w = @max(a.w, b.w), .h = @max(a.h, b.h) }; 58 | } 59 | 60 | pub fn min(a: Self, b: Self) Self { 61 | return .{ .w = @min(a.w, b.w), .h = @min(a.h, b.h) }; 62 | } 63 | 64 | /// Pass the scale and the type of Size it now represents. 65 | pub fn scale(self: *const Self, s: f32, sizeType: type) sizeType { 66 | return sizeType{ .w = self.w * s, .h = self.h * s }; 67 | } 68 | 69 | pub fn format(self: *const Self, comptime _: []const u8, _: std.fmt.FormatOptions, writer: anytype) !void { 70 | const type_name = switch (units) { 71 | .none => "Size", 72 | .natural => "Size.Natural", 73 | .physical => "Size.Physical", 74 | }; 75 | try std.fmt.format(writer, "{s}{{ {d} {d} }}", .{ type_name, self.w, self.h }); 76 | } 77 | }; 78 | } 79 | 80 | test { 81 | @import("std").testing.refAllDecls(@This()); 82 | } 83 | -------------------------------------------------------------------------------- /src/Vertex.zig: -------------------------------------------------------------------------------- 1 | const dvui = @import("dvui.zig"); 2 | 3 | pos: dvui.Point.Physical, 4 | col: dvui.Color.PMA, 5 | uv: @Vector(2, f32), 6 | 7 | test { 8 | @import("std").testing.refAllDecls(@This()); 9 | } 10 | -------------------------------------------------------------------------------- /src/Widget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("dvui.zig"); 3 | 4 | const Event = dvui.Event; 5 | const Options = dvui.Options; 6 | const Rect = dvui.Rect; 7 | const RectScale = dvui.RectScale; 8 | const Size = dvui.Size; 9 | const WidgetData = dvui.WidgetData; 10 | const WidgetId = dvui.WidgetId; 11 | 12 | const Widget = @This(); 13 | 14 | ptr: *anyopaque, 15 | vtable: *const VTable, 16 | 17 | const VTable = struct { 18 | data: *const fn (ptr: *anyopaque) *WidgetData, 19 | rectFor: *const fn (ptr: *anyopaque, id: WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect, 20 | screenRectScale: *const fn (ptr: *anyopaque, r: Rect) RectScale, 21 | minSizeForChild: *const fn (ptr: *anyopaque, s: Size) void, 22 | processEvent: *const fn (ptr: *anyopaque, e: *Event, bubbling: bool) void, 23 | }; 24 | 25 | pub fn init( 26 | pointer: anytype, 27 | comptime dataFn: fn (ptr: @TypeOf(pointer)) *WidgetData, 28 | comptime rectForFn: fn (ptr: @TypeOf(pointer), id: WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect, 29 | comptime screenRectScaleFn: fn (ptr: @TypeOf(pointer), r: Rect) RectScale, 30 | comptime minSizeForChildFn: fn (ptr: @TypeOf(pointer), s: Size) void, 31 | comptime processEventFn: fn (ptr: @TypeOf(pointer), e: *Event, bubbling: bool) void, 32 | ) Widget { 33 | const Ptr = @TypeOf(pointer); 34 | const ptr_info = @typeInfo(Ptr); 35 | std.debug.assert(ptr_info == .pointer); // Must be a pointer 36 | std.debug.assert(ptr_info.pointer.size == .one); // Must be a single-item pointer 37 | 38 | const gen = struct { 39 | fn dataImpl(ptr: *anyopaque) *WidgetData { 40 | const self = @as(Ptr, @ptrCast(@alignCast(ptr))); 41 | return @call(.always_inline, dataFn, .{self}); 42 | } 43 | 44 | fn rectForImpl(ptr: *anyopaque, id: WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 45 | const self = @as(Ptr, @ptrCast(@alignCast(ptr))); 46 | return @call(.always_inline, rectForFn, .{ self, id, min_size, e, g }); 47 | } 48 | 49 | fn screenRectScaleImpl(ptr: *anyopaque, r: Rect) RectScale { 50 | const self = @as(Ptr, @ptrCast(@alignCast(ptr))); 51 | return @call(.always_inline, screenRectScaleFn, .{ self, r }); 52 | } 53 | 54 | fn minSizeForChildImpl(ptr: *anyopaque, s: Size) void { 55 | const self = @as(Ptr, @ptrCast(@alignCast(ptr))); 56 | return @call(.always_inline, minSizeForChildFn, .{ self, s }); 57 | } 58 | 59 | fn processEventImpl(ptr: *anyopaque, e: *Event, bubbling: bool) void { 60 | const self = @as(Ptr, @ptrCast(@alignCast(ptr))); 61 | return @call(.always_inline, processEventFn, .{ self, e, bubbling }); 62 | } 63 | 64 | const vtable = VTable{ 65 | .data = dataImpl, 66 | .rectFor = rectForImpl, 67 | .screenRectScale = screenRectScaleImpl, 68 | .minSizeForChild = minSizeForChildImpl, 69 | .processEvent = processEventImpl, 70 | }; 71 | }; 72 | 73 | return .{ 74 | .ptr = pointer, 75 | .vtable = &gen.vtable, 76 | }; 77 | } 78 | 79 | pub fn data(self: Widget) *WidgetData { 80 | return self.vtable.data(self.ptr); 81 | } 82 | 83 | pub fn extendId(self: Widget, src: std.builtin.SourceLocation, id_extra: usize) dvui.WidgetId { 84 | return dvui.hashSrc(self.data().id, src, id_extra); 85 | } 86 | 87 | pub fn rectFor(self: Widget, id: WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 88 | return self.vtable.rectFor(self.ptr, id, min_size, e, g); 89 | } 90 | 91 | pub fn screenRectScale(self: Widget, r: Rect) RectScale { 92 | return self.vtable.screenRectScale(self.ptr, r); 93 | } 94 | 95 | pub fn minSizeForChild(self: Widget, s: Size) void { 96 | self.vtable.minSizeForChild(self.ptr, s); 97 | } 98 | 99 | pub fn processEvent(self: Widget, e: *Event, bubbling: bool) void { 100 | self.vtable.processEvent(self.ptr, e, bubbling); 101 | } 102 | 103 | test { 104 | @import("std").testing.refAllDecls(@This()); 105 | } 106 | -------------------------------------------------------------------------------- /src/backends/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | DVUI Web Backend 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/cacheBuster.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | // hash all input files, replace string "TEMPLATE_HASH" in template_file, write to stdout 4 | const usage = 5 | \\Usage: ./hash_files ... 6 | ; 7 | 8 | pub fn main() !void { 9 | var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator); 10 | defer arena_state.deinit(); 11 | const arena = arena_state.allocator(); 12 | 13 | const args = try std.process.argsAlloc(arena); 14 | var template_bytes: []u8 = &.{}; 15 | const Sha256 = std.crypto.hash.sha2.Sha256; 16 | var sha = Sha256.init(.{}); 17 | 18 | for (args, 0..) |arg, i| { 19 | if (i == 0) continue; 20 | 21 | var file = try std.fs.cwd().openFile(arg, .{}); 22 | const contents = try file.reader().readAllAlloc(arena, 100 * 1024 * 1024); 23 | if (i == 1) { 24 | template_bytes = contents; 25 | } else { 26 | sha.update(contents); 27 | } 28 | } 29 | 30 | var hash: [Sha256.digest_length]u8 = undefined; 31 | sha.final(&hash); 32 | 33 | const needle = "TEMPLATE_HASH_WITH_PADDING__ITS_64_BYTES_LONG_THE_SAME_AS_SHA256"; 34 | var pos: usize = 0; 35 | while (std.mem.indexOfPos(u8, template_bytes, pos, needle)) |idx| { 36 | pos = idx + needle.len; 37 | _ = try std.fmt.bufPrint(template_bytes[idx..][0..needle.len], "{s}", .{std.fmt.fmtSliceHexLower(&hash)}); 38 | } 39 | 40 | try std.io.getStdOut().writer().writeAll(template_bytes); 41 | } 42 | -------------------------------------------------------------------------------- /src/fonts/Aleo/Aleo-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/Aleo-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/Aleo-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/Aleo-VariableFont_wght.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2018 The Aleo Project Authors (https://github.com/AlessioLaiso/aleo) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /src/fonts/Aleo/README.txt: -------------------------------------------------------------------------------- 1 | Aleo Variable Font 2 | ================== 3 | 4 | This download contains Aleo as both variable fonts and static fonts. 5 | 6 | Aleo is a variable font with this axis: 7 | wght 8 | 9 | This means all the styles are contained in these files: 10 | Aleo/Aleo-VariableFont_wght.ttf 11 | Aleo/Aleo-Italic-VariableFont_wght.ttf 12 | 13 | If your app fully supports variable fonts, you can now pick intermediate styles 14 | that aren’t available as static fonts. Not all apps support variable fonts, and 15 | in those cases you can use the static font files for Aleo: 16 | Aleo/static/Aleo-Thin.ttf 17 | Aleo/static/Aleo-ExtraLight.ttf 18 | Aleo/static/Aleo-Light.ttf 19 | Aleo/static/Aleo-Regular.ttf 20 | Aleo/static/Aleo-Medium.ttf 21 | Aleo/static/Aleo-SemiBold.ttf 22 | Aleo/static/Aleo-Bold.ttf 23 | Aleo/static/Aleo-ExtraBold.ttf 24 | Aleo/static/Aleo-Black.ttf 25 | Aleo/static/Aleo-ThinItalic.ttf 26 | Aleo/static/Aleo-ExtraLightItalic.ttf 27 | Aleo/static/Aleo-LightItalic.ttf 28 | Aleo/static/Aleo-Italic.ttf 29 | Aleo/static/Aleo-MediumItalic.ttf 30 | Aleo/static/Aleo-SemiBoldItalic.ttf 31 | Aleo/static/Aleo-BoldItalic.ttf 32 | Aleo/static/Aleo-ExtraBoldItalic.ttf 33 | Aleo/static/Aleo-BlackItalic.ttf 34 | 35 | Get started 36 | ----------- 37 | 38 | 1. Install the font files you want to use 39 | 40 | 2. Use your app's font picker to view the font family and all the 41 | available styles 42 | 43 | Learn more about variable fonts 44 | ------------------------------- 45 | 46 | https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts 47 | https://variablefonts.typenetwork.com 48 | https://medium.com/variable-fonts 49 | 50 | In desktop apps 51 | 52 | https://theblog.adobe.com/can-variable-fonts-illustrator-cc 53 | https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts 54 | 55 | Online 56 | 57 | https://developers.google.com/fonts/docs/getting_started 58 | https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide 59 | https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts 60 | 61 | Installing fonts 62 | 63 | MacOS: https://support.apple.com/en-us/HT201749 64 | Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux 65 | Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows 66 | 67 | Android Apps 68 | 69 | https://developers.google.com/fonts/docs/android 70 | https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts 71 | 72 | License 73 | ------- 74 | Please read the full license text (OFL.txt) to understand the permissions, 75 | restrictions and requirements for usage, redistribution, and modification. 76 | 77 | You can use them in your products & projects – print or digital, 78 | commercial or otherwise. 79 | 80 | This isn't legal advice, please consider consulting a lawyer and see the full 81 | license for all details. 82 | -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Black.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-BlackItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Bold.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-BoldItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-ExtraBold.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-ExtraLight.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Italic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Light.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-LightItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Medium.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-MediumItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Regular.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-SemiBold.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-Thin.ttf -------------------------------------------------------------------------------- /src/fonts/Aleo/static/Aleo-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Aleo/static/Aleo-ThinItalic.ttf -------------------------------------------------------------------------------- /src/fonts/NotoSansKR-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/NotoSansKR-Regular.ttf -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019-07-29, Abbie Gonzalez (https://abbiecod.es|support@abbiecod.es), 2 | with Reserved Font Name OpenDyslexic. 3 | Copyright (c) 12/2012 - 2019 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/README.md: -------------------------------------------------------------------------------- 1 | # ReadMe 2 | 3 | This is OpenDyslexic, recreated in SIL-OFL. antijingoist/opendyslexic will be the official OpenDyslexic repo. It is an opensource typeface that aims to help with some of the symptoms of dyslexia, as defined by the DSM-V. 4 | 5 | ## Why? 6 | 7 | The Bitstream license was too restrictive, and my attempts at clarifying what was allowed (pretty much anything) just confused everything even more. I should have also done it from the start. 8 | 9 | Also.... easier to correct some mistakes when starting from scratch. 10 | 11 | ## Styles 12 | 13 | OpenDyslexic, in Regular, Bold, Italic, and BoldItalic. Also, OpenDyslexic Mono, and OpenDyslexic Rounded: intentionally lower contrast. 14 | 15 | ## Features? 16 | 17 | * Not Comic Sans (J/K I like Comic Sans) 18 | * OpenDyslexic aims to use unique letter shapes to make recognizing text easier. 19 | * Longer ascenders and descenders to better distinguish caps, lowercase, and similar lowercase letters. 20 | * Bolder bottoms of letters to communicate orientation, and better help differentiate between letters like pqdb. Similar to having an underlined _6_ so the similar looking 6 and 9 can be told apart in a game. 21 | * Bolder punctuation shows more clearly. 22 | * Wider spacing for easier tracking. 23 | * Lower contrast design to help with glare/blindness: the occasional blank paper with text on it. 24 | * Larger space between lines. 25 | 26 | OpenDyslexic now also includes: 27 | 28 | * Color symbols and punctuation 29 | * More characters. I tried to include it all. 30 | 31 | ## Submissions 32 | 33 | Open-Dyslexic submissions were messy because they mostly came in compiled typeface files, creating a lot of work in comparing files, properly pulling them from the compiled typeface and moving them over to the app native source being used. 34 | 35 | As such, submissions are accepted as long as: 36 | * it's provided as a pull request against the typeface source 37 | * it's submitted as an SVG document 38 | 39 | ## Allowed uses: 40 | 41 | _see OFL-FAQ.txt_ 42 | 43 | ## Re-hosting 44 | 45 | KISS. If you put it on a CDN to share, let me know, and I can include links. 46 | 47 | ## Sharing Products 48 | 49 | I'll work on a submission process for this. E-mail wasn't the best place to receive these. In the meantime.... support.abbiecod.es 50 | 51 | ## Attribution 52 | 53 | _the OFL-FAQ.txt document is fantastic at frequently asked questions, and it contains information about this also. :)_ 54 | 55 | If you _need_ my *preferred* attribution method: 56 | 57 | * Include name, typeface name and URL so others know where to find it. 58 | 59 | ## Privacy policy 60 | 61 | Typefaces don't gather any information, so no need to worry about that. 62 | Everything from downloads to websites are provided by the service. 63 | 64 | ## Filling out school/business forms 65 | 66 | If you need a form for your school or business, create a support request (support.abbiecod.es) and please be patient. 🤞🏼 You can speed up turn around time by asking for the information you need for the form separately, or pre-filling the parts you know. 67 | 68 | Some of these forms are upwards of 20 pages of information that needs to be filled out yearly. 69 | -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/compiled/OpenDyslexic-Bold-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/OpenDyslexic/compiled/OpenDyslexic-Bold-Italic.otf -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/compiled/OpenDyslexic-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/OpenDyslexic/compiled/OpenDyslexic-Bold.otf -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/compiled/OpenDyslexic-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/OpenDyslexic/compiled/OpenDyslexic-Italic.otf -------------------------------------------------------------------------------- /src/fonts/OpenDyslexic/compiled/OpenDyslexic-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/OpenDyslexic/compiled/OpenDyslexic-Regular.otf -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2021 The Pixelify Sans Project Authors (https://github.com/eifetx/Pixelify-Sans) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | https://openfontlicense.org 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/PixelifySans-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Pixelify_Sans/PixelifySans-VariableFont_wght.ttf -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/README.txt: -------------------------------------------------------------------------------- 1 | Pixelify Sans Variable Font 2 | =========================== 3 | 4 | This download contains Pixelify Sans as both a variable font and static fonts. 5 | 6 | Pixelify Sans is a variable font with this axis: 7 | wght 8 | 9 | This means all the styles are contained in a single file: 10 | PixelifySans-VariableFont_wght.ttf 11 | 12 | If your app fully supports variable fonts, you can now pick intermediate styles 13 | that aren’t available as static fonts. Not all apps support variable fonts, and 14 | in those cases you can use the static font files for Pixelify Sans: 15 | static/PixelifySans-Regular.ttf 16 | static/PixelifySans-Medium.ttf 17 | static/PixelifySans-SemiBold.ttf 18 | static/PixelifySans-Bold.ttf 19 | 20 | Get started 21 | ----------- 22 | 23 | 1. Install the font files you want to use 24 | 25 | 2. Use your app's font picker to view the font family and all the 26 | available styles 27 | 28 | Learn more about variable fonts 29 | ------------------------------- 30 | 31 | https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts 32 | https://variablefonts.typenetwork.com 33 | https://medium.com/variable-fonts 34 | 35 | In desktop apps 36 | 37 | https://theblog.adobe.com/can-variable-fonts-illustrator-cc 38 | https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts 39 | 40 | Online 41 | 42 | https://developers.google.com/fonts/docs/getting_started 43 | https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide 44 | https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts 45 | 46 | Installing fonts 47 | 48 | MacOS: https://support.apple.com/en-us/HT201749 49 | Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux 50 | Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows 51 | 52 | Android Apps 53 | 54 | https://developers.google.com/fonts/docs/android 55 | https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts 56 | 57 | License 58 | ------- 59 | Please read the full license text (OFL.txt) to understand the permissions, 60 | restrictions and requirements for usage, redistribution, and modification. 61 | 62 | You can use them in your products & projects – print or digital, 63 | commercial or otherwise. 64 | 65 | This isn't legal advice, please consider consulting a lawyer and see the full 66 | license for all details. 67 | -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/static/PixelifySans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Pixelify_Sans/static/PixelifySans-Bold.ttf -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/static/PixelifySans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Pixelify_Sans/static/PixelifySans-Medium.ttf -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/static/PixelifySans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Pixelify_Sans/static/PixelifySans-Regular.ttf -------------------------------------------------------------------------------- /src/fonts/Pixelify_Sans/static/PixelifySans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/Pixelify_Sans/static/PixelifySans-SemiBold.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/README.TXT: -------------------------------------------------------------------------------- 1 | Contained herin is the Bitstream Vera font family. 2 | 3 | The Copyright information is found in the COPYRIGHT.TXT file (along 4 | with being incoporated into the fonts themselves). 5 | 6 | The releases notes are found in the file "RELEASENOTES.TXT". 7 | 8 | We hope you enjoy Vera! 9 | 10 | Bitstream, Inc. 11 | The Gnome Project 12 | -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/Vera.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/Vera.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraBI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraBI.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraBd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraBd.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraIt.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraMoBI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraMoBI.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraMoBd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraMoBd.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraMoIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraMoIt.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraMono.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraSe.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraSe.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/VeraSeBd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/bitstream-vera/VeraSeBd.ttf -------------------------------------------------------------------------------- /src/fonts/bitstream-vera/local.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | 15 | serif 16 | 17 | Bitstream Vera Serif 18 | 19 | 20 | 21 | sans-serif 22 | 23 | Bitstream Vera Sans 24 | 25 | 26 | 27 | monospace 28 | 29 | Bitstream Vera Sans Mono 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/fonts/hack/Hack-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/hack/Hack-Bold.ttf -------------------------------------------------------------------------------- /src/fonts/hack/Hack-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/hack/Hack-BoldItalic.ttf -------------------------------------------------------------------------------- /src/fonts/hack/Hack-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/hack/Hack-Italic.ttf -------------------------------------------------------------------------------- /src/fonts/hack/Hack-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/fonts/hack/Hack-Regular.ttf -------------------------------------------------------------------------------- /src/fonts/hack/LICENSE: -------------------------------------------------------------------------------- 1 | The work in the Hack project is Copyright 2018 Source Foundry Authors and licensed under the MIT License 2 | 3 | The work in the DejaVu project was committed to the public domain. 4 | 5 | Bitstream Vera Sans Mono Copyright 2003 Bitstream Inc. and licensed under the Bitstream Vera License with Reserved Font Names "Bitstream" and "Vera" 6 | 7 | ### MIT License 8 | 9 | Copyright (c) 2018 Source Foundry Authors 10 | 11 | Permission is hereby granted, free of charge, to any person obtaining a copy 12 | of this software and associated documentation files (the "Software"), to deal 13 | in the Software without restriction, including without limitation the rights 14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | copies of the Software, and to permit persons to whom the Software is 16 | furnished to do so, subject to the following conditions: 17 | 18 | The above copyright notice and this permission notice shall be included in all 19 | copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | SOFTWARE. 28 | 29 | ### BITSTREAM VERA LICENSE 30 | 31 | Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: 34 | 35 | The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. 36 | 37 | The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". 38 | 39 | This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. 40 | 41 | The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. 42 | 43 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. 44 | 45 | Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 46 | -------------------------------------------------------------------------------- /src/icons/entypo/add-to-list.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/add-to-list.tvg -------------------------------------------------------------------------------- /src/icons/entypo/add-user.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/add-user.tvg -------------------------------------------------------------------------------- /src/icons/entypo/address.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/address.tvg -------------------------------------------------------------------------------- /src/icons/entypo/adjust.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/adjust.tvg -------------------------------------------------------------------------------- /src/icons/entypo/air.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/air.tvg -------------------------------------------------------------------------------- /src/icons/entypo/aircraft-landing.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/aircraft-landing.tvg -------------------------------------------------------------------------------- /src/icons/entypo/aircraft-take-off.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/aircraft-take-off.tvg -------------------------------------------------------------------------------- /src/icons/entypo/aircraft.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/aircraft.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-bottom.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-bottom.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-horizontal-middle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-horizontal-middle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-top.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-top.tvg -------------------------------------------------------------------------------- /src/icons/entypo/align-vertical-middle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/align-vertical-middle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/archive.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/archive.tvg -------------------------------------------------------------------------------- /src/icons/entypo/area-graph.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/area-graph.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-bold-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-bold-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-bold-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-bold-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-bold-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-bold-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-bold-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-bold-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-long-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-long-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-long-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-long-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-long-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-long-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-long-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-long-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-with-circle-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-with-circle-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-with-circle-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-with-circle-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-with-circle-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-with-circle-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/arrow-with-circle-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/arrow-with-circle-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/attachment.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/attachment.tvg -------------------------------------------------------------------------------- /src/icons/entypo/awareness-ribbon.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/awareness-ribbon.tvg -------------------------------------------------------------------------------- /src/icons/entypo/back-in-time.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/back-in-time.tvg -------------------------------------------------------------------------------- /src/icons/entypo/back.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/back.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bar-graph.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bar-graph.tvg -------------------------------------------------------------------------------- /src/icons/entypo/battery.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/battery.tvg -------------------------------------------------------------------------------- /src/icons/entypo/beamed-note.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/beamed-note.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bell.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bell.tvg -------------------------------------------------------------------------------- /src/icons/entypo/blackboard.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/blackboard.tvg -------------------------------------------------------------------------------- /src/icons/entypo/block.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/block.tvg -------------------------------------------------------------------------------- /src/icons/entypo/book.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/book.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bookmark.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bookmark.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bookmarks.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bookmarks.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bowl.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bowl.tvg -------------------------------------------------------------------------------- /src/icons/entypo/box.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/box.tvg -------------------------------------------------------------------------------- /src/icons/entypo/briefcase.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/briefcase.tvg -------------------------------------------------------------------------------- /src/icons/entypo/browser.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/browser.tvg -------------------------------------------------------------------------------- /src/icons/entypo/brush.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/brush.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bucket.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bucket.tvg -------------------------------------------------------------------------------- /src/icons/entypo/bug.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/bug.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cake.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cake.tvg -------------------------------------------------------------------------------- /src/icons/entypo/calculator.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/calculator.tvg -------------------------------------------------------------------------------- /src/icons/entypo/calendar.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/calendar.tvg -------------------------------------------------------------------------------- /src/icons/entypo/camera.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/camera.tvg -------------------------------------------------------------------------------- /src/icons/entypo/ccw.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/ccw.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chat.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chat.tvg -------------------------------------------------------------------------------- /src/icons/entypo/check.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/check.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-small-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-small-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-small-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-small-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-small-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-small-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-small-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-small-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-thin-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-thin-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-thin-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-thin-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-thin-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-thin-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-thin-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-thin-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-with-circle-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-with-circle-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-with-circle-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-with-circle-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-with-circle-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-with-circle-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/chevron-with-circle-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/chevron-with-circle-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/circle-with-cross.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/circle-with-cross.tvg -------------------------------------------------------------------------------- /src/icons/entypo/circle-with-minus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/circle-with-minus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/circle-with-plus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/circle-with-plus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/circle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/circle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/circular-graph.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/circular-graph.tvg -------------------------------------------------------------------------------- /src/icons/entypo/clapperboard.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/clapperboard.tvg -------------------------------------------------------------------------------- /src/icons/entypo/classic-computer.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/classic-computer.tvg -------------------------------------------------------------------------------- /src/icons/entypo/clipboard.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/clipboard.tvg -------------------------------------------------------------------------------- /src/icons/entypo/clock.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/clock.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cloud.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cloud.tvg -------------------------------------------------------------------------------- /src/icons/entypo/code.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/code.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cog.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cog.tvg -------------------------------------------------------------------------------- /src/icons/entypo/colours.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/colours.tvg -------------------------------------------------------------------------------- /src/icons/entypo/compass.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/compass.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-fast-backward.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-fast-backward.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-fast-forward.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-fast-forward.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-jump-to-start.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-jump-to-start.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-next.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-next.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-pause.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-pause.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-play.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-play.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-record.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-record.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-stop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-stop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/controller-volume.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/controller-volume.tvg -------------------------------------------------------------------------------- /src/icons/entypo/copy.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/copy.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-attribution.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-attribution.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-noderivs.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-noderivs.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-noncommercial-eu.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-noncommercial-eu.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-noncommercial-us.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-noncommercial-us.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-public-domain.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-public-domain.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-remix.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-remix.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-share.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-share.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons-sharealike.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons-sharealike.tvg -------------------------------------------------------------------------------- /src/icons/entypo/creative-commons.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/creative-commons.tvg -------------------------------------------------------------------------------- /src/icons/entypo/credit-card.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/credit-card.tvg -------------------------------------------------------------------------------- /src/icons/entypo/credit.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/credit.tvg -------------------------------------------------------------------------------- /src/icons/entypo/crop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/crop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cross.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cross.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cup.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cup.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cw.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cw.tvg -------------------------------------------------------------------------------- /src/icons/entypo/cycle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/cycle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/database.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/database.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dial-pad.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dial-pad.tvg -------------------------------------------------------------------------------- /src/icons/entypo/direction.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/direction.tvg -------------------------------------------------------------------------------- /src/icons/entypo/document-landscape.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/document-landscape.tvg -------------------------------------------------------------------------------- /src/icons/entypo/document.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/document.tvg -------------------------------------------------------------------------------- /src/icons/entypo/documents.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/documents.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dot-single.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dot-single.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dots-three-horizontal.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dots-three-horizontal.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dots-three-vertical.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dots-three-vertical.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dots-two-horizontal.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dots-two-horizontal.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dots-two-vertical.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dots-two-vertical.tvg -------------------------------------------------------------------------------- /src/icons/entypo/download.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/download.tvg -------------------------------------------------------------------------------- /src/icons/entypo/drink.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/drink.tvg -------------------------------------------------------------------------------- /src/icons/entypo/drive.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/drive.tvg -------------------------------------------------------------------------------- /src/icons/entypo/drop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/drop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/dropbox.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/dropbox.tvg -------------------------------------------------------------------------------- /src/icons/entypo/edit.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/edit.tvg -------------------------------------------------------------------------------- /src/icons/entypo/email.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/email.tvg -------------------------------------------------------------------------------- /src/icons/entypo/emoji-flirt.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/emoji-flirt.tvg -------------------------------------------------------------------------------- /src/icons/entypo/emoji-happy.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/emoji-happy.tvg -------------------------------------------------------------------------------- /src/icons/entypo/emoji-neutral.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/emoji-neutral.tvg -------------------------------------------------------------------------------- /src/icons/entypo/emoji-sad.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/emoji-sad.tvg -------------------------------------------------------------------------------- /src/icons/entypo/erase.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/erase.tvg -------------------------------------------------------------------------------- /src/icons/entypo/eraser.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/eraser.tvg -------------------------------------------------------------------------------- /src/icons/entypo/export.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/export.tvg -------------------------------------------------------------------------------- /src/icons/entypo/eye-with-line.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/eye-with-line.tvg -------------------------------------------------------------------------------- /src/icons/entypo/eye.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/eye.tvg -------------------------------------------------------------------------------- /src/icons/entypo/feather.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/feather.tvg -------------------------------------------------------------------------------- /src/icons/entypo/fingerprint.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/fingerprint.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flag.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flag.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flash.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flash.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flashlight.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flashlight.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flat-brush.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flat-brush.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flow-branch.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flow-branch.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flow-cascade.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flow-cascade.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flow-line.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flow-line.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flow-parallel.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flow-parallel.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flow-tree.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flow-tree.tvg -------------------------------------------------------------------------------- /src/icons/entypo/flower.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/flower.tvg -------------------------------------------------------------------------------- /src/icons/entypo/folder-images.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/folder-images.tvg -------------------------------------------------------------------------------- /src/icons/entypo/folder-music.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/folder-music.tvg -------------------------------------------------------------------------------- /src/icons/entypo/folder-video.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/folder-video.tvg -------------------------------------------------------------------------------- /src/icons/entypo/folder.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/folder.tvg -------------------------------------------------------------------------------- /src/icons/entypo/forward.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/forward.tvg -------------------------------------------------------------------------------- /src/icons/entypo/funnel.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/funnel.tvg -------------------------------------------------------------------------------- /src/icons/entypo/game-controller.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/game-controller.tvg -------------------------------------------------------------------------------- /src/icons/entypo/gauge.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/gauge.tvg -------------------------------------------------------------------------------- /src/icons/entypo/globe.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/globe.tvg -------------------------------------------------------------------------------- /src/icons/entypo/graduation-cap.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/graduation-cap.tvg -------------------------------------------------------------------------------- /src/icons/entypo/grid.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/grid.tvg -------------------------------------------------------------------------------- /src/icons/entypo/hair-cross.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/hair-cross.tvg -------------------------------------------------------------------------------- /src/icons/entypo/hand.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/hand.tvg -------------------------------------------------------------------------------- /src/icons/entypo/heart-outlined.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/heart-outlined.tvg -------------------------------------------------------------------------------- /src/icons/entypo/heart.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/heart.tvg -------------------------------------------------------------------------------- /src/icons/entypo/help-with-circle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/help-with-circle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/help.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/help.tvg -------------------------------------------------------------------------------- /src/icons/entypo/home.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/home.tvg -------------------------------------------------------------------------------- /src/icons/entypo/hour-glass.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/hour-glass.tvg -------------------------------------------------------------------------------- /src/icons/entypo/image-inverted.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/image-inverted.tvg -------------------------------------------------------------------------------- /src/icons/entypo/image.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/image.tvg -------------------------------------------------------------------------------- /src/icons/entypo/images.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/images.tvg -------------------------------------------------------------------------------- /src/icons/entypo/inbox.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/inbox.tvg -------------------------------------------------------------------------------- /src/icons/entypo/infinity.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/infinity.tvg -------------------------------------------------------------------------------- /src/icons/entypo/info-with-circle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/info-with-circle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/info.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/info.tvg -------------------------------------------------------------------------------- /src/icons/entypo/install.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/install.tvg -------------------------------------------------------------------------------- /src/icons/entypo/key.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/key.tvg -------------------------------------------------------------------------------- /src/icons/entypo/keyboard.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/keyboard.tvg -------------------------------------------------------------------------------- /src/icons/entypo/lab-flask.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/lab-flask.tvg -------------------------------------------------------------------------------- /src/icons/entypo/landline.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/landline.tvg -------------------------------------------------------------------------------- /src/icons/entypo/language.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/language.tvg -------------------------------------------------------------------------------- /src/icons/entypo/laptop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/laptop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/layers.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/layers.tvg -------------------------------------------------------------------------------- /src/icons/entypo/leaf.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/leaf.tvg -------------------------------------------------------------------------------- /src/icons/entypo/level-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/level-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/level-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/level-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/lifebuoy.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/lifebuoy.tvg -------------------------------------------------------------------------------- /src/icons/entypo/light-bulb.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/light-bulb.tvg -------------------------------------------------------------------------------- /src/icons/entypo/light-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/light-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/light-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/light-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/line-graph.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/line-graph.tvg -------------------------------------------------------------------------------- /src/icons/entypo/link.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/link.tvg -------------------------------------------------------------------------------- /src/icons/entypo/list.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/list.tvg -------------------------------------------------------------------------------- /src/icons/entypo/location-pin.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/location-pin.tvg -------------------------------------------------------------------------------- /src/icons/entypo/location.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/location.tvg -------------------------------------------------------------------------------- /src/icons/entypo/lock-open.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/lock-open.tvg -------------------------------------------------------------------------------- /src/icons/entypo/lock.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/lock.tvg -------------------------------------------------------------------------------- /src/icons/entypo/log-out.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/log-out.tvg -------------------------------------------------------------------------------- /src/icons/entypo/login.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/login.tvg -------------------------------------------------------------------------------- /src/icons/entypo/loop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/loop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/magnet.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/magnet.tvg -------------------------------------------------------------------------------- /src/icons/entypo/magnifying-glass.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/magnifying-glass.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mail-with-circle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mail-with-circle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mail.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mail.tvg -------------------------------------------------------------------------------- /src/icons/entypo/man.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/man.tvg -------------------------------------------------------------------------------- /src/icons/entypo/map.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/map.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mask.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mask.tvg -------------------------------------------------------------------------------- /src/icons/entypo/medal.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/medal.tvg -------------------------------------------------------------------------------- /src/icons/entypo/megaphone.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/megaphone.tvg -------------------------------------------------------------------------------- /src/icons/entypo/menu.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/menu.tvg -------------------------------------------------------------------------------- /src/icons/entypo/merge.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/merge.tvg -------------------------------------------------------------------------------- /src/icons/entypo/message.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/message.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mic.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mic.tvg -------------------------------------------------------------------------------- /src/icons/entypo/minus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/minus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mobile.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mobile.tvg -------------------------------------------------------------------------------- /src/icons/entypo/modern-mic.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/modern-mic.tvg -------------------------------------------------------------------------------- /src/icons/entypo/moon.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/moon.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mouse-pointer.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mouse-pointer.tvg -------------------------------------------------------------------------------- /src/icons/entypo/mouse.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/mouse.tvg -------------------------------------------------------------------------------- /src/icons/entypo/music.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/music.tvg -------------------------------------------------------------------------------- /src/icons/entypo/network.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/network.tvg -------------------------------------------------------------------------------- /src/icons/entypo/new-message.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/new-message.tvg -------------------------------------------------------------------------------- /src/icons/entypo/new.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/new.tvg -------------------------------------------------------------------------------- /src/icons/entypo/news.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/news.tvg -------------------------------------------------------------------------------- /src/icons/entypo/newsletter.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/newsletter.tvg -------------------------------------------------------------------------------- /src/icons/entypo/note.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/note.tvg -------------------------------------------------------------------------------- /src/icons/entypo/notification.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/notification.tvg -------------------------------------------------------------------------------- /src/icons/entypo/notifications-off.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/notifications-off.tvg -------------------------------------------------------------------------------- /src/icons/entypo/old-mobile.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/old-mobile.tvg -------------------------------------------------------------------------------- /src/icons/entypo/old-phone.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/old-phone.tvg -------------------------------------------------------------------------------- /src/icons/entypo/open-book.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/open-book.tvg -------------------------------------------------------------------------------- /src/icons/entypo/palette.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/palette.tvg -------------------------------------------------------------------------------- /src/icons/entypo/paper-plane.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/paper-plane.tvg -------------------------------------------------------------------------------- /src/icons/entypo/pencil.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/pencil.tvg -------------------------------------------------------------------------------- /src/icons/entypo/phone.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/phone.tvg -------------------------------------------------------------------------------- /src/icons/entypo/pie-chart.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/pie-chart.tvg -------------------------------------------------------------------------------- /src/icons/entypo/pin.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/pin.tvg -------------------------------------------------------------------------------- /src/icons/entypo/plus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/plus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/popup.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/popup.tvg -------------------------------------------------------------------------------- /src/icons/entypo/power-plug.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/power-plug.tvg -------------------------------------------------------------------------------- /src/icons/entypo/price-ribbon.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/price-ribbon.tvg -------------------------------------------------------------------------------- /src/icons/entypo/price-tag.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/price-tag.tvg -------------------------------------------------------------------------------- /src/icons/entypo/print.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/print.tvg -------------------------------------------------------------------------------- /src/icons/entypo/progress-empty.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/progress-empty.tvg -------------------------------------------------------------------------------- /src/icons/entypo/progress-full.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/progress-full.tvg -------------------------------------------------------------------------------- /src/icons/entypo/progress-one.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/progress-one.tvg -------------------------------------------------------------------------------- /src/icons/entypo/progress-two.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/progress-two.tvg -------------------------------------------------------------------------------- /src/icons/entypo/publish.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/publish.tvg -------------------------------------------------------------------------------- /src/icons/entypo/quote.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/quote.tvg -------------------------------------------------------------------------------- /src/icons/entypo/radio.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/radio.tvg -------------------------------------------------------------------------------- /src/icons/entypo/rainbow.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/rainbow.tvg -------------------------------------------------------------------------------- /src/icons/entypo/remove-user.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/remove-user.tvg -------------------------------------------------------------------------------- /src/icons/entypo/reply-all.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/reply-all.tvg -------------------------------------------------------------------------------- /src/icons/entypo/reply.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/reply.tvg -------------------------------------------------------------------------------- /src/icons/entypo/resize-100.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/resize-100.tvg -------------------------------------------------------------------------------- /src/icons/entypo/resize-full-screen.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/resize-full-screen.tvg -------------------------------------------------------------------------------- /src/icons/entypo/retweet.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/retweet.tvg -------------------------------------------------------------------------------- /src/icons/entypo/rocket.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/rocket.tvg -------------------------------------------------------------------------------- /src/icons/entypo/round-brush.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/round-brush.tvg -------------------------------------------------------------------------------- /src/icons/entypo/rss.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/rss.tvg -------------------------------------------------------------------------------- /src/icons/entypo/ruler.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/ruler.tvg -------------------------------------------------------------------------------- /src/icons/entypo/save.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/save.tvg -------------------------------------------------------------------------------- /src/icons/entypo/scissors.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/scissors.tvg -------------------------------------------------------------------------------- /src/icons/entypo/select-arrows.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/select-arrows.tvg -------------------------------------------------------------------------------- /src/icons/entypo/share-alternative.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/share-alternative.tvg -------------------------------------------------------------------------------- /src/icons/entypo/share.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/share.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shareable.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shareable.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shield.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shield.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shop.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shop.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shopping-bag.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shopping-bag.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shopping-basket.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shopping-basket.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shopping-cart.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shopping-cart.tvg -------------------------------------------------------------------------------- /src/icons/entypo/shuffle.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/shuffle.tvg -------------------------------------------------------------------------------- /src/icons/entypo/signal.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/signal.tvg -------------------------------------------------------------------------------- /src/icons/entypo/sound-mix.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/sound-mix.tvg -------------------------------------------------------------------------------- /src/icons/entypo/sound-mute.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/sound-mute.tvg -------------------------------------------------------------------------------- /src/icons/entypo/sound.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/sound.tvg -------------------------------------------------------------------------------- /src/icons/entypo/sports-club.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/sports-club.tvg -------------------------------------------------------------------------------- /src/icons/entypo/spreadsheet.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/spreadsheet.tvg -------------------------------------------------------------------------------- /src/icons/entypo/squared-cross.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/squared-cross.tvg -------------------------------------------------------------------------------- /src/icons/entypo/squared-minus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/squared-minus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/squared-plus.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/squared-plus.tvg -------------------------------------------------------------------------------- /src/icons/entypo/star-outlined.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/star-outlined.tvg -------------------------------------------------------------------------------- /src/icons/entypo/star.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/star.tvg -------------------------------------------------------------------------------- /src/icons/entypo/stopwatch.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/stopwatch.tvg -------------------------------------------------------------------------------- /src/icons/entypo/suitcase.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/suitcase.tvg -------------------------------------------------------------------------------- /src/icons/entypo/swap.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/swap.tvg -------------------------------------------------------------------------------- /src/icons/entypo/swarm.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/swarm.tvg -------------------------------------------------------------------------------- /src/icons/entypo/switch.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/switch.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tablet-mobile-combo.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tablet-mobile-combo.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tablet.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tablet.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tag.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tag.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tail-spin.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tail-spin.tvg -------------------------------------------------------------------------------- /src/icons/entypo/text-document-inverted.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/text-document-inverted.tvg -------------------------------------------------------------------------------- /src/icons/entypo/text-document.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/text-document.tvg -------------------------------------------------------------------------------- /src/icons/entypo/text.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/text.tvg -------------------------------------------------------------------------------- /src/icons/entypo/thermometer.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/thermometer.tvg -------------------------------------------------------------------------------- /src/icons/entypo/thumbs-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/thumbs-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/thumbs-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/thumbs-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/thunder-cloud.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/thunder-cloud.tvg -------------------------------------------------------------------------------- /src/icons/entypo/ticket.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/ticket.tvg -------------------------------------------------------------------------------- /src/icons/entypo/time-slot.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/time-slot.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tools.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tools.tvg -------------------------------------------------------------------------------- /src/icons/entypo/traffic-cone.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/traffic-cone.tvg -------------------------------------------------------------------------------- /src/icons/entypo/trash.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/trash.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tree.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tree.tvg -------------------------------------------------------------------------------- /src/icons/entypo/triangle-down.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/triangle-down.tvg -------------------------------------------------------------------------------- /src/icons/entypo/triangle-left.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/triangle-left.tvg -------------------------------------------------------------------------------- /src/icons/entypo/triangle-right.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/triangle-right.tvg -------------------------------------------------------------------------------- /src/icons/entypo/triangle-up.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/triangle-up.tvg -------------------------------------------------------------------------------- /src/icons/entypo/trophy.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/trophy.tvg -------------------------------------------------------------------------------- /src/icons/entypo/tv.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/tv.tvg -------------------------------------------------------------------------------- /src/icons/entypo/typing.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/typing.tvg -------------------------------------------------------------------------------- /src/icons/entypo/uninstall.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/uninstall.tvg -------------------------------------------------------------------------------- /src/icons/entypo/unread.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/unread.tvg -------------------------------------------------------------------------------- /src/icons/entypo/untag.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/untag.tvg -------------------------------------------------------------------------------- /src/icons/entypo/upload-to-cloud.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/upload-to-cloud.tvg -------------------------------------------------------------------------------- /src/icons/entypo/upload.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/upload.tvg -------------------------------------------------------------------------------- /src/icons/entypo/user.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/user.tvg -------------------------------------------------------------------------------- /src/icons/entypo/users.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/users.tvg -------------------------------------------------------------------------------- /src/icons/entypo/v-card.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/v-card.tvg -------------------------------------------------------------------------------- /src/icons/entypo/video-camera.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/video-camera.tvg -------------------------------------------------------------------------------- /src/icons/entypo/video.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/video.tvg -------------------------------------------------------------------------------- /src/icons/entypo/vinyl.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/vinyl.tvg -------------------------------------------------------------------------------- /src/icons/entypo/voicemail.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/voicemail.tvg -------------------------------------------------------------------------------- /src/icons/entypo/wallet.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/wallet.tvg -------------------------------------------------------------------------------- /src/icons/entypo/warning.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/warning.tvg -------------------------------------------------------------------------------- /src/icons/entypo/water.tvg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/icons/entypo/water.tvg -------------------------------------------------------------------------------- /src/import_widgets.zig: -------------------------------------------------------------------------------- 1 | //! You can find below a list of available widgets. 2 | //! 3 | //! Note that most of the time, you will **not** instanciate them directly but instead rely on higher level functions available in `dvui` top module. 4 | //! 5 | //! The corresponding function is usually indicated in the doc of each Widget. 6 | 7 | // Note : this "intermediate" file is mostly there for nice reference in the docs. 8 | 9 | pub const AnimateWidget = @import("widgets/AnimateWidget.zig"); 10 | pub const BoxWidget = @import("widgets/BoxWidget.zig"); 11 | pub const ButtonWidget = @import("widgets/ButtonWidget.zig"); 12 | pub const CacheWidget = @import("widgets/CacheWidget.zig"); 13 | pub const ColorPickerWidget = @import("widgets/ColorPickerWidget.zig"); 14 | pub const ContextWidget = @import("widgets/ContextWidget.zig"); 15 | pub const DropdownWidget = @import("widgets/DropdownWidget.zig"); 16 | pub const FlexBoxWidget = @import("widgets/FlexBoxWidget.zig"); 17 | pub const FloatingMenuWidget = @import("widgets/FloatingMenuWidget.zig"); 18 | pub const FloatingTooltipWidget = @import("widgets/FloatingTooltipWidget.zig"); 19 | pub const FloatingWidget = @import("widgets/FloatingWidget.zig"); 20 | pub const FloatingWindowWidget = @import("widgets/FloatingWindowWidget.zig"); 21 | pub const IconWidget = @import("widgets/IconWidget.zig"); 22 | pub const LabelWidget = @import("widgets/LabelWidget.zig"); 23 | pub const MenuItemWidget = @import("widgets/MenuItemWidget.zig"); 24 | pub const MenuWidget = @import("widgets/MenuWidget.zig"); 25 | pub const OverlayWidget = @import("widgets/OverlayWidget.zig"); 26 | pub const PanedWidget = @import("widgets/PanedWidget.zig"); 27 | pub const PlotWidget = @import("widgets/PlotWidget.zig"); 28 | pub const ReorderWidget = @import("widgets/ReorderWidget.zig"); 29 | pub const ScaleWidget = @import("widgets/ScaleWidget.zig"); 30 | pub const ScrollAreaWidget = @import("widgets/ScrollAreaWidget.zig"); 31 | pub const ScrollBarWidget = @import("widgets/ScrollBarWidget.zig"); 32 | pub const ScrollContainerWidget = @import("widgets/ScrollContainerWidget.zig"); 33 | pub const SuggestionWidget = @import("widgets/SuggestionWidget.zig"); 34 | pub const TabsWidget = @import("widgets/TabsWidget.zig"); 35 | pub const TextEntryWidget = @import("widgets/TextEntryWidget.zig"); 36 | pub const TextLayoutWidget = @import("widgets/TextLayoutWidget.zig"); 37 | pub const VirtualParentWidget = @import("widgets/VirtualParentWidget.zig"); 38 | pub const GridWidget = @import("widgets/GridWidget.zig"); 39 | // Needed for autodocs "backlink" to work 40 | const dvui = @import("dvui"); 41 | 42 | test { 43 | @import("std").testing.refAllDecls(@This()); 44 | } 45 | -------------------------------------------------------------------------------- /src/main.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | PerMonitorV2 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/shrinking_arena_allocator.zig: -------------------------------------------------------------------------------- 1 | //! This is a wrapper of the `ArenaAllocator` that keeps track of the peak memory used 2 | //! in order to retain only the most minimal allocation. 3 | //! 4 | //! This is important because dvui applications may allocate large files like images 5 | //! on the arena, but never again for the lifetime of the application. Retaining the 6 | //! capacity for these the large files does no make sense when only a fraction of 7 | //! that is used during a normal frame. 8 | 9 | const std = @import("std"); 10 | const Allocator = std.mem.Allocator; 11 | const Alignment = std.mem.Alignment; 12 | const ArenaAllocator = std.heap.ArenaAllocator; 13 | 14 | const ShrinkingArenaAllocator = @This(); 15 | 16 | const allowed_extra_capacity = 0x1000; 17 | 18 | arena: ArenaAllocator, 19 | peak_usage: usize = 0, 20 | current_usage: usize = 0, 21 | 22 | pub fn init(child_allocator: Allocator) ShrinkingArenaAllocator { 23 | return .{ .arena = .init(child_allocator) }; 24 | } 25 | 26 | pub fn deinit(self: ShrinkingArenaAllocator) void { 27 | self.arena.deinit(); 28 | } 29 | 30 | /// Resets the inner arena, limiting the retained capacity to the peak amount used + the extra allowed capacity 31 | pub fn reset(self: *ShrinkingArenaAllocator) bool { 32 | // std.log.debug("SAA peak used: {d}", .{self.peak_usage}); 33 | // std.log.debug("SAA arena buf len: {d}", .{self.arena.state.buffer_list.len()}); 34 | // std.log.debug("SAA arena capacity: {d}", .{self.arena.queryCapacity()}); 35 | // defer std.log.debug("SAA retained capacity: {d}", .{self.arena.queryCapacity()}); 36 | defer self.current_usage = 0; 37 | defer self.peak_usage = 0; 38 | return self.arena.reset(.{ .retain_with_limit = self.peak_usage + allowed_extra_capacity }); 39 | } 40 | 41 | pub fn allocator(self: *ShrinkingArenaAllocator) Allocator { 42 | return .{ 43 | .ptr = self, 44 | .vtable = &.{ 45 | .alloc = alloc, 46 | .resize = resize, 47 | .remap = remap, 48 | .free = free, 49 | }, 50 | }; 51 | } 52 | 53 | fn alloc(ctx: *anyopaque, len: usize, alignment: Alignment, ret_addr: usize) ?[*]u8 { 54 | const self: *ShrinkingArenaAllocator = @ptrCast(@alignCast(ctx)); 55 | const buf = self.arena.allocator().rawAlloc(len, alignment, ret_addr) orelse return null; 56 | self.current_usage += len; 57 | self.peak_usage = @max(self.peak_usage, self.current_usage); 58 | return buf; 59 | } 60 | 61 | fn free(ctx: *anyopaque, memory: []u8, alignment: Alignment, ret_addr: usize) void { 62 | const self: *ShrinkingArenaAllocator = @ptrCast(@alignCast(ctx)); 63 | const end_before = self.arena.state.end_index; 64 | self.arena.allocator().rawFree(memory, alignment, ret_addr); 65 | if (self.arena.state.end_index < end_before) { 66 | self.current_usage -= memory.len; 67 | } 68 | } 69 | 70 | fn remap(ctx: *anyopaque, memory: []u8, alignment: Alignment, new_len: usize, ret_addr: usize) ?[*]u8 { 71 | const self: *ShrinkingArenaAllocator = @ptrCast(@alignCast(ctx)); 72 | const end_before = self.arena.state.end_index; 73 | const buf = self.arena.allocator().rawRemap(memory, alignment, new_len, ret_addr) orelse return null; 74 | if (self.arena.state.end_index != end_before) { 75 | if (new_len < memory.len) { 76 | self.current_usage -= memory.len - new_len; 77 | } else { 78 | self.current_usage += new_len - memory.len; 79 | self.peak_usage = @max(self.peak_usage, self.current_usage); 80 | } 81 | } 82 | return buf; 83 | } 84 | 85 | fn resize(ctx: *anyopaque, memory: []u8, alignment: Alignment, new_len: usize, ret_addr: usize) bool { 86 | const self: *ShrinkingArenaAllocator = @ptrCast(@alignCast(ctx)); 87 | if (self.arena.allocator().rawResize(memory, alignment, new_len, ret_addr)) { 88 | if (new_len < memory.len) { 89 | self.current_usage -= memory.len - new_len; 90 | } else { 91 | self.current_usage += new_len - memory.len; 92 | self.peak_usage = @max(self.peak_usage, self.current_usage); 93 | } 94 | return true; 95 | } else { 96 | return false; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/stb/stb_image_impl.c: -------------------------------------------------------------------------------- 1 | 2 | #if INCLUDE_CUSTOM_LIBC_FUNCS 3 | #include "stb_image_libc.c" 4 | #endif 5 | 6 | #define STBI_FAILURE_USERMSG 7 | #define STBI_NO_STDIO 8 | 9 | // This removes the need for ldexp and strtol 10 | #define STBI_NO_HDR 11 | 12 | 13 | #define STB_IMAGE_IMPLEMENTATION 14 | #include "stb_image.h" 15 | -------------------------------------------------------------------------------- /src/stb/stb_image_libc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void *dvui_c_alloc(size_t size); 5 | #define STBI_MALLOC(sz) dvui_c_alloc(sz) 6 | #define STBIW_MALLOC(sz) dvui_c_alloc(sz) 7 | 8 | extern void dvui_c_free(void *ptr); 9 | #define STBI_FREE(p) dvui_c_free(p) 10 | #define STBIW_FREE(p) dvui_c_free(p) 11 | 12 | extern void *dvui_c_realloc_sized(void *ptr, size_t oldsize, size_t newsize); 13 | #define STBI_REALLOC_SIZED(p,oldsz,newsz) dvui_c_realloc_sized(p,oldsz,newsz) 14 | #define STBIW_REALLOC_SIZED(p,oldsz,newsz) dvui_c_realloc_sized(p,oldsz,newsz) 15 | 16 | extern void dvui_c_panic(char const *msg); 17 | #define STBI_ASSERT(_Assertion) \ 18 | do { \ 19 | if ((_Assertion) == 0) \ 20 | dvui_c_panic("Assertion " #_Assertion " failed!"); \ 21 | } while (0) 22 | 23 | #define STBIW_ASSERT(_Assertion) \ 24 | do { \ 25 | if ((_Assertion) == 0) \ 26 | dvui_c_panic("Assertion " #_Assertion " failed!"); \ 27 | } while (0) 28 | 29 | static int strcmp(const char *l, const char *r) 30 | { 31 | for (; *l==*r && *l; l++, r++); 32 | return *(unsigned char *)l - *(unsigned char *)r; 33 | } 34 | 35 | static int strncmp(const char *_l, const char *_r, size_t n) 36 | { 37 | const unsigned char *l=(void *)_l, *r=(void *)_r; 38 | if (!n--) return 0; 39 | for (; *l && *r && n && *l == *r ; l++, r++, n--); 40 | return *l - *r; 41 | } 42 | 43 | static int abs(int a) 44 | { 45 | return a>0 ? a : -a; 46 | } 47 | 48 | extern double dvui_c_pow(double x, double y); 49 | static double pow(double x, double y) 50 | { 51 | return dvui_c_pow(x, y); 52 | } 53 | 54 | extern void *dvui_c_memset(void *dest, int x, size_t n); 55 | static void *memset(void * dest, int x, size_t n) { 56 | return dvui_c_memset(dest, x, n); 57 | } 58 | 59 | extern void *dvui_c_memcpy(void *dest, const void * src, size_t n); 60 | static void *memcpy(void * dest, const void * src, size_t n) { 61 | return dvui_c_memcpy(dest, src, n); 62 | } 63 | 64 | extern void *dvui_c_memmove(void *dest, const void * src, size_t n); 65 | #define STBIW_MEMMOVE(dest, src, n) dvui_c_memmove(dest, src, n) 66 | -------------------------------------------------------------------------------- /src/stb/stb_image_write_impl.c: -------------------------------------------------------------------------------- 1 | 2 | #if INCLUDE_CUSTOM_LIBC_FUNCS 3 | #include "stb_image_libc.c" 4 | #endif 5 | 6 | #define STBI_WRITE_NO_STDIO 7 | #define STBIW_WINDOWS_UTF8 8 | 9 | #define STB_IMAGE_WRITE_IMPLEMENTATION 10 | #include "stb_image_write.h" 11 | -------------------------------------------------------------------------------- /src/stb/stb_truetype_impl.c: -------------------------------------------------------------------------------- 1 | 2 | #if INCLUDE_CUSTOM_LIBC_FUNCS 3 | #include "stb_truetype_libc.c" 4 | #endif 5 | 6 | 7 | #define STB_TRUETYPE_IMPLEMENTATION 8 | #include "stb_truetype.h" 9 | -------------------------------------------------------------------------------- /src/stb/stb_truetype_libc.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | extern void *dvui_c_alloc(size_t size); 5 | #define STBTT_malloc(x,u) ((void)(u),dvui_c_alloc(x)) 6 | extern void dvui_c_free(void *ptr); 7 | #define STBTT_free(x,u) ((void)(u),dvui_c_free(x)) 8 | 9 | extern void dvui_c_panic(char const *msg); 10 | #define STBTT_assert(_Assertion) \ 11 | do { \ 12 | if ((_Assertion) == 0) \ 13 | dvui_c_panic("Assertion " #_Assertion " failed!"); \ 14 | } while (0) 15 | 16 | extern double dvui_c_floor(double x); 17 | #define STBTT_ifloor(x) ((int) dvui_c_floor(x)) 18 | extern double dvui_c_ceil(double x); 19 | #define STBTT_iceil(x) ((int) dvui_c_ceil(x)) 20 | 21 | extern double dvui_c_sqrt(double x); 22 | #define STBTT_sqrt(x) dvui_c_sqrt(x) 23 | extern double dvui_c_pow(double x, double y); 24 | #define STBTT_pow(x,y) dvui_c_pow(x,y) 25 | 26 | extern double dvui_c_fmod(double x, double y); 27 | #define STBTT_fmod(x,y) dvui_c_fmod(x,y) 28 | 29 | extern double dvui_c_cos(double x); 30 | #define STBTT_cos(x) dvui_c_cos(x) 31 | extern double dvui_c_acos(double x); 32 | #define STBTT_acos(x) dvui_c_acos(x) 33 | 34 | extern double dvui_c_fabs(double x); 35 | #define STBTT_fabs(x) dvui_c_fabs(x) 36 | 37 | extern size_t dvui_c_strlen(const char * str); 38 | #define STBTT_strlen(x) dvui_c_strlen(x) 39 | 40 | extern void *dvui_c_memcpy(void *dest, const void * src, size_t n); 41 | #define STBTT_memcpy(dest, src, n) dvui_c_memcpy(dest, src, n) 42 | extern void *dvui_c_memset(void *dest, int x, size_t n); 43 | #define STBTT_memset(dest, x, n) dvui_c_memset(dest, x, n) 44 | 45 | -------------------------------------------------------------------------------- /src/themes/adwaita_dark.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Adwaita Dark", 3 | "font_size": 13, 4 | "font_name_body": "Vera", 5 | "font_name_heading": "VeraBd", 6 | "font_name_caption": "Vera", 7 | "font_name_title": "VeraBd", 8 | "color_focus": "#3584e4", 9 | "color_text": "#eeeeee", 10 | "color_text_press": "#ffffff", 11 | "color_fill_text": "#1e1e1e", 12 | "color_fill_container": "#2b2b2b", 13 | "color_fill_control": "#404040", 14 | "color_fill_hover": "#616161", 15 | "color_fill_press": "#b8b8b8", 16 | "color_border": "#919191" 17 | } 18 | -------------------------------------------------------------------------------- /src/themes/adwaita_light.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Adwaita Light", 3 | "font_size": 13, 4 | "font_name_body": "Vera", 5 | "font_name_heading": "VeraBd", 6 | "font_name_caption": "Vera", 7 | "font_name_title": "VeraBd", 8 | "color_focus": "#3584e4", 9 | "color_text": "#000000", 10 | "color_text_press": "#222222", 11 | "color_fill_text": "#ffffff", 12 | "color_fill_container": "#f0f0f0", 13 | "color_fill_control": "#e0e0e0", 14 | "color_fill_hover": "#d1d1d1", 15 | "color_fill_press": "#b8b8b8", 16 | "color_border": "#a1a1a1" 17 | } 18 | -------------------------------------------------------------------------------- /src/themes/dracula.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Dracula", 3 | "font_size": 16, 4 | "font_name_body": "Pixelify", 5 | "font_name_heading": "Pixelify", 6 | "font_name_caption": "Pixelify", 7 | "font_name_title": "Pixelify", 8 | "color_focus": "#ff79c6", 9 | "color_text": "#f8f8f2", 10 | "color_text_press": "#21222c", 11 | "color_fill_text": "#282a36", 12 | "color_fill_container": "#282a36", 13 | "color_fill_control": "#44475a", 14 | "color_fill_hover": "#6272a4", 15 | "color_fill_press": "#ff79c6", 16 | "color_border": "#6272a4" 17 | } 18 | -------------------------------------------------------------------------------- /src/themes/gruvbox.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Gruvbox", 3 | "font_size": 16, 4 | "font_name_body": "Aleo", 5 | "font_name_heading": "Aleo", 6 | "font_name_caption": "Aleo", 7 | "font_name_title": "AleoBd", 8 | "color_focus": "#fe8019", 9 | "color_text": "#ebdbb2", 10 | "color_text_press": "#1d2021", 11 | "color_fill_text": "#7c6f64", 12 | "color_fill_container": "#665c54", 13 | "color_fill_control": "#7c6f64", 14 | "color_fill_hover": "#83a598", 15 | "color_fill_press": "#fe8019", 16 | "color_border": "#83a598" 17 | } 18 | -------------------------------------------------------------------------------- /src/themes/jungle.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Jungle", 3 | "font_size": 18, 4 | "font_name_body": "Pixelify", 5 | "font_name_heading": "Pixelify", 6 | "font_name_caption": "Pixelify", 7 | "font_name_title": "Pixelify", 8 | "color_focus": "#638465", 9 | "color_text": "#82a29f", 10 | "color_text_press": "#97af81", 11 | "color_fill_text": "#2c3332", 12 | "color_fill_container": "#2b3a3a", 13 | "color_fill_control": "#2c3334", 14 | "color_fill_hover": "#334e57", 15 | "color_fill_press": "#3b6357", 16 | "color_border": "#60827d" 17 | } 18 | -------------------------------------------------------------------------------- /src/themes/opendyslexic.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Open Dyslexic", 3 | "font_size": 18, 4 | "font_name_body": "OpenDyslexic", 5 | "font_name_heading": "OpenDyslexicBd", 6 | "font_name_caption": "OpenDyslexic", 7 | "font_name_title": "OpenDyslexicBd", 8 | "color_focus": "#3584e4", 9 | "color_text": "#000000", 10 | "color_text_press": "#000000", 11 | "color_fill_text": "#ffffff", 12 | "color_fill_container": "#f0f0f0", 13 | "color_fill_control": "#e0e0e0", 14 | "color_fill_hover": "#d1d1d1", 15 | "color_fill_press": "#b8b8b8", 16 | "color_border": "#a1a1a1" 17 | } 18 | -------------------------------------------------------------------------------- /src/widgets/ContextWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Event = dvui.Event; 5 | const Options = dvui.Options; 6 | const Point = dvui.Point; 7 | const Rect = dvui.Rect; 8 | const RectScale = dvui.RectScale; 9 | const Size = dvui.Size; 10 | const Widget = dvui.Widget; 11 | const WidgetData = dvui.WidgetData; 12 | 13 | const ContextWidget = @This(); 14 | 15 | pub const InitOptions = struct { 16 | /// physical rect where right-click triggers the context menu 17 | rect: Rect.Physical, 18 | }; 19 | 20 | wd: WidgetData = undefined, 21 | init_options: InitOptions = undefined, 22 | 23 | winId: dvui.WidgetId = undefined, 24 | focused: bool = false, 25 | activePt: Point.Natural = .{}, 26 | 27 | pub fn init(src: std.builtin.SourceLocation, init_opts: InitOptions, opts: Options) ContextWidget { 28 | var self = ContextWidget{}; 29 | const defaults = Options{ .name = "Context" }; 30 | self.wd = WidgetData.init(src, .{}, defaults.override(opts).override(.{ .rect = dvui.parentGet().data().rectScale().rectFromPhysical(init_opts.rect) })); 31 | self.init_options = init_opts; 32 | self.winId = dvui.subwindowCurrentId(); 33 | if (dvui.focusedWidgetIdInCurrentSubwindow()) |fid| { 34 | if (fid == self.wd.id) { 35 | self.focused = true; 36 | } 37 | } 38 | 39 | if (dvui.dataGet(null, self.wd.id, "_activePt", Point.Natural)) |a| { 40 | self.activePt = a; 41 | } 42 | 43 | return self; 44 | } 45 | 46 | pub fn install(self: *ContextWidget) !void { 47 | dvui.parentSet(self.widget()); 48 | try self.wd.register(); 49 | try self.wd.borderAndBackground(.{}); 50 | } 51 | 52 | pub fn activePoint(self: *ContextWidget) ?Point.Natural { 53 | if (self.focused) { 54 | return self.activePt; 55 | } 56 | 57 | return null; 58 | } 59 | 60 | pub fn widget(self: *ContextWidget) Widget { 61 | return Widget.init(self, data, rectFor, screenRectScale, minSizeForChild, processEvent); 62 | } 63 | 64 | pub fn data(self: *ContextWidget) *WidgetData { 65 | return &self.wd; 66 | } 67 | 68 | pub fn rectFor(self: *ContextWidget, id: dvui.WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 69 | _ = id; 70 | dvui.log.debug("{s}:{d} ContextWidget should not have normal child widgets, only menu stuff", .{ self.wd.src.file, self.wd.src.line }); 71 | return dvui.placeIn(self.wd.contentRect().justSize(), min_size, e, g); 72 | } 73 | 74 | pub fn screenRectScale(self: *ContextWidget, rect: Rect) RectScale { 75 | return self.wd.contentRectScale().rectToRectScale(rect); 76 | } 77 | 78 | pub fn minSizeForChild(self: *ContextWidget, s: Size) void { 79 | self.wd.minSizeMax(self.wd.options.padSize(s)); 80 | } 81 | 82 | pub fn processEvents(self: *ContextWidget) void { 83 | const evts = dvui.events(); 84 | for (evts) |*e| { 85 | if (!dvui.eventMatchSimple(e, self.data())) 86 | continue; 87 | 88 | self.processEvent(e, false); 89 | } 90 | } 91 | 92 | pub fn processEvent(self: *ContextWidget, e: *Event, bubbling: bool) void { 93 | _ = bubbling; 94 | switch (e.evt) { 95 | .mouse => |me| { 96 | if (me.action == .focus and me.button == .right) { 97 | // eat any right button focus events so they don't get 98 | // caught by the containing window cleanup and cause us 99 | // to lose the focus we are about to get from the right 100 | // press below 101 | e.handle(@src(), self.data()); 102 | } else if (me.action == .press and me.button == .right) { 103 | e.handle(@src(), self.data()); 104 | 105 | dvui.focusWidget(self.wd.id, null, e.num); 106 | self.focused = true; 107 | 108 | // scale the point back to natural so we can use it in Popup 109 | self.activePt = me.p.toNatural(); 110 | 111 | // offset just enough so when Popup first appears nothing is highlighted 112 | self.activePt.x += 1; 113 | } 114 | }, 115 | .close_popup => { 116 | if (self.focused) { 117 | // we are getting a bubbled event, so the window we are in is not the current one 118 | dvui.focusWidget(null, self.winId, null); 119 | } 120 | }, 121 | else => {}, 122 | } 123 | 124 | if (e.bubbleable()) { 125 | self.wd.parent.processEvent(e, true); 126 | } 127 | } 128 | 129 | pub fn deinit(self: *ContextWidget) void { 130 | if (self.focused) { 131 | dvui.dataSet(null, self.wd.id, "_activePt", self.activePt); 132 | } 133 | 134 | // we are always given a rect, so we don't do normal layout, don't do these 135 | //self.wd.minSizeSetAndRefresh(); 136 | //self.wd.minSizeReportToParent(); 137 | 138 | dvui.parentReset(self.wd.id, self.wd.parent); 139 | } 140 | 141 | test { 142 | @import("std").testing.refAllDecls(@This()); 143 | } 144 | -------------------------------------------------------------------------------- /src/widgets/FlexBoxWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Options = dvui.Options; 5 | const Rect = dvui.Rect; 6 | const RectScale = dvui.RectScale; 7 | const Size = dvui.Size; 8 | const Widget = dvui.Widget; 9 | const WidgetData = dvui.WidgetData; 10 | 11 | const FlexBoxWidget = @This(); 12 | 13 | pub const InitOptions = struct { 14 | /// Imitates `justify-content` in CSS Flexbox 15 | justify_content: ContentPosition = .center, 16 | }; 17 | 18 | pub const ContentPosition = enum { start, center }; 19 | 20 | wd: WidgetData = undefined, 21 | init_options: InitOptions = undefined, 22 | prevClip: Rect.Physical = .{}, 23 | insert_pt: dvui.Point = .{}, 24 | row_size: Size = .{}, 25 | max_row_width: f32 = 0.0, 26 | max_row_width_prev: f32 = 0.0, 27 | width_nobreak: f32 = 0.0, // width if all children were on one row 28 | 29 | pub fn init(src: std.builtin.SourceLocation, init_opts: InitOptions, opts: Options) FlexBoxWidget { 30 | var self = FlexBoxWidget{}; 31 | const defaults = Options{ .name = "FlexBox" }; 32 | self.wd = WidgetData.init(src, .{}, defaults.override(opts)); 33 | self.init_options = init_opts; 34 | self.max_row_width_prev = dvui.dataGet(null, self.wd.id, "_mrw", f32) orelse 0.0; 35 | return self; 36 | } 37 | 38 | pub fn install(self: *FlexBoxWidget) !void { 39 | try self.wd.register(); 40 | dvui.parentSet(self.widget()); 41 | 42 | self.prevClip = dvui.clip(self.wd.contentRectScale().r); 43 | } 44 | 45 | pub fn drawBackground(self: *FlexBoxWidget) !void { 46 | const clip = dvui.clipGet(); 47 | dvui.clipSet(self.prevClip); 48 | try self.wd.borderAndBackground(.{}); 49 | dvui.clipSet(clip); 50 | } 51 | 52 | pub fn widget(self: *FlexBoxWidget) Widget { 53 | return Widget.init(self, data, rectFor, screenRectScale, minSizeForChild, processEvent); 54 | } 55 | 56 | pub fn data(self: *FlexBoxWidget) *WidgetData { 57 | return &self.wd; 58 | } 59 | 60 | pub fn rectFor(self: *FlexBoxWidget, id: dvui.WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 61 | _ = id; 62 | _ = e; 63 | _ = g; 64 | 65 | var container_width = self.wd.contentRect().w; 66 | if (container_width == 0) { 67 | // if we are not being shown at all, probably this is the first 68 | // frame for us and we should calculate our min height assuming we 69 | // get at least our min width 70 | 71 | container_width = self.wd.options.min_size_contentGet().w; 72 | if (container_width == 0) { 73 | // wasn't given a min width, assume something 74 | container_width = 500; 75 | } 76 | } 77 | 78 | if (self.insert_pt.x > 0 and self.insert_pt.x + min_size.w > container_width) { 79 | // we ran off the end and didn't start at the left edge, break 80 | self.insert_pt.x = 0; 81 | self.insert_pt.y += self.row_size.h; 82 | self.row_size = .{ .w = 0, .h = min_size.h }; 83 | } else { 84 | self.row_size.h = @max(self.row_size.h, min_size.h); 85 | } 86 | 87 | var ret = Rect.fromPoint(self.insert_pt).toSize(min_size); 88 | switch (self.init_options.justify_content) { 89 | .start => {}, 90 | .center => ret.x += (self.wd.contentRect().w - self.max_row_width_prev) / 2, 91 | } 92 | 93 | self.insert_pt.x += min_size.w; 94 | 95 | return ret; 96 | } 97 | 98 | pub fn screenRectScale(self: *FlexBoxWidget, rect: Rect) RectScale { 99 | return self.wd.contentRectScale().rectToRectScale(rect); 100 | } 101 | 102 | pub fn minSizeForChild(self: *FlexBoxWidget, s: Size) void { 103 | self.row_size.w += s.w; 104 | self.max_row_width = @max(self.max_row_width, self.row_size.w); 105 | self.width_nobreak += s.w; 106 | self.wd.min_size = self.wd.options.padSize(.{ .w = self.width_nobreak, .h = self.insert_pt.y + self.row_size.h }); 107 | } 108 | 109 | pub fn processEvent(self: *FlexBoxWidget, e: *dvui.Event, bubbling: bool) void { 110 | _ = bubbling; 111 | if (e.bubbleable()) { 112 | self.wd.parent.processEvent(e, true); 113 | } 114 | } 115 | 116 | pub fn deinit(self: *FlexBoxWidget) void { 117 | dvui.dataSet(null, self.wd.id, "_mrw", self.max_row_width); 118 | dvui.clipSet(self.prevClip); 119 | self.wd.minSizeSetAndRefresh(); 120 | self.wd.minSizeReportToParent(); 121 | dvui.parentReset(self.wd.id, self.wd.parent); 122 | } 123 | 124 | test { 125 | @import("std").testing.refAllDecls(@This()); 126 | } 127 | -------------------------------------------------------------------------------- /src/widgets/FloatingWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Event = dvui.Event; 5 | const Options = dvui.Options; 6 | const Rect = dvui.Rect; 7 | const RectScale = dvui.RectScale; 8 | const Size = dvui.Size; 9 | const Widget = dvui.Widget; 10 | const WidgetData = dvui.WidgetData; 11 | 12 | const FloatingWidget = @This(); 13 | 14 | pub var defaults: Options = .{ 15 | .name = "Floating", 16 | }; 17 | 18 | prev_rendering: bool = undefined, 19 | wd: WidgetData = undefined, 20 | prev_windowId: dvui.WidgetId = undefined, 21 | prevClip: Rect.Physical = .{}, 22 | scale_val: f32 = undefined, 23 | scaler: dvui.ScaleWidget = undefined, 24 | 25 | /// FloatingWidget is a subwindow to show any temporary floating thing. 26 | /// It doesn't focus itself (as a subwindow), and whether it is shown or not is 27 | /// entirely up to the calling code. 28 | /// 29 | /// Don't put menus or menuItems in a floating widget because those depend on 30 | /// focus to work. FloatingMenu is made for that. 31 | /// 32 | /// Use FloatingWindowWidget for a floating window that the user can change 33 | /// size, move around, and adjust stacking. 34 | pub fn init(src: std.builtin.SourceLocation, opts_in: Options) FloatingWidget { 35 | var self = FloatingWidget{}; 36 | 37 | // get scale from parent 38 | self.scale_val = dvui.parentGet().screenRectScale(Rect{}).s / dvui.windowNaturalScale(); 39 | var opts = opts_in; 40 | if (opts.min_size_content) |msc| { 41 | opts.min_size_content = msc.scale(self.scale_val, Size); 42 | } 43 | 44 | // passing options.rect will stop WidgetData.init from calling 45 | // rectFor/minSizeForChild which is important because we are outside 46 | // normal layout 47 | self.wd = WidgetData.init(src, .{ .subwindow = true }, defaults.override(opts).override(.{ .rect = opts.rect orelse .{} })); 48 | 49 | return self; 50 | } 51 | 52 | pub fn install(self: *FloatingWidget) !void { 53 | self.prev_rendering = dvui.renderingSet(false); 54 | 55 | dvui.parentSet(self.widget()); 56 | 57 | self.prev_windowId = dvui.subwindowCurrentSet(self.wd.id, null).id; 58 | 59 | const rs = self.wd.rectScale(); 60 | 61 | try dvui.subwindowAdd(self.wd.id, self.wd.rect, rs.r, false, self.prev_windowId); 62 | dvui.captureMouseMaintain(.{ .id = self.wd.id, .rect = rs.r, .subwindow_id = self.wd.id }); 63 | try self.wd.register(); 64 | 65 | // clip to just our window (using clipSet since we are not inside our parent) 66 | self.prevClip = dvui.clipGet(); 67 | dvui.clipSet(dvui.windowRectPixels()); 68 | _ = dvui.clip(rs.r); 69 | 70 | self.scaler = dvui.ScaleWidget.init(@src(), .{ .scale = &self.scale_val }, .{ .expand = .both }); 71 | try self.scaler.install(); 72 | } 73 | 74 | pub fn widget(self: *FloatingWidget) Widget { 75 | return Widget.init(self, data, rectFor, screenRectScale, minSizeForChild, processEvent); 76 | } 77 | 78 | pub fn data(self: *FloatingWidget) *WidgetData { 79 | return &self.wd; 80 | } 81 | 82 | pub fn rectFor(self: *FloatingWidget, id: dvui.WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 83 | _ = id; 84 | return dvui.placeIn(self.wd.contentRect().justSize(), min_size, e, g); 85 | } 86 | 87 | pub fn screenRectScale(self: *FloatingWidget, rect: Rect) RectScale { 88 | return self.wd.contentRectScale().rectToRectScale(rect); 89 | } 90 | 91 | pub fn minSizeForChild(self: *FloatingWidget, s: Size) void { 92 | self.wd.minSizeMax(self.wd.options.padSize(s)); 93 | } 94 | 95 | pub fn processEvent(self: *FloatingWidget, e: *Event, bubbling: bool) void { 96 | // no normal events, just forward close_popup 97 | switch (e.evt) { 98 | .close_popup => { 99 | self.wd.parent.processEvent(e, true); 100 | }, 101 | else => {}, 102 | } 103 | 104 | // otherwise don't bubble events 105 | _ = bubbling; 106 | } 107 | 108 | pub fn deinit(self: *FloatingWidget) void { 109 | self.scaler.deinit(); 110 | self.wd.minSizeSetAndRefresh(); 111 | 112 | // outside normal layout, don't call minSizeForChild or self.wd.minSizeReportToParent(); 113 | 114 | dvui.parentReset(self.wd.id, self.wd.parent); 115 | _ = dvui.subwindowCurrentSet(self.prev_windowId, null); 116 | dvui.clipSet(self.prevClip); 117 | _ = dvui.renderingSet(self.prev_rendering); 118 | } 119 | 120 | test { 121 | @import("std").testing.refAllDecls(@This()); 122 | } 123 | -------------------------------------------------------------------------------- /src/widgets/IconWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Options = dvui.Options; 5 | const Size = dvui.Size; 6 | const WidgetData = dvui.WidgetData; 7 | 8 | const IconWidget = @This(); 9 | 10 | wd: WidgetData = undefined, 11 | name: []const u8 = undefined, 12 | tvg_bytes: []const u8 = undefined, 13 | icon_opts: dvui.IconRenderOptions = undefined, 14 | 15 | pub fn init(src: std.builtin.SourceLocation, name: []const u8, tvg_bytes: []const u8, icon_opts: dvui.IconRenderOptions, opts: Options) !IconWidget { 16 | var self = IconWidget{}; 17 | const options = (Options{ .name = "Icon" }).override(opts); 18 | self.name = name; 19 | self.tvg_bytes = tvg_bytes; 20 | 21 | var size = Size{}; 22 | if (options.min_size_content) |msc| { 23 | // user gave us a min size, use it 24 | size = msc; 25 | size.w = @max(size.w, dvui.iconWidth(name, tvg_bytes, size.h) catch size.w); 26 | } else { 27 | // user didn't give us one, make it the height of text 28 | const h = options.fontGet().textHeight(); 29 | size = Size{ .w = dvui.iconWidth(name, tvg_bytes, h) catch h, .h = h }; 30 | } 31 | 32 | self.wd = WidgetData.init(src, .{}, options.override(.{ .min_size_content = size })); 33 | self.icon_opts = icon_opts; 34 | return self; 35 | } 36 | 37 | pub fn install(self: *IconWidget) !void { 38 | try self.wd.register(); 39 | try self.wd.borderAndBackground(.{}); 40 | } 41 | 42 | pub fn data(self: *IconWidget) *WidgetData { 43 | return &self.wd; 44 | } 45 | 46 | pub fn matchEvent(self: *IconWidget, e: *dvui.Event) bool { 47 | return dvui.eventMatchSimple(e, &self.wd); 48 | } 49 | 50 | pub fn draw(self: *IconWidget) !void { 51 | const rs = self.wd.parent.screenRectScale(self.wd.contentRect()); 52 | try dvui.renderIcon(self.name, self.tvg_bytes, rs, .{ .rotation = self.wd.options.rotationGet(), .colormod = self.wd.options.color(.text) }, self.icon_opts); 53 | } 54 | 55 | pub fn deinit(self: *IconWidget) void { 56 | self.wd.minSizeSetAndRefresh(); 57 | self.wd.minSizeReportToParent(); 58 | } 59 | 60 | test { 61 | @import("std").testing.refAllDecls(@This()); 62 | } 63 | -------------------------------------------------------------------------------- /src/widgets/LabelWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Event = dvui.Event; 5 | const Options = dvui.Options; 6 | const Rect = dvui.Rect; 7 | const Size = dvui.Size; 8 | const WidgetData = dvui.WidgetData; 9 | 10 | const LabelWidget = @This(); 11 | 12 | pub var defaults: Options = .{ 13 | .name = "Label", 14 | .padding = Rect.all(6), 15 | }; 16 | 17 | wd: WidgetData = undefined, 18 | label_str: []const u8 = undefined, 19 | 20 | pub fn init(src: std.builtin.SourceLocation, comptime fmt: []const u8, args: anytype, opts: Options) LabelWidget { 21 | const l = std.fmt.allocPrint(dvui.currentWindow().arena(), fmt, args) catch |err| blk: { 22 | const newid = dvui.parentGet().extendId(src, opts.idExtra()); 23 | dvui.currentWindow().debug_widget_id = newid; 24 | dvui.log.err("{s}:{d} LabelWidget id {x} (highlighted in red) init() got {!}", .{ src.file, src.line, newid, err }); 25 | break :blk ""; 26 | }; 27 | 28 | return LabelWidget.initNoFmt(src, l, opts); 29 | } 30 | 31 | pub fn initNoFmt(src: std.builtin.SourceLocation, label_str: []const u8, opts: Options) LabelWidget { 32 | var self = LabelWidget{}; 33 | const options = defaults.override(opts); 34 | self.label_str = label_str; 35 | 36 | var size = options.fontGet().textSize(self.label_str); 37 | size = Size.max(size, options.min_size_contentGet()); 38 | 39 | self.wd = WidgetData.init(src, .{}, options.override(.{ .min_size_content = size })); 40 | 41 | return self; 42 | } 43 | 44 | pub fn data(self: *LabelWidget) *WidgetData { 45 | return &self.wd; 46 | } 47 | 48 | pub fn install(self: *LabelWidget) !void { 49 | try self.wd.register(); 50 | try self.wd.borderAndBackground(.{}); 51 | } 52 | 53 | pub fn draw(self: *LabelWidget) !void { 54 | const rect = dvui.placeIn(self.wd.contentRect(), self.wd.options.min_size_contentGet(), .none, self.wd.options.gravityGet()); 55 | var rs = self.wd.parent.screenRectScale(rect); 56 | const oldclip = dvui.clip(rs.r); 57 | var iter = std.mem.splitScalar(u8, self.label_str, '\n'); 58 | var line_height_adj: f32 = undefined; 59 | var first: bool = true; 60 | while (iter.next()) |line| { 61 | if (first) { 62 | line_height_adj = self.wd.options.fontGet().textHeight() * (self.wd.options.fontGet().line_height_factor - 1.0); 63 | first = false; 64 | } else { 65 | rs.r.y += rs.s * line_height_adj; 66 | } 67 | 68 | const tsize = self.wd.options.fontGet().textSize(line); 69 | const lineRect = dvui.placeIn(self.wd.contentRect(), tsize, .none, self.wd.options.gravityGet()); 70 | const liners = self.wd.parent.screenRectScale(lineRect); 71 | 72 | rs.r.x = liners.r.x; 73 | try dvui.renderText(.{ 74 | .font = self.wd.options.fontGet(), 75 | .text = line, 76 | .rs = rs, 77 | .color = self.wd.options.color(.text), 78 | .debug = self.wd.options.debugGet(), 79 | }); 80 | rs.r.y += rs.s * tsize.h; 81 | } 82 | dvui.clipSet(oldclip); 83 | } 84 | 85 | pub fn matchEvent(self: *LabelWidget, e: *Event) bool { 86 | return dvui.eventMatchSimple(e, self.data()); 87 | } 88 | 89 | pub fn processEvents(self: *LabelWidget) void { 90 | const evts = dvui.events(); 91 | for (evts) |*e| { 92 | if (!self.matchEvent(e)) 93 | continue; 94 | 95 | self.processEvent(e, false); 96 | } 97 | } 98 | 99 | pub fn processEvent(self: *LabelWidget, e: *Event, bubbling: bool) void { 100 | _ = bubbling; 101 | 102 | if (e.bubbleable()) { 103 | self.wd.parent.processEvent(e, true); 104 | } 105 | } 106 | 107 | pub fn deinit(self: *LabelWidget) void { 108 | self.wd.minSizeSetAndRefresh(); 109 | self.wd.minSizeReportToParent(); 110 | } 111 | 112 | test { 113 | @import("std").testing.refAllDecls(@This()); 114 | } 115 | -------------------------------------------------------------------------------- /src/widgets/OverlayWidget.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const dvui = @import("../dvui.zig"); 3 | 4 | const Event = dvui.Event; 5 | const Options = dvui.Options; 6 | const Rect = dvui.Rect; 7 | const RectScale = dvui.RectScale; 8 | const Size = dvui.Size; 9 | const Widget = dvui.Widget; 10 | const WidgetData = dvui.WidgetData; 11 | 12 | const OverlayWidget = @This(); 13 | 14 | wd: WidgetData = undefined, 15 | 16 | pub fn init(src: std.builtin.SourceLocation, opts: Options) OverlayWidget { 17 | const defaults = Options{ .name = "Overlay" }; 18 | return OverlayWidget{ .wd = WidgetData.init(src, .{}, defaults.override(opts)) }; 19 | } 20 | 21 | pub fn install(self: *OverlayWidget) !void { 22 | dvui.parentSet(self.widget()); 23 | try self.wd.register(); 24 | } 25 | 26 | pub fn drawBackground(self: *OverlayWidget) !void { 27 | try self.wd.borderAndBackground(.{}); 28 | } 29 | 30 | pub fn widget(self: *OverlayWidget) Widget { 31 | return Widget.init(self, data, rectFor, screenRectScale, minSizeForChild, processEvent); 32 | } 33 | 34 | pub fn data(self: *OverlayWidget) *WidgetData { 35 | return &self.wd; 36 | } 37 | 38 | pub fn rectFor(self: *OverlayWidget, id: dvui.WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 39 | _ = id; 40 | return dvui.placeIn(self.wd.contentRect().justSize(), min_size, e, g); 41 | } 42 | 43 | pub fn screenRectScale(self: *OverlayWidget, rect: Rect) RectScale { 44 | return self.wd.contentRectScale().rectToRectScale(rect); 45 | } 46 | 47 | pub fn minSizeForChild(self: *OverlayWidget, s: Size) void { 48 | self.wd.minSizeMax(self.wd.options.padSize(s)); 49 | } 50 | 51 | pub fn processEvent(self: *OverlayWidget, e: *Event, bubbling: bool) void { 52 | _ = bubbling; 53 | if (e.bubbleable()) { 54 | self.wd.parent.processEvent(e, true); 55 | } 56 | } 57 | 58 | pub fn deinit(self: *OverlayWidget) void { 59 | self.wd.minSizeSetAndRefresh(); 60 | self.wd.minSizeReportToParent(); 61 | dvui.parentReset(self.wd.id, self.wd.parent); 62 | } 63 | 64 | test { 65 | @import("std").testing.refAllDecls(@This()); 66 | } 67 | -------------------------------------------------------------------------------- /src/widgets/SuggestionWidget.zig: -------------------------------------------------------------------------------- 1 | pub const SuggestionWidget = @This(); 2 | 3 | id: dvui.WidgetId = undefined, 4 | options: Options = undefined, 5 | init_options: InitOptions = undefined, 6 | 7 | // menu catches the close_popup from drop if you click off of it 8 | menu: *MenuWidget = undefined, 9 | drop: ?*FloatingMenuWidget = null, 10 | drop_mi: ?MenuItemWidget = null, 11 | drop_mi_index: usize = 0, 12 | selected_index: usize = undefined, // 0 indexed 13 | activate_selected: bool = false, 14 | 15 | pub var defaults: Options = .{ 16 | .name = "Suggestions", 17 | }; 18 | 19 | pub const InitOptions = struct { 20 | rs: RectScale, 21 | text_entry_id: dvui.WidgetId, 22 | }; 23 | 24 | pub fn init(src: std.builtin.SourceLocation, init_opts: InitOptions, opts: Options) SuggestionWidget { 25 | var self = SuggestionWidget{}; 26 | self.id = dvui.parentGet().extendId(src, opts.idExtra()); 27 | self.options = defaults.override(opts); 28 | self.init_options = init_opts; 29 | self.selected_index = dvui.dataGet(null, self.id, "_selected", usize) orelse 0; 30 | return self; 31 | } 32 | 33 | pub fn install(self: *SuggestionWidget) !void { 34 | self.menu = try dvui.menu(@src(), .horizontal, .{ .rect = .{}, .id_extra = self.options.idExtra() }); 35 | } 36 | 37 | // Use this to see if dropped will return true without installing the 38 | // floatingMenu which changes the current subwindow 39 | pub fn willOpen(self: *SuggestionWidget) bool { 40 | return self.menu.submenus_activated; 41 | } 42 | 43 | pub fn open(self: *SuggestionWidget) void { 44 | self.menu.submenus_activated = true; 45 | } 46 | 47 | pub fn close(self: *SuggestionWidget) void { 48 | self.menu.submenus_activated = false; 49 | } 50 | 51 | pub fn dropped(self: *SuggestionWidget) !bool { 52 | if (self.drop != null) { 53 | // protect against calling this multiple times 54 | return true; 55 | } 56 | 57 | if (self.menu.submenus_activated) { 58 | self.drop = try dvui.floatingMenu(@src(), .{ .from = self.init_options.rs.r.toNatural() }, self.options); 59 | if (dvui.firstFrame(self.drop.?.data().id)) { 60 | // don't take focus away from text_entry when showing the suggestions 61 | dvui.focusWidget(self.init_options.text_entry_id, null, null); 62 | } 63 | } 64 | 65 | if (self.drop != null) { 66 | return true; 67 | } 68 | 69 | return false; 70 | } 71 | 72 | pub fn addChoiceLabel(self: *SuggestionWidget, label_str: []const u8) !bool { 73 | var mi = try self.addChoice(); 74 | 75 | try dvui.labelNoFmt(@src(), label_str, .{}); 76 | 77 | var ret: bool = false; 78 | if (mi.activeRect()) |_| { 79 | self.close(); 80 | ret = true; 81 | } 82 | 83 | mi.deinit(); 84 | 85 | return ret; 86 | } 87 | 88 | pub fn addChoice(self: *SuggestionWidget) !*MenuItemWidget { 89 | self.drop_mi = MenuItemWidget.init(@src(), .{ .highlight_only = true }, .{ .id_extra = self.drop_mi_index, .expand = .horizontal, .padding = .{} }); 90 | if (self.selected_index == self.drop_mi_index) { 91 | if (self.activate_selected) { 92 | self.drop_mi.?.activated = true; 93 | self.drop_mi.?.show_active = true; 94 | } else { 95 | self.drop_mi.?.highlight = true; 96 | } 97 | } 98 | try self.drop_mi.?.install(); 99 | self.drop_mi.?.processEvents(); 100 | if (self.drop_mi.?.data().id == dvui.focusedWidgetId()) { 101 | self.selected_index = self.drop_mi_index; 102 | } 103 | try self.drop_mi.?.drawBackground(.{}); 104 | 105 | self.drop_mi_index += 1; 106 | 107 | return &self.drop_mi.?; 108 | } 109 | 110 | pub fn deinit(self: *SuggestionWidget) void { 111 | if (self.selected_index > (self.drop_mi_index -| 1)) { 112 | self.selected_index = self.drop_mi_index -| 1; 113 | dvui.refresh(null, @src(), self.id); 114 | } 115 | dvui.dataSet(null, self.id, "_selected", self.selected_index); 116 | if (self.drop != null) { 117 | self.drop.?.deinit(); 118 | self.drop = null; 119 | } 120 | self.menu.deinit(); 121 | } 122 | 123 | const Options = dvui.Options; 124 | const RectScale = dvui.RectScale; 125 | 126 | const MenuWidget = dvui.MenuWidget; 127 | const MenuItemWidget = dvui.MenuItemWidget; 128 | const FloatingMenuWidget = dvui.FloatingMenuWidget; 129 | 130 | const std = @import("std"); 131 | const dvui = @import("../dvui.zig"); 132 | 133 | test { 134 | @import("std").testing.refAllDecls(@This()); 135 | } 136 | -------------------------------------------------------------------------------- /src/widgets/VirtualParentWidget.zig: -------------------------------------------------------------------------------- 1 | /// This is a widget that forwards all parent calls to its parent. Useful 2 | /// where you want to wrap widgets but only to adjust their IDs. 3 | const std = @import("std"); 4 | const dvui = @import("../dvui.zig"); 5 | 6 | const Event = dvui.Event; 7 | const Options = dvui.Options; 8 | const Rect = dvui.Rect; 9 | const RectScale = dvui.RectScale; 10 | const Size = dvui.Size; 11 | const Widget = dvui.Widget; 12 | const WidgetData = dvui.WidgetData; 13 | 14 | const VirtualParentWidget = @This(); 15 | 16 | wd: WidgetData = undefined, 17 | child_rect_union: ?Rect = null, 18 | 19 | pub fn init(src: std.builtin.SourceLocation, opts: Options) VirtualParentWidget { 20 | const id = dvui.parentGet().extendId(src, opts.idExtra()); 21 | const rect = dvui.dataGet(null, id, "_rect", Rect); 22 | const defaults = Options{ .name = "Virtual Parent", .rect = rect orelse .{} }; 23 | return VirtualParentWidget{ .wd = WidgetData.init(src, .{}, defaults.override(opts)) }; 24 | } 25 | 26 | pub fn install(self: *VirtualParentWidget) !void { 27 | dvui.parentSet(self.widget()); 28 | try self.wd.register(); 29 | } 30 | 31 | pub fn widget(self: *VirtualParentWidget) Widget { 32 | return Widget.init(self, data, rectFor, screenRectScale, minSizeForChild, processEvent); 33 | } 34 | 35 | pub fn data(self: *VirtualParentWidget) *WidgetData { 36 | return &self.wd; 37 | } 38 | 39 | pub fn rectFor(self: *VirtualParentWidget, id: dvui.WidgetId, min_size: Size, e: Options.Expand, g: Options.Gravity) Rect { 40 | const ret = self.wd.parent.rectFor(id, min_size, e, g); 41 | if (self.child_rect_union) |u| { 42 | self.child_rect_union = u.unionWith(ret); 43 | } else { 44 | self.child_rect_union = ret; 45 | } 46 | return ret; 47 | } 48 | 49 | pub fn screenRectScale(self: *VirtualParentWidget, rect: Rect) RectScale { 50 | return self.wd.parent.screenRectScale(rect); 51 | } 52 | 53 | pub fn minSizeForChild(self: *VirtualParentWidget, s: Size) void { 54 | self.wd.parent.minSizeForChild(s); 55 | } 56 | 57 | pub fn processEvent(self: *VirtualParentWidget, e: *Event, bubbling: bool) void { 58 | _ = bubbling; 59 | if (e.bubbleable()) { 60 | self.wd.parent.processEvent(e, true); 61 | } 62 | } 63 | 64 | pub fn deinit(self: *VirtualParentWidget) void { 65 | if (self.child_rect_union) |u| { 66 | dvui.dataSet(null, self.wd.id, "_rect", u); 67 | } 68 | dvui.parentReset(self.wd.id, self.wd.parent); 69 | } 70 | 71 | test { 72 | @import("std").testing.refAllDecls(@This()); 73 | } 74 | -------------------------------------------------------------------------------- /src/zig-favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/david-vanderson/dvui/57612c7d0864fd9c87d17e761df090b6a147e0f9/src/zig-favicon.png --------------------------------------------------------------------------------