Browse Source

Merge pull request #11773 from robloo/ellipse-geometry

EllipseGeometry Clone Fix
pull/11778/head
Jumar Macato 3 years ago
committed by GitHub
parent
commit
d78dc2aa3b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.Base/AvaloniaObjectExtensions.cs
  2. 41
      src/Avalonia.Base/Media/EllipseGeometry.cs
  3. 2
      src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs
  4. 2
      src/Avalonia.Base/Platform/IPlatformRenderInterface.cs
  5. 2
      src/Avalonia.Base/Utilities/TypeUtilities.cs
  6. 2
      src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs

2
src/Avalonia.Base/AvaloniaObjectExtensions.cs

@ -334,7 +334,7 @@ namespace Avalonia
/// <typeparamref name="TTarget"/>.
/// </summary>
/// <typeparam name="TTarget">The type of the property change sender.</typeparam>
/// /// <typeparam name="TValue">The type of the property..</typeparam>
/// <typeparam name="TValue">The type of the property.</typeparam>
/// <param name="observable">The property changed observable.</param>
/// <param name="action">
/// The method to call. The parameters are the sender and the event args.

41
src/Avalonia.Base/Media/EllipseGeometry.cs

@ -56,6 +56,10 @@ namespace Avalonia.Media
/// <summary>
/// Gets or sets a rect that defines the bounds of the ellipse.
/// </summary>
/// <remarks>
/// When set, this takes priority over the other properties that define an
/// ellipse using a center point and X/Y-axis radii.
/// </remarks>
public Rect Rect
{
get => GetValue(RectProperty);
@ -65,6 +69,10 @@ namespace Avalonia.Media
/// <summary>
/// Gets or sets a double that defines the radius in the X-axis of the ellipse.
/// </summary>
/// <remarks>
/// In order for this property to be used, <see cref="Rect"/> must not be set
/// (equal to the default <see cref="Avalonia.Rect"/> value).
/// </remarks>
public double RadiusX
{
get => GetValue(RadiusXProperty);
@ -74,6 +82,10 @@ namespace Avalonia.Media
/// <summary>
/// Gets or sets a double that defines the radius in the Y-axis of the ellipse.
/// </summary>
/// <remarks>
/// In order for this property to be used, <see cref="Rect"/> must not be set
/// (equal to the default <see cref="Avalonia.Rect"/> value).
/// </remarks>
public double RadiusY
{
get => GetValue(RadiusYProperty);
@ -83,6 +95,10 @@ namespace Avalonia.Media
/// <summary>
/// Gets or sets a point that defines the center of the ellipse.
/// </summary>
/// <remarks>
/// In order for this property to be used, <see cref="Rect"/> must not be set
/// (equal to the default <see cref="Avalonia.Rect"/> value).
/// </remarks>
public Point Center
{
get => GetValue(CenterProperty);
@ -92,7 +108,30 @@ namespace Avalonia.Media
/// <inheritdoc/>
public override Geometry Clone()
{
return new EllipseGeometry(Rect);
// Note that the ellipse properties are used in two modes:
//
// 1. Rect-only Mode:
// Directly set the rectangle bounds the ellipse will fill
//
// 2. Center + Radii Mode:
// Set a center-point and then X/Y-axis radii that are used to
// calculate the rectangle bounds the ellipse will fill.
// This is the only mode supported by WPF.
//
// Rendering the ellipse will only ever use one of these two modes
// based on if the Rect property is set (not equal to default).
//
// This means it would normally be fine to copy ONLY the Rect property
// when it is set. However, while it would render the same, it isn't
// a true clone. We want to include all the properties here regardless
// of the rendering mode that will eventually be used.
return new EllipseGeometry()
{
Rect = Rect,
RadiusX = RadiusX,
RadiusY = RadiusY,
Center = Center,
};
}
/// <inheritdoc/>

2
src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs

@ -687,7 +687,7 @@ namespace Avalonia.Media.TextFormatting.Unicode
/// <remarks>
/// This method resolves the sos and eos values for the run
/// and adds the run to the list
/// /// </remarks>
/// </remarks>
/// <param name="start">The index of the start of the run (in x9 removed units)</param>
/// <param name="length">The length of the run (in x9 removed units)</param>
/// <param name="level">The level of the run</param>

2
src/Avalonia.Base/Platform/IPlatformRenderInterface.cs

@ -18,7 +18,7 @@ namespace Avalonia.Platform
/// Creates an ellipse geometry implementation.
/// </summary>
/// <param name="rect">The bounds of the ellipse.</param>
/// <returns>An ellipse geometry..</returns>
/// <returns>An ellipse geometry.</returns>
IGeometryImpl CreateEllipseGeometry(Rect rect);
/// <summary>

2
src/Avalonia.Base/Utilities/TypeUtilities.cs

@ -306,7 +306,7 @@ namespace Avalonia.Utilities
/// if the value could not be converted.
/// </summary>
/// <param name="value">The value to convert.</param>
/// <param name="type">The type to convert to..</param>
/// <param name="type">The type to convert to.</param>
/// <param name="culture">The culture to use.</param>
/// <returns>A value of <paramref name="type"/>.</returns>
[RequiresUnreferencedCode(TrimmingMessages.TypeConversionRequiresUnreferencedCodeMessage)]

2
src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs

@ -216,7 +216,7 @@ namespace Avalonia.Controls.Primitives.PopupPositioning
///
/// If the adjusted position also ends up being constrained, the resulting position of the
/// FlipX adjustment will be the one before the adjustment.
/// /// </remarks>
/// </remarks>
FlipX = 4,
/// <summary>

Loading…
Cancel
Save