committed by
GitHub
486 changed files with 9491 additions and 4956 deletions
@ -0,0 +1,5 @@ |
|||
<ProjectConfiguration> |
|||
<Settings> |
|||
<XUnit2Enabled>False</XUnit2Enabled> |
|||
</Settings> |
|||
</ProjectConfiguration> |
|||
@ -0,0 +1,5 @@ |
|||
<ProjectConfiguration> |
|||
<Settings> |
|||
<IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely> |
|||
</Settings> |
|||
</ProjectConfiguration> |
|||
@ -0,0 +1,39 @@ |
|||
#include "common.h" |
|||
|
|||
namespace |
|||
{ |
|||
id<NSObject> s_inhibitAppSleepHandle{}; |
|||
} |
|||
|
|||
class PlatformBehaviorInhibition : public ComSingleObject<IAvnPlatformBehaviorInhibition, &IID_IAvnCursorFactory> |
|||
{ |
|||
public: |
|||
FORWARD_IUNKNOWN() |
|||
|
|||
virtual void SetInhibitAppSleep(bool inhibitAppSleep, char* reason) override |
|||
{ |
|||
START_COM_CALL; |
|||
|
|||
@autoreleasepool |
|||
{ |
|||
if (inhibitAppSleep && s_inhibitAppSleepHandle == nullptr) |
|||
{ |
|||
NSActivityOptions options = NSActivityUserInitiatedAllowingIdleSystemSleep; |
|||
s_inhibitAppSleepHandle = [[NSProcessInfo processInfo] beginActivityWithOptions:options reason:[NSString stringWithUTF8String: reason]]; |
|||
} |
|||
|
|||
if (!inhibitAppSleep) |
|||
{ |
|||
s_inhibitAppSleepHandle = nullptr; |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
|
|||
extern IAvnPlatformBehaviorInhibition* CreatePlatformBehaviorInhibition() |
|||
{ |
|||
@autoreleasepool |
|||
{ |
|||
return new PlatformBehaviorInhibition(); |
|||
} |
|||
} |
|||
@ -0,0 +1,127 @@ |
|||
using System; |
|||
using Android.Runtime; |
|||
using Android.Text; |
|||
using Android.Views; |
|||
using Android.Views.InputMethods; |
|||
using Avalonia.Android.Platform.SkiaPlatform; |
|||
using Avalonia.Controls.Presenters; |
|||
using Avalonia.Input; |
|||
using Avalonia.Input.Raw; |
|||
using Avalonia.Input.TextInput; |
|||
using Java.Lang; |
|||
using static System.Net.Mime.MediaTypeNames; |
|||
|
|||
namespace Avalonia.Android |
|||
{ |
|||
internal class InputEditable : SpannableStringBuilder, ITextEditable |
|||
{ |
|||
private readonly TopLevelImpl _topLevel; |
|||
private readonly IAndroidInputMethod _inputMethod; |
|||
private readonly AvaloniaInputConnection _avaloniaInputConnection; |
|||
private int _currentBatchLevel; |
|||
private string _previousText; |
|||
private int _previousSelectionStart; |
|||
private int _previousSelectionEnd; |
|||
|
|||
public event EventHandler TextChanged; |
|||
public event EventHandler SelectionChanged; |
|||
public event EventHandler CompositionChanged; |
|||
|
|||
public InputEditable(TopLevelImpl topLevel, IAndroidInputMethod inputMethod, AvaloniaInputConnection avaloniaInputConnection) |
|||
{ |
|||
_topLevel = topLevel; |
|||
_inputMethod = inputMethod; |
|||
_avaloniaInputConnection = avaloniaInputConnection; |
|||
} |
|||
|
|||
public InputEditable(ICharSequence text) : base(text) |
|||
{ |
|||
} |
|||
|
|||
public InputEditable(string text) : base(text) |
|||
{ |
|||
} |
|||
|
|||
public InputEditable(ICharSequence text, int start, int end) : base(text, start, end) |
|||
{ |
|||
} |
|||
|
|||
public InputEditable(string text, int start, int end) : base(text, start, end) |
|||
{ |
|||
} |
|||
|
|||
protected InputEditable(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) |
|||
{ |
|||
} |
|||
|
|||
public int SelectionStart |
|||
{ |
|||
get => Selection.GetSelectionStart(this); set |
|||
{ |
|||
var end = SelectionEnd < 0 ? 0 : SelectionEnd; |
|||
_avaloniaInputConnection.SetSelection(value, end); |
|||
_inputMethod.IMM.UpdateSelection(_topLevel.View, value, end, value, end); |
|||
} |
|||
} |
|||
public int SelectionEnd |
|||
{ |
|||
get => Selection.GetSelectionEnd(this); set |
|||
{ |
|||
var start = SelectionStart < 0 ? 0 : SelectionStart; |
|||
_avaloniaInputConnection.SetSelection(start, value); |
|||
_inputMethod.IMM.UpdateSelection(_topLevel.View, start, value, start, value); |
|||
} |
|||
} |
|||
|
|||
public string? Text |
|||
{ |
|||
get => ToString(); set |
|||
{ |
|||
if (Text != value) |
|||
{ |
|||
Clear(); |
|||
Insert(0, value ?? ""); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public int CompositionStart => BaseInputConnection.GetComposingSpanStart(this); |
|||
|
|||
public int CompositionEnd => BaseInputConnection.GetComposingSpanEnd(this); |
|||
|
|||
public void BeginBatchEdit() |
|||
{ |
|||
_currentBatchLevel++; |
|||
|
|||
if (_currentBatchLevel == 1) |
|||
{ |
|||
_previousText = ToString(); |
|||
_previousSelectionStart = SelectionStart; |
|||
_previousSelectionEnd = SelectionEnd; |
|||
} |
|||
} |
|||
|
|||
public void EndBatchEdit() |
|||
{ |
|||
if (_currentBatchLevel == 1) |
|||
{ |
|||
if(_previousText != Text) |
|||
{ |
|||
TextChanged?.Invoke(this, EventArgs.Empty); |
|||
} |
|||
|
|||
if (_previousSelectionStart != SelectionStart || _previousSelectionEnd != SelectionEnd) |
|||
{ |
|||
SelectionChanged?.Invoke(this, EventArgs.Empty); |
|||
} |
|||
} |
|||
|
|||
_currentBatchLevel--; |
|||
} |
|||
|
|||
public void RaiseCompositionChanged() |
|||
{ |
|||
CompositionChanged?.Invoke(this, EventArgs.Empty); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using Avalonia.Metadata; |
|||
|
|||
namespace Avalonia.Input.TextInput |
|||
{ |
|||
[NotClientImplementable] |
|||
public interface ITextEditable |
|||
{ |
|||
event EventHandler TextChanged; |
|||
event EventHandler SelectionChanged; |
|||
event EventHandler CompositionChanged; |
|||
int SelectionStart { get; set; } |
|||
int SelectionEnd { get; set; } |
|||
int CompositionStart { get; } |
|||
int CompositionEnd { get; } |
|||
|
|||
string? Text { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
namespace Avalonia.Layout; |
|||
|
|||
/// <summary>
|
|||
/// Provides access to layout information of a control.
|
|||
/// </summary>
|
|||
public static class LayoutInformation |
|||
{ |
|||
/// <summary>
|
|||
/// Gets the available size constraint passed in the previous layout pass.
|
|||
/// </summary>
|
|||
/// <param name="control">The control.</param>
|
|||
/// <returns>Previous control measure constraint, if any.</returns>
|
|||
public static Size? GetPreviousMeasureConstraint(Layoutable control) |
|||
{ |
|||
return control.PreviousMeasure; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Gets the control bounds used in the previous layout arrange pass.
|
|||
/// </summary>
|
|||
/// <param name="control">The control.</param>
|
|||
/// <returns>Previous control arrange bounds, if any.</returns>
|
|||
public static Rect? GetPreviousArrangeBounds(Layoutable control) |
|||
{ |
|||
return control.PreviousArrange; |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Avalonia.Platform |
|||
{ |
|||
/// <summary>
|
|||
/// Allows to inhibit platform specific behavior.
|
|||
/// </summary>
|
|||
public interface IPlatformBehaviorInhibition |
|||
{ |
|||
Task SetInhibitAppSleep(bool inhibitAppSleep, string reason); |
|||
} |
|||
} |
|||
@ -1,22 +0,0 @@ |
|||
using System; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Metadata; |
|||
|
|||
namespace Avalonia.Styling; |
|||
|
|||
/// <summary>
|
|||
/// Interface for an application host element with a root theme variant.
|
|||
/// </summary>
|
|||
[Unstable] |
|||
public interface IGlobalThemeVariantProvider : IResourceHost |
|||
{ |
|||
/// <summary>
|
|||
/// Gets the UI theme variant that is used by the control (and its child elements) for resource determination.
|
|||
/// </summary>
|
|||
ThemeVariant ActualThemeVariant { get; } |
|||
|
|||
/// <summary>
|
|||
/// Raised when the theme variant is changed on the element or an ancestor of the element.
|
|||
/// </summary>
|
|||
event EventHandler? ActualThemeVariantChanged; |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
using System; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Metadata; |
|||
|
|||
namespace Avalonia.Styling; |
|||
|
|||
/// <summary>
|
|||
/// Interface for the host element with a theme variant.
|
|||
/// </summary>
|
|||
[Unstable] |
|||
public interface IThemeVariantHost : IResourceHost |
|||
{ |
|||
/// <summary>
|
|||
/// Gets the UI theme that is currently used by the element, which might be different than the RequestedThemeVariantProperty.
|
|||
/// </summary>
|
|||
/// <returns>
|
|||
/// If current control is contained in the ThemeVariantScope, TopLevel or Application with non-default RequestedThemeVariant, that value will be returned.
|
|||
/// Otherwise, current OS theme variant is returned.
|
|||
/// </returns>
|
|||
ThemeVariant ActualThemeVariant { get; } |
|||
|
|||
/// <summary>
|
|||
/// Raised when the theme variant is changed on the element or an ancestor of the element.
|
|||
/// </summary>
|
|||
event EventHandler? ActualThemeVariantChanged; |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue