Skip to content

Releases: DrawnUi/DrawnUi.Net

DrawnUI 1.10.8.16

Choose a tag to compare

@taublast taublast released this 02 Nov 14:33
62d5005

What's New 1.10.8.16

  • Tooltips: hover over any control and a short hint appears. It stays right by its control, and long text wraps nicely.
  • Icon buttons can show their accessibility name as a tooltip, so one text serves both mouse users and screen readers.
  • Menus: right-click menus, dropdown lists and desktop menu bars, like in any desktop app.
  • On Windows, tooltips and menus can go past the edge of the app window, just like native ones.
  • Menus work from the keyboard too: open them with Enter or Alt plus a letter, move with the arrows, close with Escape.
  • On Mac: right click, two-finger click and Control-click open your context menus.
  • On Mac: two-finger trackpad scrolling glides on after you lift your fingers, like in native Mac apps.
  • A fresh default look: a blue accent color, and a slightly larger switch.
  • Underlined and crossed-out text takes the color of its letters.
  • The Hello demo apps have a new Tooltips & Menus screen, and their home page cards light up under the mouse.

1.10.8.9

Choose a tag to compare

@taublast taublast released this 31 Oct 07:07
6e37587

What's New 1.10.8.9

  • Right-to-left text. Arabic, Hebrew and the other right-to-left scripts are shaped in every label, and a line that mixes directions reads in the right order: in "Hi مرحبا 123" the digits stay with the Arabic. In SkiaEditor the caret, taps, selection and the Left / Right keys follow the text on screen, as in DrawnUI for React and Rust. A right-to-left paragraph starts at the right edge of its label: HorizontalTextAlignment Start and End follow the reading direction of each paragraph.
  • Same text width everywhere. Text is measured with exact widths, so a label wraps the same way on every platform and in DrawnUI for React and Rust.
  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Emoji inside text. A span with AutoFindFont takes the width of the font it draws with, so an emoji run sits in its own room, also inside a scroll.
  • Italic spacing. Text after an italic span keeps normal word spacing, and an italic letter at the end of a line keeps room for its slant.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

DrawnUI 1.10.8.13

Choose a tag to compare

@taublast taublast released this 31 Oct 21:06
c568f05

What's New 1.10.8.13

  • Stacks fit their content. A SkiaStack without a set width (HorizontalOptions Center, Start or End) is now as wide as its widest child, Fill children included, up to its MaximumWidthRequest. Cards and labels inside get their full text width instead of the width of the narrowest sibling, and wrapped text keeps the spacing below it. The same rule applies in DrawnUI for React and Rust.
  • Faster layout. Stacks of cards and labels lay out about twice as fast: labels reuse their text layout when their width allows it, and stacks no longer measure their children twice. In our tests a page of cards went from 1.04 ms to 0.53 ms per layout.
  • Right-to-left text. Arabic, Hebrew and the other right-to-left scripts are shaped in every label, and a line that mixes directions reads in the right order: in "Hi مرحبا 123" the digits stay with the Arabic. In SkiaEditor the caret, taps, selection and the Left / Right keys follow the text on screen, as in DrawnUI for React and Rust. A right-to-left paragraph starts at the right edge of its label: HorizontalTextAlignment Start and End follow the reading direction of each paragraph.
  • Same text width everywhere. Text is measured with exact widths, so a label wraps the same way on every platform and in DrawnUI for React and Rust.
  • Letters keep their edges. The hook of a "j" and the slant of italic letters at the start or end of a line are drawn whole in every label, cached or not.
  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Canvas back on screen. A canvas that was hidden in the view tree, for example on a page under another page, starts drawing again by itself when it shows.
  • Emoji inside text. A span with AutoFindFont takes the width of the font it draws with, so an emoji run sits in its own room, also inside a scroll.
  • Italic spacing. Text after an italic span keeps normal word spacing, and an italic letter at the end of a line keeps room for its slant.
  • Android hardware buffers on Vulkan. A Vulkan canvas on Android turns on the GPU's hardware buffer import when the device offers it, so a library such as the camera can draw Android hardware buffers straight on the canvas. SkiaVulkanTextureView gives read-only access to its Vulkan handles.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

Packages

All packages are on nuget.org at 1.10.8.13: DrawnUi.Maui, DrawnUi.Net, DrawnUi.Blazor.Wasm, DrawnUi.Blazor.Server, DrawnUi.Web, DrawnUi.Wpf, DrawnUi.OpenTk, and the add-ons DrawnUi.Maui.Game, DrawnUi.Blazor.Game, DrawnUi.Web.Game, DrawnUi.Wpf.Game, DrawnUi.OpenTk.Game, DrawnUi.Maui.MapsUi, DrawnUi.MauiGraphics.

