Browse Source

Merge branch 'master' into fixes/prevent-invalidatevisual-from-render

pull/8863/head
Nikita Tsukanov 4 years ago
committed by GitHub
parent
commit
87d1ed5d27
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 90
      nukebuild/Build.cs
  2. 4
      nukebuild/BuildParameters.cs
  3. 57
      nukebuild/DotNetConfigHelper.cs
  4. 15
      src/Avalonia.Controls/Documents/InlineUIContainer.cs
  5. 26
      src/Avalonia.Controls/RichTextBlock.cs
  6. 3
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor

90
nukebuild/Build.cs

@ -36,25 +36,6 @@ partial class Build : NukeBuild
{ {
[Solution("Avalonia.sln")] readonly Solution Solution; [Solution("Avalonia.sln")] readonly Solution Solution;
static Lazy<string> MsBuildExe = new Lazy<string>(() =>
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
return null;
var msBuildDirectory = VSWhere("-latest -nologo -property installationPath -format value -prerelease").FirstOrDefault().Text;
if (!string.IsNullOrWhiteSpace(msBuildDirectory))
{
string msBuildExe = Path.Combine(msBuildDirectory, @"MSBuild\Current\Bin\MSBuild.exe");
if (!System.IO.File.Exists(msBuildExe))
msBuildExe = Path.Combine(msBuildDirectory, @"MSBuild\15.0\Bin\MSBuild.exe");
return msBuildExe;
}
return null;
}, false);
BuildParameters Parameters { get; set; } BuildParameters Parameters { get; set; }
protected override void OnBuildInitialized() protected override void OnBuildInitialized()
{ {
@ -89,25 +70,28 @@ partial class Build : NukeBuild
} }
ExecWait("dotnet version:", "dotnet", "--info"); ExecWait("dotnet version:", "dotnet", "--info");
ExecWait("dotnet workloads:", "dotnet", "workload list"); ExecWait("dotnet workloads:", "dotnet", "workload list");
Information("Processor count: " + Environment.ProcessorCount);
Information("Available RAM: " + GC.GetGCMemoryInfo().TotalAvailableMemoryBytes / 0x100000 + "MB");
} }
IReadOnlyCollection<Output> MsBuildCommon( DotNetConfigHelper ApplySettingCore(DotNetConfigHelper c)
string projectFile,
Configure<MSBuildSettings> configurator = null)
{ {
return MSBuild(c => c if (Parameters.IsRunningOnAzure)
.SetProjectFile(projectFile) c.AddProperty("JavaSdkDirectory", GetVariable<string>("JAVA_HOME_11_X64"));
// This is required for VS2019 image on Azure Pipelines c.AddProperty("PackageVersion", Parameters.Version)
.When(Parameters.IsRunningOnWindows &&
Parameters.IsRunningOnAzure, _ => _
.AddProperty("JavaSdkDirectory", GetVariable<string>("JAVA_HOME_11_X64")))
.AddProperty("PackageVersion", Parameters.Version)
.AddProperty("iOSRoslynPathHackRequired", true) .AddProperty("iOSRoslynPathHackRequired", true)
.SetProcessToolPath(MsBuildExe.Value)
.SetConfiguration(Parameters.Configuration) .SetConfiguration(Parameters.Configuration)
.SetVerbosity(MSBuildVerbosity.Minimal) .SetVerbosity(DotNetVerbosity.Minimal);
.Apply(configurator)); return c;
} }
DotNetBuildSettings ApplySetting(DotNetBuildSettings c, Configure<DotNetBuildSettings> configurator = null) =>
ApplySettingCore(c).Build.Apply(configurator);
DotNetPackSettings ApplySetting(DotNetPackSettings c, Configure<DotNetPackSettings> configurator = null) =>
ApplySettingCore(c).Pack.Apply(configurator);
DotNetTestSettings ApplySetting(DotNetTestSettings c, Configure<DotNetTestSettings> configurator = null) =>
ApplySettingCore(c).Test.Apply(configurator);
Target Clean => _ => _.Executes(() => Target Clean => _ => _.Executes(() =>
{ {
@ -149,20 +133,11 @@ partial class Build : NukeBuild
Target Compile => _ => _ Target Compile => _ => _
.DependsOn(Clean, CompileNative) .DependsOn(Clean, CompileNative)
.DependsOn(CompileHtmlPreviewer) .DependsOn(CompileHtmlPreviewer)
.Executes(async () => .Executes(() =>
{ {
if (Parameters.IsRunningOnWindows) DotNetBuild(c => ApplySetting(c)
MsBuildCommon(Parameters.MSBuildSolution, c => c .SetProjectFile(Parameters.MSBuildSolution)
.SetProcessArgumentConfigurator(a => a.Add("/r")) );
.AddTargets("Build")
);
else
DotNetBuild(c => c
.SetProjectFile(Parameters.MSBuildSolution)
.AddProperty("PackageVersion", Parameters.Version)
.SetConfiguration(Parameters.Configuration)
);
}); });
void RunCoreTest(string projectName) void RunCoreTest(string projectName)
@ -182,9 +157,8 @@ partial class Build : NukeBuild
Information($"Running for {projectName} ({fw}) ..."); Information($"Running for {projectName} ({fw}) ...");
DotNetTest(c => c DotNetTest(c => ApplySetting(c)
.SetProjectFile(project) .SetProjectFile(project)
.SetConfiguration(Parameters.Configuration)
.SetFramework(fw) .SetFramework(fw)
.EnableNoBuild() .EnableNoBuild()
.EnableNoRestore() .EnableNoRestore()
@ -263,19 +237,7 @@ partial class Build : NukeBuild
.Executes(() => .Executes(() =>
{ {
var data = Parameters; var data = Parameters;
var pathToProjectSource = RootDirectory / "samples" / "ControlCatalog.NetCore";
var pathToPublish = pathToProjectSource / "bin" / data.Configuration / "publish";
DotNetPublish(c => c
.SetProject(pathToProjectSource / "ControlCatalog.NetCore.csproj")
.EnableNoBuild()
.SetConfiguration(data.Configuration)
.AddProperty("PackageVersion", data.Version)
.AddProperty("PublishDir", pathToPublish));
Zip(data.ZipCoreArtifacts, data.BinRoot);
Zip(data.ZipNuGetArtifacts, data.NugetRoot); Zip(data.ZipNuGetArtifacts, data.NugetRoot);
Zip(data.ZipTargetControlCatalogNetCoreDir, pathToPublish);
}); });
Target CreateIntermediateNugetPackages => _ => _ Target CreateIntermediateNugetPackages => _ => _
@ -283,15 +245,7 @@ partial class Build : NukeBuild
.After(RunTests) .After(RunTests)
.Executes(() => .Executes(() =>
{ {
if (Parameters.IsRunningOnWindows) DotNetPack(c => ApplySetting(c).SetProject(Parameters.MSBuildSolution));
MsBuildCommon(Parameters.MSBuildSolution, c => c
.AddTargets("Pack"));
else
DotNetPack(c => c
.SetProject(Parameters.MSBuildSolution)
.SetConfiguration(Parameters.Configuration)
.AddProperty("PackageVersion", Parameters.Version));
}); });
Target CreateNugetPackages => _ => _ Target CreateNugetPackages => _ => _

4
nukebuild/BuildParameters.cs

@ -51,14 +51,12 @@ public partial class Build
public AbsolutePath NugetIntermediateRoot { get; } public AbsolutePath NugetIntermediateRoot { get; }
public AbsolutePath NugetRoot { get; } public AbsolutePath NugetRoot { get; }
public AbsolutePath ZipRoot { get; } public AbsolutePath ZipRoot { get; }
public AbsolutePath BinRoot { get; }
public AbsolutePath TestResultsRoot { get; } public AbsolutePath TestResultsRoot { get; }
public string DirSuffix { get; } public string DirSuffix { get; }
public List<string> BuildDirs { get; } public List<string> BuildDirs { get; }
public string FileZipSuffix { get; } public string FileZipSuffix { get; }
public AbsolutePath ZipCoreArtifacts { get; } public AbsolutePath ZipCoreArtifacts { get; }
public AbsolutePath ZipNuGetArtifacts { get; } public AbsolutePath ZipNuGetArtifacts { get; }
public AbsolutePath ZipTargetControlCatalogNetCoreDir { get; }
public BuildParameters(Build b) public BuildParameters(Build b)
@ -121,14 +119,12 @@ public partial class Build
NugetRoot = ArtifactsDir / "nuget"; NugetRoot = ArtifactsDir / "nuget";
NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget"; NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget";
ZipRoot = ArtifactsDir / "zip"; ZipRoot = ArtifactsDir / "zip";
BinRoot = ArtifactsDir / "bin";
TestResultsRoot = ArtifactsDir / "test-results"; TestResultsRoot = ArtifactsDir / "test-results";
BuildDirs = GlobDirectories(RootDirectory, "**bin").Concat(GlobDirectories(RootDirectory, "**obj")).ToList(); BuildDirs = GlobDirectories(RootDirectory, "**bin").Concat(GlobDirectories(RootDirectory, "**obj")).ToList();
DirSuffix = Configuration; DirSuffix = Configuration;
FileZipSuffix = Version + ".zip"; FileZipSuffix = Version + ".zip";
ZipCoreArtifacts = ZipRoot / ("Avalonia-" + FileZipSuffix); ZipCoreArtifacts = ZipRoot / ("Avalonia-" + FileZipSuffix);
ZipNuGetArtifacts = ZipRoot / ("Avalonia-NuGet-" + FileZipSuffix); ZipNuGetArtifacts = ZipRoot / ("Avalonia-NuGet-" + FileZipSuffix);
ZipTargetControlCatalogNetCoreDir = ZipRoot / ("ControlCatalog.NetCore-" + FileZipSuffix);
} }
string GetVersion() string GetVersion()

57
nukebuild/DotNetConfigHelper.cs

@ -0,0 +1,57 @@
using System.Globalization;
using JetBrains.Annotations;
using Nuke.Common.Tools.DotNet;
// ReSharper disable ReturnValueOfPureMethodIsNotUsed
public class DotNetConfigHelper
{
public DotNetBuildSettings Build;
public DotNetPackSettings Pack;
public DotNetTestSettings Test;
public DotNetConfigHelper(DotNetBuildSettings s)
{
Build = s;
}
public DotNetConfigHelper(DotNetPackSettings s)
{
Pack = s;
}
public DotNetConfigHelper(DotNetTestSettings s)
{
Test = s;
}
public DotNetConfigHelper AddProperty(string key, bool value) =>
AddProperty(key, value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
public DotNetConfigHelper AddProperty(string key, string value)
{
Build = Build?.AddProperty(key, value);
Pack = Pack?.AddProperty(key, value);
Test = Test?.AddProperty(key, value);
return this;
}
public DotNetConfigHelper SetConfiguration(string configuration)
{
Build = Build?.SetConfiguration(configuration);
Pack = Pack?.SetConfiguration(configuration);
Test = Test?.SetConfiguration(configuration);
return this;
}
public DotNetConfigHelper SetVerbosity(DotNetVerbosity verbosity)
{
Build = Build?.SetVerbosity(verbosity);
Pack = Pack?.SetVerbostiy(verbosity);
Test = Test?.SetVerbosity(verbosity);
return this;
}
public static implicit operator DotNetConfigHelper(DotNetBuildSettings s) => new DotNetConfigHelper(s);
public static implicit operator DotNetConfigHelper(DotNetPackSettings s) => new DotNetConfigHelper(s);
public static implicit operator DotNetConfigHelper(DotNetTestSettings s) => new DotNetConfigHelper(s);
}

15
src/Avalonia.Controls/Documents/InlineUIContainer.cs

@ -87,18 +87,7 @@ namespace Avalonia.Controls.Documents
public override TextRunProperties? Properties { get; } public override TextRunProperties? Properties { get; }
public override Size Size public override Size Size => Control.DesiredSize;
{
get
{
if (!Control.IsMeasureValid)
{
Control.Measure(Size.Infinity);
}
return Control.DesiredSize;
}
}
public override double Baseline public override double Baseline
{ {
@ -118,7 +107,7 @@ namespace Avalonia.Controls.Documents
public override void Draw(DrawingContext drawingContext, Point origin) public override void Draw(DrawingContext drawingContext, Point origin)
{ {
Control.Arrange(new Rect(origin, Size)); //noop
} }
} }
} }

26
src/Avalonia.Controls/RichTextBlock.cs

@ -544,6 +544,32 @@ namespace Avalonia.Controls
} }
} }
protected override Size MeasureOverride(Size availableSize)
{
foreach (var child in VisualChildren)
{
if (child is Control control)
{
control.Measure(Size.Infinity);
}
}
return base.MeasureOverride(availableSize);
}
protected override Size ArrangeOverride(Size finalSize)
{
foreach (var child in VisualChildren)
{
if (child is Control control)
{
control.Arrange(new Rect(control.DesiredSize));
}
}
return base.ArrangeOverride(finalSize);
}
private string GetSelection() private string GetSelection()
{ {
if (!IsTextSelectionEnabled) if (!IsTextSelectionEnabled)

3
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor

@ -15,7 +15,8 @@
<input id="inputElement" @ref="_inputElement" type="text" @oninput="OnInput" <input id="inputElement" @ref="_inputElement" type="text" @oninput="OnInput"
onpaste="return false;" onpaste="return false;"
oncopy="return false;" oncopy="return false;"
oncut="return false;"/> oncut="return false;"
autocapitalize="none"/>
</div> </div>
<style> <style>

Loading…
Cancel
Save