Explorar el Código

Use IFramebufferSurface for android.

Nikita Tsukanov hace 8 años
padre
commit
87de571925
Se han modificado 23 ficheros con 63 adiciones y 630 borrados
  1. 2 37
      Avalonia.sln
  2. 2 0
      src/Android/Avalonia.Android/Avalonia.Android.csproj
  3. 43 13
      src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs
  4. 3 3
      src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs
  5. 7 3
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs
  6. 0 7
      src/Skia/Avalonia.Skia.Android.TestApp/App.cs
  7. 0 138
      src/Skia/Avalonia.Skia.Android.TestApp/Avalonia.Skia.Android.TestApp.csproj
  8. 0 26
      src/Skia/Avalonia.Skia.Android.TestApp/Avalonia.Skia.Android.TestApp.v2.ncrunchproject
  9. 0 78
      src/Skia/Avalonia.Skia.Android.TestApp/MainActivity.cs
  10. 0 5
      src/Skia/Avalonia.Skia.Android.TestApp/Properties/AndroidManifest.xml
  11. 0 30
      src/Skia/Avalonia.Skia.Android.TestApp/Properties/AssemblyInfo.cs
  12. 0 114
      src/Skia/Avalonia.Skia.Android.TestApp/Resources/Resource.Designer.cs
  13. BIN
      src/Skia/Avalonia.Skia.Android.TestApp/Resources/drawable/Icon.png
  14. 0 13
      src/Skia/Avalonia.Skia.Android.TestApp/Resources/layout/Main.axml
  15. 0 5
      src/Skia/Avalonia.Skia.Android.TestApp/Resources/values/Strings.xml
  16. 5 4
      src/Skia/Avalonia.Skia.Android/AndroidPlatformRenderInterface.cs
  17. 0 24
      src/Skia/Avalonia.Skia.Android/AndroidRenderTarget.cs
  18. 0 5
      src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj
  19. 0 85
      src/Skia/Avalonia.Skia.Android/RenderTarget.cs
  20. 0 39
      src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs
  21. 1 0
      src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj
  22. 0 0
      src/Skia/Avalonia.Skia.iOS/WindowDrawingContextImpl.cs
  23. 0 1
      src/Skia/Avalonia.Skia/Avalonia.Skia.projitems

+ 2 - 37
Avalonia.sln

@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.26014.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
 EndProject
@@ -99,8 +99,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Desktop", "sr
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Android", "src\Skia\Avalonia.Skia.Android\Avalonia.Skia.Android.csproj", "{BD43F7C0-396B-4AA1-BAD9-DFDE54D51298}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Android.TestApp", "src\Skia\Avalonia.Skia.Android.TestApp\Avalonia.Skia.Android.TestApp.csproj", "{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.iOS.TestApp", "src\Skia\Avalonia.Skia.iOS.TestApp\Avalonia.Skia.iOS.TestApp.csproj", "{DA49C5F3-BE95-461C-B999-072128CCF59E}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.iOS", "src\Skia\Avalonia.Skia.iOS\Avalonia.Skia.iOS.csproj", "{47BE08A7-5985-410B-9FFC-2264B8EA595F}"
@@ -1469,38 +1467,6 @@ Global
 		{BD43F7C0-396B-4AA1-BAD9-DFDE54D51298}.Release|Mono.ActiveCfg = Release|Any CPU
 		{BD43F7C0-396B-4AA1-BAD9-DFDE54D51298}.Release|x86.ActiveCfg = Release|Any CPU
 		{BD43F7C0-396B-4AA1-BAD9-DFDE54D51298}.Release|x86.Build.0 = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|Mono.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Ad-Hoc|x86.Deploy.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|iPhone.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|Mono.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|x86.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|x86.Build.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.AppStore|x86.Deploy.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|Mono.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|x86.Build.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Debug|x86.Deploy.0 = Debug|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|Any CPU.Deploy.0 = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|Mono.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|x86.ActiveCfg = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|x86.Build.0 = Release|Any CPU
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}.Release|x86.Deploy.0 = Release|Any CPU
 		{DA49C5F3-BE95-461C-B999-072128CCF59E}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
 		{DA49C5F3-BE95-461C-B999-072128CCF59E}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
 		{DA49C5F3-BE95-461C-B999-072128CCF59E}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
