Browse Source

Merge branch 'master' into features/Issue_8298

pull/8304/head
Max Katz 4 years ago
committed by GitHub
parent
commit
fe5912e47d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      samples/ControlCatalog.Android/ControlCatalog.Android.csproj
  2. 2
      src/Android/Avalonia.Android/AndroidPlatform.cs
  3. 7
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  4. 27
      src/Avalonia.X11/X11Window.cs

7
samples/ControlCatalog.Android/ControlCatalog.Android.csproj

@ -20,10 +20,13 @@
</ItemGroup> </ItemGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release' and '$(TF_BUILD)' == ''"> <PropertyGroup Condition="'$(Configuration)'=='Release' and '$(TF_BUILD)' == ''">
<DebugSymbols>True</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<UseInterpreter>False</UseInterpreter>
<RunAOTCompilation>True</RunAOTCompilation> <RunAOTCompilation>True</RunAOTCompilation>
<EnableLLVM>True</EnableLLVM> <EnableLLVM>True</EnableLLVM>
<AndroidEnableProfiledAot>True</AndroidEnableProfiledAot> <AndroidAotAdditionalArguments>no-write-symbols,nodebug</AndroidAotAdditionalArguments>
<AndroidAotMode>Hybrid</AndroidAotMode>
<AndroidGenerateJniMarshalMethods>True</AndroidGenerateJniMarshalMethods>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

2
src/Android/Avalonia.Android/AndroidPlatform.cs

@ -61,8 +61,6 @@ namespace Avalonia.Android
.Bind<IRenderLoop>().ToConstant(new RenderLoop()) .Bind<IRenderLoop>().ToConstant(new RenderLoop())
.Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>(); .Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>();
SkiaPlatform.Initialize();
if (options.UseGpu) if (options.UseGpu)
{ {
EglPlatformOpenGlInterface.TryInitialize(); EglPlatformOpenGlInterface.TryInitialize();

7
src/Android/Avalonia.Android/AvaloniaActivity.cs

@ -31,21 +31,22 @@ namespace Avalonia.Android
CustomizeAppBuilder(builder); CustomizeAppBuilder(builder);
View = new AvaloniaView(this);
SetContentView(View);
var lifetime = new SingleViewLifetime(); var lifetime = new SingleViewLifetime();
lifetime.View = View;
builder.AfterSetup(x => builder.AfterSetup(x =>
{ {
_viewModel = new ViewModelProvider(this).Get(Java.Lang.Class.FromType(typeof(AvaloniaViewModel))) as AvaloniaViewModel; _viewModel = new ViewModelProvider(this).Get(Java.Lang.Class.FromType(typeof(AvaloniaViewModel))) as AvaloniaViewModel;
View = new AvaloniaView(this);
if (_viewModel.Content != null) if (_viewModel.Content != null)
{ {
View.Content = _viewModel.Content; View.Content = _viewModel.Content;
} }
SetContentView(View);
lifetime.View = View;
View.Prepare(); View.Prepare();
}); });

27
src/Avalonia.X11/X11Window.cs

@ -47,6 +47,7 @@ namespace Avalonia.X11
private IntPtr _renderHandle; private IntPtr _renderHandle;
private IntPtr _xSyncCounter; private IntPtr _xSyncCounter;
private XSyncValue _xSyncValue; private XSyncValue _xSyncValue;
private XSyncState _xSyncState = 0;
private bool _mapped; private bool _mapped;
private bool _wasMappedAtLeastOnce = false; private bool _wasMappedAtLeastOnce = false;
private double? _scalingOverride; private double? _scalingOverride;
@ -54,6 +55,14 @@ namespace Avalonia.X11
private TransparencyHelper _transparencyHelper; private TransparencyHelper _transparencyHelper;
private RawEventGrouper _rawEventGrouper; private RawEventGrouper _rawEventGrouper;
private bool _useRenderWindow = false; private bool _useRenderWindow = false;
enum XSyncState
{
None,
WaitConfigure,
WaitPaint
}
public X11Window(AvaloniaX11Platform platform, IWindowImpl popupParent) public X11Window(AvaloniaX11Platform platform, IWindowImpl popupParent)
{ {
_platform = platform; _platform = platform;
@ -507,7 +516,11 @@ namespace Avalonia.X11
if (_useRenderWindow) if (_useRenderWindow)
XConfigureResizeWindow(_x11.Display, _renderHandle, ev.ConfigureEvent.width, XConfigureResizeWindow(_x11.Display, _renderHandle, ev.ConfigureEvent.width,
ev.ConfigureEvent.height); ev.ConfigureEvent.height);
EnqueuePaint(); if (_xSyncState == XSyncState.WaitConfigure)
{
_xSyncState = XSyncState.WaitPaint;
EnqueuePaint();
}
} }
else if (ev.type == XEventName.DestroyNotify else if (ev.type == XEventName.DestroyNotify
&& ev.DestroyWindowEvent.window == _handle) && ev.DestroyWindowEvent.window == _handle)
@ -527,6 +540,7 @@ namespace Avalonia.X11
{ {
_xSyncValue.Lo = new UIntPtr(ev.ClientMessageEvent.ptr3.ToPointer()).ToUInt32(); _xSyncValue.Lo = new UIntPtr(ev.ClientMessageEvent.ptr3.ToPointer()).ToUInt32();
_xSyncValue.Hi = ev.ClientMessageEvent.ptr4.ToInt32(); _xSyncValue.Hi = ev.ClientMessageEvent.ptr4.ToInt32();
_xSyncState = XSyncState.WaitConfigure;
} }
} }
} }
@ -755,8 +769,11 @@ namespace Avalonia.X11
void DoPaint() void DoPaint()
{ {
Paint?.Invoke(new Rect()); Paint?.Invoke(new Rect());
if (_xSyncCounter != IntPtr.Zero) if (_xSyncCounter != IntPtr.Zero && _xSyncState == XSyncState.WaitPaint)
{
_xSyncState = XSyncState.None;
XSyncSetCounter(_x11.Display, _xSyncCounter, _xSyncValue); XSyncSetCounter(_x11.Display, _xSyncCounter, _xSyncValue);
}
} }
public void Invalidate(Rect rect) public void Invalidate(Rect rect)
@ -802,6 +819,12 @@ namespace Avalonia.X11
XDestroyIC(_xic); XDestroyIC(_xic);
_xic = IntPtr.Zero; _xic = IntPtr.Zero;
} }
if (_xSyncCounter != IntPtr.Zero)
{
XSyncDestroyCounter(_x11.Display, _xSyncCounter);
_xSyncCounter = IntPtr.Zero;
}
if (_handle != IntPtr.Zero) if (_handle != IntPtr.Zero)
{ {

Loading…
Cancel
Save