dotnet add package DrawnUi.Maui --version 1.10.8.13

1.10.8.10

Choose a tag to compare

@taublast taublast released this 31 Oct 07:34
a3c808b

What's New 1.10.8.10

  • Right-to-left text. Arabic, Hebrew and the other right-to-left scripts are shaped in every label, and a line that mixes directions reads in the right order: in "Hi مرحبا 123" the digits stay with the Arabic. In SkiaEditor the caret, taps, selection and the Left / Right keys follow the text on screen, as in DrawnUI for React and Rust. A right-to-left paragraph starts at the right edge of its label: HorizontalTextAlignment Start and End follow the reading direction of each paragraph.
  • Same text width everywhere. Text is measured with exact widths, so a label wraps the same way on every platform and in DrawnUI for React and Rust.
  • Letters keep their edges. The hook of a "j" and the slant of italic letters at the start or end of a line are drawn whole in every label, cached or not.
  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Emoji inside text. A span with AutoFindFont takes the width of the font it draws with, so an emoji run sits in its own room, also inside a scroll.
  • Italic spacing. Text after an italic span keeps normal word spacing, and an italic letter at the end of a line keeps room for its slant.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.8

Choose a tag to compare

@taublast taublast released this 30 Oct 17:10
681afb6

What's New 1.10.8.8

  • Right-to-left text. Arabic, Hebrew and the other right-to-left scripts are shaped in every label, and a line that mixes directions reads in the right order: in "Hi مرحبا 123" the digits stay with the Arabic. In SkiaEditor the caret, taps, selection and the Left / Right keys follow the text on screen, as in DrawnUI for React and Rust.
  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Emoji inside text. A span with AutoFindFont takes the width of the font it draws with, so an emoji run sits in its own room, also inside a scroll.
  • Italic spacing. Text after an italic span keeps normal word spacing, and an italic letter at the end of a line keeps room for its slant.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.7

Choose a tag to compare

@taublast taublast released this 30 Oct 15:31
3c2fdb7

What's New 1.10.8.7

  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Emoji inside text. A span with AutoFindFont takes the width of the font it draws with, so an emoji run sits in its own room, also inside a scroll.
  • Italic spacing. Text after an italic span keeps normal word spacing, and an italic letter at the end of a line keeps room for its slant.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.6

Choose a tag to compare

@taublast taublast released this 30 Oct 06:44
93ad8ea

What's New 1.10.8.6

  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Caret at once. An editor focused from code shows its caret at once, at the end of its text.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.5

Choose a tag to compare

@taublast taublast released this 29 Oct 18:34
285c78b

What's New 1.10.8.5

  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • One slide per swipe. A SkiaCarousel swipe lands on the next or the previous slide, however far the finger drags and however fast it flicks; ScrollTo and SelectedIndex still go anywhere.
  • Images load after a fast fling. A page closed while its list still flings fast leaves image loading running for the rest of the app.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.4

Choose a tag to compare

@taublast taublast released this 29 Oct 05:45
6c305c1

What's New 1.10.8.4

  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • Screen readers on every AndroidX version. On Android, the screen-reader bridge works with every Xamarin.AndroidX.Core version an app resolves, including 1.19.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.

1.10.8.3

Choose a tag to compare

@taublast taublast released this 28 Oct 16:49
61d9e5a

What's New 1.10.8.3

  • Masonry layout. SkiaMasonry (LayoutType.Masonry) lays items of different heights in columns without gaps: every item goes to the bottom of the shortest column, like a photo feed. Set Split for the number of columns. It works with children and with ItemsSource: recycled cells, LoadMore pages that measure only the new items, items that grow after they are shown (an image arrives), ScrollToIndex, taps, and keyboard arrows that move to the tile on screen that way. See Layouts.
  • Long lists scroll smoothly all the way. Templated lists of any length follow the mouse wheel and the touchpad row by row, in columns, grids (Split) and SkiaWrap grids, down and back up. A cell that changes size after it is shown, any number of times, moves the cells below it.
  • Horizontal lists and wraps. A templated SkiaRow reports the items really on screen in FirstVisibleIndex / LastVisibleIndex and lays out with every MeasureItemsStrategy, MeasureVisible included. A templated SkiaWrap inside a scroll fires LoadMore at its end and arrives at ScrollToIndex.
  • Steady animations and background caches. A GIF or Lottie playing while a list flings keeps its speed and the fling keeps its own, and ImageDoubleBuffered caches render in the background without touching the frame being drawn.
  • Leaner Android package. On Android, DrawnUi.Maui no longer brings the AppoMobi.Maui.Native.Android package; an app that uses its types references it directly.