@@ -2359,7 +2325,6 @@ Global
 		{2F59F3D0-748D-4652-B01E-E0D954756308} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{925DD807-B651-475F-9F7C-CBEB974CE43D} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{BD43F7C0-396B-4AA1-BAD9-DFDE54D51298} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
-		{F92E55A5-ED73-4CCB-AB4B-0541B6757F31} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{DA49C5F3-BE95-461C-B999-072128CCF59E} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{47BE08A7-5985-410B-9FFC-2264B8EA595F} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{7B92AF71-6287-4693-9DCB-BD5B6E927E23} = {7CF9789C-F1D3-4D0E-90E5-F1DF67A2753F}

+ 2 - 0
src/Android/Avalonia.Android/Avalonia.Android.csproj

@@ -70,6 +70,8 @@
     <Compile Include="CursorFactory.cs" />
     <Compile Include="Platform\Input\AndroidKeyboardDevice.cs" />
     <Compile Include="Platform\Input\AndroidMouseDevice.cs" />
+    <Compile Include="Platform\SkiaPlatform\AndroidFramebuffer.cs" />
+    <Compile Include="Platform\SkiaPlatform\InvalidationAwareSurfaceView.cs" />
     <Compile Include="Platform\SkiaPlatform\TopLevelImpl.cs" />
     <Compile Include="Platform\Specific\IAndroidView.cs" />
     <Compile Include="Platform\Specific\Helpers\AndroidTouchEventsHelper.cs" />

+ 43 - 13
src/Skia/Avalonia.Skia.Android/NativeMethods.cs → src/Android/Avalonia.Android/Platform/SkiaPlatform/AndroidFramebuffer.cs

@@ -1,23 +1,54 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Runtime.InteropServices;
-using System.Text;
-
-using Android.App;
-using Android.Content;
-using Android.OS;
 using Android.Runtime;
 using Android.Views;
-using Android.Widget;
+using Avalonia.Controls.Platform.Surfaces;
 
