Browse Source

Merge branch 'master' into fixes/textProcessingBugs

pull/7509/head
Benedikt Stebner 4 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
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)
([Xaml Control Gallery](https://github.com/AvaloniaUI/xamlcontrolsgallery))
![image](https://user-images.githubusercontent.com/4672627/152326453-14944c4d-33da-4d50-a268-b87f80927adb.png)
([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

6
src/Avalonia.Controls/ComboBox.cs

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

21
src/Avalonia.Controls/ItemsControl.cs

@ -79,7 +79,7 @@ namespace Avalonia.Controls
/// <summary>
/// Gets the <see cref="IItemContainerGenerator"/> for the control.
/// </summary>
public IItemContainerGenerator? ItemContainerGenerator
public IItemContainerGenerator ItemContainerGenerator
{
get
{
@ -87,13 +87,10 @@ namespace Avalonia.Controls
{
_itemContainerGenerator = CreateItemContainerGenerator();
if (_itemContainerGenerator != null)
{
_itemContainerGenerator.ItemTemplate = ItemTemplate;
_itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e);
_itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
}
_itemContainerGenerator.ItemTemplate = ItemTemplate;
_itemContainerGenerator.Materialized += (_, e) => OnContainersMaterialized(e);
_itemContainerGenerator.Dematerialized += (_, e) => OnContainersDematerialized(e);
_itemContainerGenerator.Recycled += (_, e) => OnContainersRecycled(e);
}
return _itemContainerGenerator;
@ -240,14 +237,8 @@ namespace Avalonia.Controls
/// Creates the <see cref="ItemContainerGenerator"/> for the control.
/// </summary>
/// <returns>
/// An <see cref="IItemContainerGenerator"/> or null.
/// An <see cref="IItemContainerGenerator"/>.
/// </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()
{
return new ItemContainerGenerator(this);

6
src/Avalonia.Controls/MenuBase.cs

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

6
src/Avalonia.Controls/MenuItem.cs

@ -308,12 +308,12 @@ namespace Avalonia.Controls
{
var index = SelectedIndex;
return (index != -1) ?
(IMenuItem?)ItemContainerGenerator!.ContainerFromIndex(index) :
(IMenuItem?)ItemContainerGenerator.ContainerFromIndex(index) :
null;
}
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
{
return ItemContainerGenerator!.Containers
return ItemContainerGenerator.Containers
.Select(x => x.ContainerControl)
.OfType<IMenuItem>();
}

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

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

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

@ -908,7 +908,7 @@ namespace Avalonia.Controls.Primitives
{
MarkContainerSelected(
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
{
var container = SelectedItem as IContentControl ??
ItemContainerGenerator!.ContainerFromIndex(SelectedIndex) as IContentControl;
ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as IContentControl;
SelectedContentTemplate = container?.ContentTemplate;
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.
/// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!;
(ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <summary>
/// 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.
/// </summary>
public new ITreeItemContainerGenerator ItemContainerGenerator =>
(ITreeItemContainerGenerator)base.ItemContainerGenerator!;
(ITreeItemContainerGenerator)base.ItemContainerGenerator;
/// <inheritdoc/>
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="textStyleOverrides">The text style overrides.</param>
public TextLayout(
string text,
string? text,
Typeface typeface,
double fontSize,
IBrush foreground,
IBrush? foreground,
TextAlignment textAlignment = TextAlignment.Left,
TextWrapping textWrapping = TextWrapping.NoWrap,
TextTrimming textTrimming = TextTrimming.None,
@ -487,7 +487,7 @@ namespace Avalonia.Media.TextFormatting
/// <param name="lineHeight">The height of each line of text.</param>
/// <returns></returns>
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)
{
var textRunStyle = new GenericTextRunProperties(typeface, fontSize, textDecorations, foreground);

Loading…
Cancel
Save