Browse Source

Merge branch 'master' into fixes/textProcessingBugs

pull/7509/head
Benedikt Stebner 5 years ago
committed by GitHub
parent
commit
29db5d383b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      readme.md
  2. 6
      src/Avalonia.Controls/ComboBox.cs
  3. 21
      src/Avalonia.Controls/ItemsControl.cs
  4. 6
      src/Avalonia.Controls/MenuBase.cs
  5. 6
      src/Avalonia.Controls/MenuItem.cs
  6. 2
      src/Avalonia.Controls/Presenters/CarouselPresenter.cs
  7. 2
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  8. 2
      src/Avalonia.Controls/TabControl.cs
  9. 2
      src/Avalonia.Controls/TreeView.cs
  10. 2
      src/Avalonia.Controls/TreeViewItem.cs
  11. 6
      src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs

15
readme.md

@ -26,18 +26,15 @@ Install-Package Avalonia.Desktop
## Showcase ## Showcase
Examples of UIs built with Avalonia Examples of UIs built with Avalonia
![image](https://user-images.githubusercontent.com/4672627/84707589-5b69a880-af35-11ea-87a6-7ad57a31d314.png) <video src="https://user-images.githubusercontent.com/4672627/152325602-28df36ec-6444-44a6-aebe-90ad52c8f27a.mp4"></video>
([Lunacy](https://icons8.com/lunacy))
([Synfonia](https://github.com/jmacato/Synfonia)) ![image](https://user-images.githubusercontent.com/4672627/152325740-261c27a3-e6f0-4662-bff7-4796d4940e04.png)
([PlasticSCM](https://www.plasticscm.com/))
![image](https://user-images.githubusercontent.com/4672627/85069644-d8419000-b18a-11ea-8732-be9055bb61fd.PNG) ![image](https://user-images.githubusercontent.com/4672627/152326453-14944c4d-33da-4d50-a268-b87f80927adb.png)
([Xaml Control Gallery](https://github.com/AvaloniaUI/xamlcontrolsgallery)) ([WasabiWallet](https://www.wasabiwallet.io/))
![image](https://user-images.githubusercontent.com/4672627/85069659-dc6dad80-b18a-11ea-8375-39ef95315b5c.PNG)
([Xaml Control Gallery](https://github.com/AvaloniaUI/xamlcontrolsgallery))
![image](https://user-images.githubusercontent.com/4672627/84708947-c3b98980-af37-11ea-8c9d-503334615bbf.png)
([Xaml Control Gallery](https://github.com/AvaloniaUI/xamlcontrolsgallery))
## JetBrains Rider ## JetBrains Rider

6
src/Avalonia.Controls/ComboBox.cs

@ -360,12 +360,12 @@ namespace Avalonia.Controls
var selectedIndex = SelectedIndex; var selectedIndex = SelectedIndex;
if (IsDropDownOpen && selectedIndex != -1) if (IsDropDownOpen && selectedIndex != -1)
{ {
var container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); var container = ItemContainerGenerator.ContainerFromIndex(selectedIndex);
if (container == null && SelectedIndex != -1) if (container == null && SelectedIndex != -1)
{ {
ScrollIntoView(Selection.SelectedIndex); ScrollIntoView(Selection.SelectedIndex);
container = ItemContainerGenerator!.ContainerFromIndex(selectedIndex); container = ItemContainerGenerator.ContainerFromIndex(selectedIndex);
} }
if (container != null && CanFocus(container)) if (container != null && CanFocus(container))
@ -415,7 +415,7 @@ namespace Avalonia.Controls
private void SelectFocusedItem() private void SelectFocusedItem()
{ {
foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator!.Containers) foreach (ItemContainerInfo dropdownItem in ItemContainerGenerator.Containers)
{ {
if (dropdownItem.ContainerControl.IsFocused) if (dropdownItem.ContainerControl.IsFocused)
{ {

21
src/Avalonia.Controls/ItemsControl.cs

@ -79,7 +79,7 @@ namespace Avalonia.Controls
/// <summary> /// <summary>
/// Gets the <see cref="IItemContainerGenerator"/> for the control. /// Gets the <see cref="IItemContainerGenerator"/> for the control.
/// </summary> /// </summary>
public IItemContainerGenerator? ItemContainerGenerator public IItemContainerGenerator ItemContainerGenerator
{ {
get get
{ {
@ -87,13 +87,10 @@ namespace Avalonia.Controls
{ {
_itemContainerGenerator = CreateItemContainerGenerator(); _itemContainerGenerator = CreateItemContainerGenerator();
if (_itemContainerGenerator != null) _itemContainerGenerator.ItemTemplate = ItemTemplate;
{ _itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e);
_itemContainerGenerator.ItemTemplate = ItemTemplate; _itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e); _itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
_itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
}
} }
return _itemContainerGenerator; return _itemContainerGenerator;
@ -240,14 +237,8 @@ namespace Avalonia.Controls
/// Creates the <see cref="ItemContainerGenerator"/> for the control. /// Creates the <see cref="ItemContainerGenerator"/> for the control.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// An <see cref="IItemContainerGenerator"/> or null. /// An <see cref="IItemContainerGenerator"/>.
/// </returns> /// </returns>
/// <remarks>
/// Certain controls such as <see cref="TabControl"/> don't actually create item
/// containers; however they want it to be ItemsControls so that they have an Items
/// property etc. In this case, a derived class can override this method to return null
/// in order to disable the creation of item containers.
/// </remarks>
protected virtual IItemContainerGenerator CreateItemContainerGenerator() protected virtual IItemContainerGenerator CreateItemContainerGenerator()
{ {
return new ItemContainerGenerator(this); return new ItemContainerGenerator(this);

6
src/Avalonia.Controls/MenuBase.cs

@ -81,13 +81,13 @@ namespace Avalonia.Controls
{ {
var index = SelectedIndex; var index = SelectedIndex;
return (index != -1) ? return (index != -1) ?
(IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) :
null; null;
} }
set set
{ {
SelectedIndex = value is not null ? SelectedIndex = value is not null ?
ItemContainerGenerator!.IndexFromContainer(value) : -1; ItemContainerGenerator.IndexFromContainer(value) : -1;
} }
} }
@ -96,7 +96,7 @@ namespace Avalonia.Controls
{ {
get get
{ {
return ItemContainerGenerator!.Containers return ItemContainerGenerator.Containers
.Select(x => x.ContainerControl) .Select(x => x.ContainerControl)
.OfType<IMenuItem>(); .OfType<IMenuItem>();
} }

6
src/Avalonia.Controls/MenuItem.cs

@ -308,12 +308,12 @@ namespace Avalonia.Controls
{ {
var index = SelectedIndex; var index = SelectedIndex;
return (index != -1) ? return (index != -1) ?
(IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) : (IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) :
null; null;
} }
set set
{ {
SelectedIndex = value is not null ? ItemContainerGenerator!.IndexFromContainer(value) : -1; SelectedIndex = value is not null ? ItemContainerGenerator.IndexFromContainer(value) : -1;
} }
} }
@ -322,7 +322,7 @@ namespace Avalonia.Controls
{ {
get get
{ {
return ItemContainerGenerator!.Containers return ItemContainerGenerator.Containers
.Select(x => x.ContainerControl) .Select(x => x.ContainerControl)
.OfType<IMenuItem>(); .OfType<IMenuItem>();
} }

2
src/Avalonia.Controls/Presenters/CarouselPresenter.cs

@ -170,7 +170,7 @@ namespace Avalonia.Controls.Presenters
{ {
if (fromIndex != toIndex) if (fromIndex != toIndex)
{ {
var generator = ItemContainerGenerator!; var generator = ItemContainerGenerator;
IControl? from = null; IControl? from = null;
IControl? to = null; IControl? to = null;

2
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -908,7 +908,7 @@ namespace Avalonia.Controls.Primitives
{ {
MarkContainerSelected( MarkContainerSelected(
container, container,
Selection.IsSelected(ItemContainerGenerator!.IndexFromContainer(container))); Selection.IsSelected(ItemContainerGenerator.IndexFromContainer(container)));
} }
} }
} }

2
src/Avalonia.Controls/TabControl.cs

@ -164,7 +164,7 @@ namespace Avalonia.Controls
else else
{ {
var container = SelectedItem as IContentControl ?? var container = SelectedItem as IContentControl ??
ItemContainerGenerator!.ContainerFromIndex(SelectedIndex) as IContentControl; ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as IContentControl;
SelectedContentTemplate = container?.ContentTemplate; SelectedContentTemplate = container?.ContentTemplate;
SelectedContent = container?.Content; SelectedContent = container?.Content;
} }

2
src/Avalonia.Controls/TreeView.cs

@ -79,7 +79,7 @@ namespace Avalonia.Controls
/// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view. /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
/// </summary> /// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator => public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!; (ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <summary> /// <summary>
/// Gets or sets a value indicating whether to automatically scroll to newly selected items. /// Gets or sets a value indicating whether to automatically scroll to newly selected items.

2
src/Avalonia.Controls/TreeViewItem.cs

@ -89,7 +89,7 @@ namespace Avalonia.Controls
/// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view. /// Gets the <see cref="ITreeItemContainerGenerator"/> for the tree view.
/// </summary> /// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator => public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!; (ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <inheritdoc/> /// <inheritdoc/>
protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator<TreeViewItem>(); protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator<TreeViewItem>();

6
src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs

@ -35,10 +35,10 @@ namespace Avalonia.Media.TextFormatting
/// <param name="maxLines">The maximum number of text lines.</param> /// <param name="maxLines">The maximum number of text lines.</param>
/// <param name="textStyleOverrides">The text style overrides.</param> /// <param name="textStyleOverrides">The text style overrides.</param>
public TextLayout( public TextLayout(
string text, string? text,
Typeface typeface, Typeface typeface,
double fontSize, double fontSize,
IBrush foreground, IBrush? foreground,
TextAlignment textAlignment = TextAlignment.Left, TextAlignment textAlignment = TextAlignment.Left,
TextWrapping textWrapping = TextWrapping.NoWrap, TextWrapping textWrapping = TextWrapping.NoWrap,
TextTrimming textTrimming = TextTrimming.None, TextTrimming textTrimming = TextTrimming.None,
@ -487,7 +487,7 @@ namespace Avalonia.Media.TextFormatting
/// <param name="lineHeight">The height of each line of text.</param> /// <param name="lineHeight">The height of each line of text.</param>
/// <returns></returns> /// <returns></returns>
private static TextParagraphProperties CreateTextParagraphProperties(Typeface typeface, double fontSize, private static TextParagraphProperties CreateTextParagraphProperties(Typeface typeface, double fontSize,
IBrush foreground, TextAlignment textAlignment, TextWrapping textWrapping, IBrush? foreground, TextAlignment textAlignment, TextWrapping textWrapping,
TextDecorationCollection? textDecorations, FlowDirection flowDirection, double lineHeight) TextDecorationCollection? textDecorations, FlowDirection flowDirection, double lineHeight)
{ {
var textRunStyle = new GenericTextRunProperties(typeface, fontSize, textDecorations, foreground); var textRunStyle = new GenericTextRunProperties(typeface, fontSize, textDecorations, foreground);

Loading…
Cancel
Save