-namespace Avalonia.Skia.Android
+namespace Avalonia.Android.Platform.SkiaPlatform
 {
-    static class NativeMethods
+    class AndroidFramebuffer : ILockedFramebuffer
     {
+        private IntPtr _window;
+
+        public AndroidFramebuffer(Surface surface)
+        {
+            _window = ANativeWindow_fromSurface(JNIEnv.Handle, surface.Handle);
+            ANativeWindow_Buffer buffer;
+            var rc = new ARect()
+            {
+                right = Width = ANativeWindow_getWidth(_window),
+                bottom = Height = ANativeWindow_getHeight(_window)
+            };
+            ANativeWindow_lock(_window, out buffer, ref rc);
+
+            Format = buffer.format == AndroidPixelFormat.WINDOW_FORMAT_RGB_565
+                ? PixelFormat.Rgb565 : PixelFormat.Rgba8888;
+
+            RowBytes = buffer.stride * (Format == PixelFormat.Rgb565 ? 2 : 4);
+            Address = buffer.bits;
+        }
+
+        public void Dispose()
+        {
+            ANativeWindow_unlockAndPost(_window);
+            ANativeWindow_release(_window);
+            _window = IntPtr.Zero;
+            Address = IntPtr.Zero;
+        }
+
+        public IntPtr Address { get; set; }
+        public int Width { get; }
+        public int Height { get; }
+        public int RowBytes { get; }
+        public Size Dpi { get; } = new Size(96, 96);
+        public PixelFormat Format { get; }
+
         [DllImport("android")]
         internal static extern IntPtr ANativeWindow_fromSurface(IntPtr jniEnv, IntPtr handle);
-
+        [DllImport("android")]
+        internal static extern int ANativeWindow_getWidth(IntPtr window);
+        [DllImport("android")]
+        internal static extern int ANativeWindow_getHeight(IntPtr window);
         [DllImport("android")]
         internal static extern void ANativeWindow_release(IntPtr window);
         [DllImport("android")]
@@ -39,8 +70,7 @@ namespace Avalonia.Skia.Android
             public int right;
             public int bottom;
         }
-
-
+        
         internal struct ANativeWindow_Buffer
         {
             // The number of pixels that are show horizontally.

+ 3 - 3
src/Skia/Avalonia.Skia.Android/SkiaView.cs → src/Android/Avalonia.Android/Platform/SkiaPlatform/InvalidationAwareSurfaceView.cs

@@ -14,16 +14,16 @@ using Android.Widget;
 using Avalonia.Media;
 using Avalonia.Platform;
 
-namespace Avalonia.Skia.Android
+namespace Avalonia.Android
 {
-    public abstract class SkiaView : SurfaceView, ISurfaceHolderCallback, IPlatformHandle
+    public abstract class InvalidationAwareSurfaceView : SurfaceView, ISurfaceHolderCallback, IPlatformHandle
     {
         private readonly Context _context;
         bool _invalidateQueued;
         readonly object _lock = new object();
         private readonly Handler _handler;
 
-        public SkiaView(Context context) : base(context)
+        public InvalidationAwareSurfaceView(Context context) : base(context)
         {
             _context = context;
             Holder.AddCallback(this);

+ 7 - 3
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@@ -7,14 +7,16 @@ using Avalonia.Android.Platform.Specific.Helpers;
 using Avalonia.Input;
 using Avalonia.Input.Raw;
 using Avalonia.Platform;
-using Avalonia.Skia.Android;
 using System;
 using System.Collections.Generic;
 using Avalonia.Controls;
+using Avalonia.Controls.Platform.Surfaces;
 
 namespace Avalonia.Android.Platform.SkiaPlatform
 {
-    class TopLevelImpl : SkiaView, IAndroidView, ITopLevelImpl, ISurfaceHolderCallback
+    class TopLevelImpl : InvalidationAwareSurfaceView, IAndroidView, ITopLevelImpl,
+        ISurfaceHolderCallback, IFramebufferPlatformSurface
+
     {
         protected AndroidKeyboardEventsHelper<TopLevelImpl> _keyboardHelper;
 
@@ -183,5 +185,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
         {
             // No window icons for mobile platforms
         }
-            }
+
+        ILockedFramebuffer IFramebufferPlatformSurface.Lock()=>new AndroidFramebuffer(Holder.Surface);
+    }
 }

+ 0 - 7
src/Skia/Avalonia.Skia.Android.TestApp/App.cs

@@ -1,7 +0,0 @@
-
-namespace Avalonia.Skia.Android.TestApp
-{
-    public class App : Application
-    {
-    }
-}

+ 0 - 138
src/Skia/Avalonia.Skia.Android.TestApp/Avalonia.Skia.Android.TestApp.csproj

@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{F92E55A5-ED73-4CCB-AB4B-0541B6757F31}</ProjectGuid>
-    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Skia.Android.TestApp</RootNamespace>
-    <AssemblyName>Avalonia.Skia.Android.TestApp</AssemblyName>
-    <FileAlignment>512</FileAlignment>
-    <AndroidApplication>true</AndroidApplication>
-    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
-    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
-    <AndroidUseLatestPlatformSdk>False</AndroidUseLatestPlatformSdk>
-    <TargetFrameworkVersion>v4.4</TargetFrameworkVersion>
-    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>True</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
-    <AndroidLinkMode>None</AndroidLinkMode>
-    <EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
-    <BundleAssemblies>False</BundleAssemblies>
-    <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
-    <AndroidSupportedAbis>armeabi;armeabi-v7a;x86</AndroidSupportedAbis>
-    <Debugger>Xamarin</Debugger>
-    <AndroidEnableMultiDex>False</AndroidEnableMultiDex>
-    <DevInstrumentationEnabled>True</DevInstrumentationEnabled>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
-    <AndroidLinkMode>Full</AndroidLinkMode>
-    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
-    <BundleAssemblies>False</BundleAssemblies>
-    <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
-    <Debugger>Xamarin</Debugger>
-    <AotAssemblies>False</AotAssemblies>
-    <EnableLLVM>False</EnableLLVM>
-    <AndroidEnableMultiDex>False</AndroidEnableMultiDex>
-    <EnableProguard>False</EnableProguard>
-    <DebugSymbols>False</DebugSymbols>
-    <AndroidSupportedAbis>armeabi;armeabi-v7a;x86</AndroidSupportedAbis>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Mono.Android" />
-    <Reference Include="mscorlib" />
-    <Reference Include="System" />
-    <Reference Include="System.Collections" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Runtime" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="App.cs" />
-    <Compile Include="MainActivity.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Resources\Resource.Designer.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Properties\AndroidManifest.xml" />
-    <AndroidResource Include="Resources\layout\Main.axml" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\Android\Avalonia.Android\Avalonia.Android.csproj">
-      <Project>{7b92af71-6287-4693-9dcb-bd5b6e927e23}</Project>
-      <Name>Avalonia.Android</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{d211e587-d8bc-45b9-95a4-f297c8fa5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj">
-      <Project>{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}</Project>
-      <Name>Avalonia.DotNetFrameworkRuntime</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4c81-8aff-9f27b8e31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{eb582467-6abb-43a1-b052-e981ba910e3a}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Skia.Android\Avalonia.Skia.Android.csproj">
-      <Project>{bd43f7c0-396b-4aa1-bad9-dfde54d51298}</Project>
-      <Name>Avalonia.Skia.Android</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <AndroidResource Include="Resources\drawable\Icon.png" />
-    <AndroidResource Include="Resources\values\Strings.xml" />
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-     Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>

+ 0 - 26
src/Skia/Avalonia.Skia.Android.TestApp/Avalonia.Skia.Android.TestApp.v2.ncrunchproject

@@ -1,26 +0,0 @@
-<ProjectConfiguration>
-  <AutoDetectNugetBuildDependencies>true</AutoDetectNugetBuildDependencies>
-  <BuildPriority>1000</BuildPriority>
-  <CopyReferencedAssembliesToWorkspace>false</CopyReferencedAssembliesToWorkspace>
-  <ConsiderInconclusiveTestsAsPassing>false</ConsiderInconclusiveTestsAsPassing>
-  <PreloadReferencedAssemblies>false</PreloadReferencedAssemblies>
-  <AllowDynamicCodeContractChecking>true</AllowDynamicCodeContractChecking>
-  <AllowStaticCodeContractChecking>false</AllowStaticCodeContractChecking>
-  <AllowCodeAnalysis>false</AllowCodeAnalysis>
-  <IgnoreThisComponentCompletely>true</IgnoreThisComponentCompletely>
-  <RunPreBuildEvents>false</RunPreBuildEvents>
-  <RunPostBuildEvents>false</RunPostBuildEvents>
-  <PreviouslyBuiltSuccessfully>false</PreviouslyBuiltSuccessfully>
-  <InstrumentAssembly>true</InstrumentAssembly>
-  <PreventSigningOfAssembly>false</PreventSigningOfAssembly>
-  <AnalyseExecutionTimes>true</AnalyseExecutionTimes>
-  <DetectStackOverflow>true</DetectStackOverflow>
-  <IncludeStaticReferencesInWorkspace>true</IncludeStaticReferencesInWorkspace>
-  <DefaultTestTimeout>60000</DefaultTestTimeout>
-  <UseBuildConfiguration />
-  <UseBuildPlatform />
-  <ProxyProcessPath />
-  <UseCPUArchitecture>AutoDetect</UseCPUArchitecture>
-  <MSTestThreadApartmentState>STA</MSTestThreadApartmentState>
-  <BuildProcessArchitecture>x86</BuildProcessArchitecture>
-</ProjectConfiguration>

+ 0 - 78
src/Skia/Avalonia.Skia.Android.TestApp/MainActivity.cs

@@ -1,78 +0,0 @@
-using Android.App;
-using Android.OS;
-using Android.Views;
-using Avalonia;
-using Avalonia.Controls;
-using Avalonia.Media;
-
-namespace Avalonia.Skia.Android.TestApp
-{
-    [Activity(Label = "Avalonia.Skia.Android.TestApp", MainLauncher = true, Icon = "@drawable/icon")]
-    public class MainActivity : Activity
-    {
-        
-        protected override void OnCreate(Bundle bundle)
-        {
-            base.OnCreate(bundle);
-
-            App app;
-            if (Avalonia.Application.Current != null)
-                app = (App)Avalonia.Application.Current;
-            else
-            {
-                app = new App();
-                AppBuilder.Configure(app)
-                    .UseAndroid()
-                    .UseSkia()
-                    .SetupWithoutStarting();
-            }
-
-            SetContentView(new MainView(this));
-        }
-
-        class MainView : SkiaRenderView
-        {
-            float _radians = 0;
-            public MainView(Activity context) : base(context)
-            {
-            }
-
-            protected override void OnRender(DrawingContext ctx)
-            {
-                ctx.FillRectangle(Brushes.Green, new Rect(0, 0, Width, Height));
-
-                var rc = new Rect(0, 0, Width/3, Height/3);
-                using (ctx.PushPostTransform(
-                    Avalonia.Matrix.CreateTranslation(-Width/6, -Width/6)*
-                    Avalonia.Matrix.CreateRotation(_radians)*
-                                             Avalonia.Matrix.CreateTranslation(Width/2, Height/2)))
-                {
-                    ctx.FillRectangle(new LinearGradientBrush()
-                    {
-                        GradientStops =
-                        {
-                            new GradientStop() {Color = Colors.Blue},
-                            new GradientStop(Colors.Red, 1)
-                        }
-                    }, rc, 5);
-                }
-
-
-            }
-
-            public override bool OnTouchEvent(MotionEvent e)
-            {
-                if (e.Action == MotionEventActions.Down)
-                    return true;
-                if (e.Action == MotionEventActions.Move)
-                {
-                    _radians = (e.RawY + e.RawY)/100;
-                    Invalidate();
-                    return true;
-                }
-                return base.OnTouchEvent(e);
-            }
-        }
-    }
-}
-

+ 0 - 5
src/Skia/Avalonia.Skia.Android.TestApp/Properties/AndroidManifest.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Avalonia.Skia.Android.TestApp" android:versionCode="1" android:versionName="1.0">
-	<uses-sdk />
-	<application android:label="Avalonia.Skia.Android.TestApp" android:icon="@drawable/Icon"></application>
-</manifest>

+ 0 - 30
src/Skia/Avalonia.Skia.Android.TestApp/Properties/AssemblyInfo.cs

@@ -1,30 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using Android.App;
-
-// General Information about an assembly is controlled through the following 
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Avalonia.Skia.Android.TestApp")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Avalonia.Skia.Android.TestApp")]
-[assembly: AssemblyCopyright("Copyright ©  2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: ComVisible(false)]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers 
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

+ 0 - 114
src/Skia/Avalonia.Skia.Android.TestApp/Resources/Resource.Designer.cs

@@ -1,114 +0,0 @@
-#pragma warning disable 1591
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-[assembly: global::Android.Runtime.ResourceDesignerAttribute("Avalonia.Skia.Android.TestApp.Resource", IsApplication=true)]
-
-namespace Avalonia.Skia.Android.TestApp
-{
-	
-	
-	[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
-	public partial class Resource
-	{
-		
-		static Resource()
-		{
-			global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-		}
-		
-		public static void UpdateIdValues()
-		{
-			global::Avalonia.Android.Resource.String.ApplicationName = global::Avalonia.Skia.Android.TestApp.Resource.String.ApplicationName;
-			global::Avalonia.Android.Resource.String.Hello = global::Avalonia.Skia.Android.TestApp.Resource.String.Hello;
-		}
-		
-		public partial class Attribute
-		{
-			
-			static Attribute()
-			{
-				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-			}
-			
-			private Attribute()
-			{
-			}
-		}
-		
-		public partial class Drawable
-		{
-			
-			// aapt resource value: 0x7f020000
-			public const int Icon = 2130837504;
-			
-			static Drawable()
-			{
-				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-			}
-			
-			private Drawable()
-			{
-			}
-		}
-		
-		public partial class Id
-		{
-			
-			// aapt resource value: 0x7f050000
-			public const int MyButton = 2131034112;
-			
-			static Id()
-			{
-				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-			}
-			
-			private Id()
-			{
-			}
-		}
-		
-		public partial class Layout
-		{
-			
-			// aapt resource value: 0x7f030000
-			public const int Main = 2130903040;
-			
-			static Layout()
-			{
-				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-			}
-			
-			private Layout()
-			{
-			}
-		}
-		
-		public partial class String
-		{
-			
-			// aapt resource value: 0x7f040001
-			public const int ApplicationName = 2130968577;
-			
-			// aapt resource value: 0x7f040000
-			public const int Hello = 2130968576;
-			
-			static String()
-			{
-				global::Android.Runtime.ResourceIdManager.UpdateIdValues();
-			}
-			
-			private String()
-			{
-			}
-		}
-	}
-}
-#pragma warning restore 1591

BIN
src/Skia/Avalonia.Skia.Android.TestApp/Resources/drawable/Icon.png


+ 0 - 13
src/Skia/Avalonia.Skia.Android.TestApp/Resources/layout/Main.axml

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    >
-<Button  
-    android:id="@+id/MyButton"
-    android:layout_width="fill_parent" 
-    android:layout_height="wrap_content" 
-    android:text="@string/Hello"
-    />
-</LinearLayout>

+ 0 - 5
src/Skia/Avalonia.Skia.Android.TestApp/Resources/values/Strings.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="Hello">Hello World, Click Me!</string>
-    <string name="ApplicationName">Avalonia.Skia.Android.TestApp</string>
-</resources>

+ 5 - 4
src/Skia/Avalonia.Skia.Android/AndroidPlatformRenderInterface.cs

@@ -9,6 +9,7 @@ using Android.OS;
 using Android.Runtime;
 using Android.Views;
 using Android.Widget;
+using Avalonia.Controls.Platform.Surfaces;
 using Avalonia.Platform;
 
 namespace Avalonia.Skia
@@ -17,10 +18,10 @@ namespace Avalonia.Skia
     {
         public IRenderTarget CreateRenderTarget(IEnumerable<object> surfaces)
         {
-            var surfaceView = surfaces?.OfType<SurfaceView>().FirstOrDefault();
-            if (surfaceView == null)
-                throw new ArgumentException("Avalonia.Skia.Android is only capable of drawing on SurfaceView");
-            return new WindowRenderTarget(surfaceView);
+            var fb = surfaces?.OfType<IFramebufferPlatformSurface>().FirstOrDefault();
+            if (fb == null)
+                throw new ArgumentException("Avalonia.Skia.Android is only capable of drawing on framebuffer");
+            return new FramebufferRenderTarget(fb);
         }
     }
 }

+ 0 - 24
src/Skia/Avalonia.Skia.Android/AndroidRenderTarget.cs

@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
-using Android.Content;
-using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
-using Avalonia.Media;
-using Avalonia.Platform;
-
-namespace Avalonia.Skia
-{
-    /// <summary>
-    /// We will likely need platform specific pieces to support HW acceleration
-    /// so leaving this class here for now as placeholder.
-    /// </summary>
-    internal partial class RenderTarget : IRenderTarget
-    {
-    }
-}

+ 0 - 5
src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj

@@ -88,11 +88,6 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="AndroidPlatformRenderInterface.cs" />
-    <Compile Include="AndroidRenderTarget.cs" />
-    <Compile Include="NativeMethods.cs" />
-    <Compile Include="RenderTarget.cs" />
-    <Compile Include="SkiaRenderView.cs" />
-    <Compile Include="SkiaView.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />

+ 0 - 85
src/Skia/Avalonia.Skia.Android/RenderTarget.cs

@@ -1,85 +0,0 @@
-using System;
-using Avalonia.Media;
-using Avalonia.Platform;
-using SkiaSharp;
-using Android.Graphics;
-using Android.Runtime;
-using Android.Views;
-using Avalonia.Skia.Android;
-
-namespace Avalonia.Skia
-{
-    internal partial class RenderTarget : IRenderTarget
-    {
-        public SKSurface Surface { get; protected set; }
-
-        public virtual DrawingContext CreateDrawingContext()
-        {
-            return
-                new DrawingContext(
-                    new DrawingContextImpl(Surface.Canvas));
-        }
-
-        public void Dispose()
-        {
-            // Nothing to do here.
-        }
-    }
-
-    internal class WindowRenderTarget : RenderTarget
-    {
-        private readonly SurfaceView _surfaceView;
-        private IntPtr _window;
-
-        public WindowRenderTarget(SurfaceView surfaceView)
-        {
-            _surfaceView = surfaceView;
-        }
-
-        private void PrepareForDraw()
-        {
-            int width = _surfaceView.Width;
-            var height = _surfaceView.Height;
-
-            _window = NativeMethods.ANativeWindow_fromSurface(JNIEnv.Handle, _surfaceView.Holder.Surface.Handle);
-            var buffer = new NativeMethods.ANativeWindow_Buffer();
-            var rc = new NativeMethods.ARect() {right = width, bottom = height};
-            NativeMethods.ANativeWindow_lock(_window, out buffer, ref rc);
-
-            var colorType = buffer.format == NativeMethods.AndroidPixelFormat.WINDOW_FORMAT_RGB_565
-                ? SKColorType.Rgb565 : SKImageInfo.PlatformColorType;
-
-            var stride = buffer.stride * (colorType == SKColorType.Rgb565 ? 2 : 4);
-            
-            Surface = SKSurface.Create(buffer.width, buffer.height, colorType,
-                SKAlphaType.Premul, buffer.bits, stride);
-            
-            if (Surface == null)
-                throw new Exception("Unable to create Skia surface");
-        }
-
-        public override DrawingContext CreateDrawingContext()
-        {
-            PrepareForDraw();
-
-            var canvas = Surface.Canvas;
-            canvas.RestoreToCount(0);
-            canvas.Save();
-            canvas.Clear(SKColors.Red);
-            canvas.ResetMatrix();
-
-            return
-                new DrawingContext(
-                    new WindowDrawingContextImpl(this));
-        }
-
-        public void Present()
-        {
-            Surface?.Dispose();
-            Surface = null;
-            NativeMethods.ANativeWindow_unlockAndPost(_window);
-            NativeMethods.ANativeWindow_release(_window);
-            _window = IntPtr.Zero;
-        }
-    }
-}

+ 0 - 39
src/Skia/Avalonia.Skia.Android/SkiaRenderView.cs

@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using Android.App;
-using Android.Content;
-using Android.OS;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
-using Avalonia.Media;
-using Avalonia.Platform;
-
-namespace Avalonia.Skia.Android
-{
-    public abstract class SkiaRenderView : SkiaView
-    {
-        private IRenderTarget _renderTarget;
-
-        public SkiaRenderView(Activity context) : base(context)
-        {
-            _renderTarget =
-                AvaloniaLocator.Current.GetService<IPlatformRenderInterface>()
-                    .CreateRenderTarget(new object[]{this});
-        }
-
-        protected override void Draw()
-        {
-            if (_renderTarget == null)
-                return;
-            using (var ctx = _renderTarget.CreateDrawingContext())
-                OnRender(ctx);
-        }
-
-        protected abstract void OnRender(DrawingContext ctx);
-
-    }
-}

+ 1 - 0
src/Skia/Avalonia.Skia.iOS/Avalonia.Skia.iOS.csproj

@@ -41,6 +41,7 @@
     <Compile Include="RenderTarget.cs" />
     <Compile Include="SkiaView.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WindowDrawingContextImpl.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="SkiaSharp, Version=1.54.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">

+ 0 - 0
src/Skia/Avalonia.Skia/WindowDrawingContextImpl.cs → src/Skia/Avalonia.Skia.iOS/WindowDrawingContextImpl.cs


+ 0 - 1
src/Skia/Avalonia.Skia/Avalonia.Skia.projitems

@@ -18,7 +18,6 @@
     <Compile Include="$(MSBuildThisFileDirectory)SkiaSharpExtensions.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)StreamGeometryImpl.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)TypefaceCache.cs" />
-    <Compile Include="$(MSBuildThisFileDirectory)WindowDrawingContextImpl.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="$(MSBuildThisFileDirectory)readme.md" />