This commit is contained in:
Wiesław Šoltés 2023-12-31 12:40:45 +01:00
Родитель f6fd3df9ba
Коммит 996684464f
47 изменённых файлов: 24 добавлений и 458 удалений

36
.github/workflows/pages.yml поставляемый
Просмотреть файл

@ -1,36 +0,0 @@
name: Deploy to GitHub Pages
on:
push:
branches: [ main ]
jobs:
deploy-to-github-pages:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v1.9.0
- name: Install wasm-tools
run: dotnet workload install wasm-tools
- name: Publish .NET Project
run: dotnet publish VectorPaint.Web/VectorPaint.Web.csproj -c Release -o release --nologo
- name: Change base-tag in index.html from / to VectorPaint
run: sed -i 's/<base href="\/" \/>/<base href="\/VectorPaint\/" \/>/g' release/wwwroot/index.html
- name: copy index.html to 404.html
run: cp release/wwwroot/index.html release/wwwroot/404.html
- name: Add .nojekyll file
run: touch release/wwwroot/.nojekyll
- name: Commit wwwroot to GitHub Pages
uses: JamesIves/github-pages-deploy-action@4.1.7
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages
FOLDER: release/wwwroot

Двоичные данные
VectorPaint.NetCore/Assets/avalonia-logo.ico

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 172 KiB

Просмотреть файл

@ -1,24 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU' Or '$(Configuration)|$(Platform)'=='Debug|x64'">
<OutputType>Exe</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU' Or '$(Configuration)|$(Platform)'=='Release|x64'">
<OutputType>WinExe</OutputType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>False</IsPackable>
<Nullable>enable</Nullable>
<Configurations>Debug;Release</Configurations>
<Platforms>AnyCPU;x64</Platforms>
<RootNamespace>VectorPaint.NetCore</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview1" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview1" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VectorPaint.Base\VectorPaint.Base.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -1,10 +0,0 @@
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"/>
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>

Просмотреть файл

@ -1,16 +0,0 @@
using Avalonia.ReactiveUI;
using Avalonia.Web.Blazor;
namespace VectorPaint.Web;
public partial class App
{
protected override void OnParametersSet()
{
base.OnParametersSet();
WebAppBuilder.Configure<VectorPaint.App>()
.UseReactiveUI()
.SetupWithSingleViewLifetime();
}
}

Просмотреть файл

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<linker>
<assembly fullname="VectorPaint.Web" preserve="All" />
</linker>

Просмотреть файл

@ -1,3 +0,0 @@
@page "/"
<AvaloniaView/>

Просмотреть файл

@ -1,25 +0,0 @@
using System;
using System.Net.Http;
using System.Threading.Tasks;
using VectorPaint.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.DependencyInjection;
public class Program
{
public static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
public static WebAssemblyHostBuilder CreateHostBuilder(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
return builder;
}
}

Просмотреть файл

@ -1,30 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:13961",
"sslPort": 44319
}
},
"profiles": {
"VectorPaint.Web - IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"VectorPaint.Web": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

Просмотреть файл

@ -1,7 +0,0 @@
@inherits LayoutComponentBase
<div class="page">
<div class="main">
@Body
</div>
</div>

Просмотреть файл

@ -1,70 +0,0 @@
.page {
position: relative;
display: flex;
flex-direction: column;
}
.main {
flex: 1;
}
.sidebar {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row ::deep a, .top-row .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
}
.top-row a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row:not(.auth) {
display: none;
}
.top-row.auth {
justify-content: space-between;
}
.top-row a, .top-row .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row {
position: sticky;
top: 0;
z-index: 1;
}
.main > div {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}

Просмотреть файл

@ -1,72 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>False</IsPackable>
<RootNamespace>VectorPaint.Web</RootNamespace>
<EmccTotalMemory>16777216</EmccTotalMemory>
<BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
<BlazorWebAssemblyPreserveCollationData>false</BlazorWebAssemblyPreserveCollationData>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<WasmNativeStrip>false</WasmNativeStrip>
<EmccCompileOptimizationFlag>-O1</EmccCompileOptimizationFlag>
<RunAOTCompilation>false</RunAOTCompilation>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<Optimize>true</Optimize>
<WasmNativeStrip>true</WasmNativeStrip>
<EmccCompileOptimizationFlag>-O3</EmccCompileOptimizationFlag>
<EmccLinkOptimizationFlag>-O3</EmccLinkOptimizationFlag>
<RunAOTCompilation>false</RunAOTCompilation>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebuggerSupport>false</DebuggerSupport>
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
<EventSourceSupport>false</EventSourceSupport>
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
<InvariantGlobalization>true</InvariantGlobalization>
<MetadataUpdaterSupport>false</MetadataUpdaterSupport>
<UseNativeHttpHandler>true</UseNativeHttpHandler>
<UseSystemResourceKeys>true</UseSystemResourceKeys>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>link</TrimMode>
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<BlazorLinkerDescriptor Include="LinkerConfig.xml" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp.Scripting" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.Scripting" />
<TrimmableAssembly Include="Avalonia.Controls.DataGrid" />
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<BlazorLinkerDescriptor Include="LinkerConfig.xml" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.CSharp.Scripting" />
<TrimmableAssembly Include="Microsoft.CodeAnalysis.Scripting" />
<TrimmableAssembly Include="Avalonia.Controls.DataGrid" />
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.0" PrivateAssets="all" />
<PackageReference Include="Avalonia.Web.Blazor" Version="11.0.0-preview1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VectorPaint.Base\VectorPaint.Base.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -1,11 +0,0 @@
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using Avalonia.Web.Blazor
@using VectorPaint.Web
@using VectorPaint.Web.Shared

Просмотреть файл

@ -1,5 +0,0 @@
<svg width="35" height="35" viewBox="0 0 35 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.4661 34.928C30.5364 34.928 30.6052 34.928 30.6754 34.928C32.8596 34.928 34.654 33.2918 34.9053 31.1752L34.9356 16.9955C34.6872 7.56697 26.9662 0 17.4777 0C7.83263 0 0.0137329 7.8189 0.0137329 17.464C0.0137329 27.0059 7.66618 34.7631 17.1687 34.928H30.4661Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5239 5.948C12.0268 5.948 7.42967 9.80117 6.286 14.954C7.38092 15.2609 8.18385 16.2664 8.18385 17.4593C8.18385 18.6523 7.38092 19.6577 6.286 19.9647C7.42966 25.1175 12.0268 28.9706 17.5239 28.9706C19.525 28.9706 21.4068 28.4601 23.0462 27.562V28.8927H29.0352V17.9365C29.0407 17.7908 29.0352 17.6063 29.0352 17.4593C29.0352 11.1018 23.8814 5.948 17.5239 5.948ZM12.0098 17.4593C12.0098 14.414 14.4786 11.9452 17.5239 11.9452C20.5693 11.9452 23.038 14.414 23.038 17.4593C23.038 20.5047 20.5693 22.9734 17.5239 22.9734C14.4786 22.9734 12.0098 20.5047 12.0098 17.4593Z" fill="#8B44AC"/>
<path d="M7.36841 17.4517C7.36841 18.4691 6.54368 19.2938 5.52631 19.2938C4.50894 19.2938 3.6842 18.4691 3.6842 17.4517C3.6842 16.4343 4.50894 15.6096 5.52631 15.6096C6.54368 15.6096 7.36841 16.4343 7.36841 17.4517Z" fill="#8B44AC"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Просмотреть файл

@ -1,79 +0,0 @@
html, body {
font-family: "Nunito", sans-serif;
margin: 0;
height: 100vh;
overflow: hidden;
}
a {
text-decoration: none;
color: white;
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
.canvas-container {
opacity:1;
position:fixed;
width:100%;
height:100%;
top:0px;
left:0px;
z-index:500;
}
canvas
{
opacity:1;
position:fixed;
width:100%;
height:100%;
top:0px;
left:0px;
z-index:500;
}
#app, .page {
height: 100%;
background: #171C2C;
color: white;
}
.navbar-brand {
font-size: 22px;
}
.overlay{
opacity:0.0;
position:fixed;
width:100vw;
height:100vh;
top:0px;
left:0px;
z-index:1000;
}
#splash {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
min-height: 100vh;
}

Двоичные данные
VectorPaint.Web/wwwroot/favicon.ico

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 172 KiB

Просмотреть файл

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>VectorPaint</title>
<base href="/" />
<link href="css/app.css" rel="stylesheet" />
</head>
<body>
<div id="app">
<div id="splash">
<h2>Powered by</h2>
<a class="navbar-brand" href="https://www.avaloniaui.net/" target="_blank">
<img src="Logo.svg" alt="Avalonia Logo" width="30" height="24" class="d-inline-block align-text-top">
Avalonia
</a>
</div>
</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="js/app.js"></script>
<script src="_framework/blazor.webassembly.js"></script>
</body>
</html>

Просмотреть файл

Просмотреть файл

@ -1,10 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectorPaint.NetCore", "VectorPaint.NetCore\VectorPaint.NetCore.csproj", "{BAE0B0DC-A0B7-4DEB-987B-F5E2686F6ACD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectorPaint.Web", "VectorPaint.Web\VectorPaint.Web.csproj", "{FB12FAE9-D023-438B-95FE-03B96EE857BA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectorPaint.Base", "VectorPaint.Base\VectorPaint.Base.csproj", "{E93F9B08-9309-4BBE-884C-A0D787D5A422}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectorPaint", "VectorPaint\VectorPaint.csproj", "{E93F9B08-9309-4BBE-884C-A0D787D5A422}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -12,14 +8,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BAE0B0DC-A0B7-4DEB-987B-F5E2686F6ACD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAE0B0DC-A0B7-4DEB-987B-F5E2686F6ACD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAE0B0DC-A0B7-4DEB-987B-F5E2686F6ACD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAE0B0DC-A0B7-4DEB-987B-F5E2686F6ACD}.Release|Any CPU.Build.0 = Release|Any CPU
{FB12FAE9-D023-438B-95FE-03B96EE857BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FB12FAE9-D023-438B-95FE-03B96EE857BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FB12FAE9-D023-438B-95FE-03B96EE857BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB12FAE9-D023-438B-95FE-03B96EE857BA}.Release|Any CPU.Build.0 = Release|Any CPU
{E93F9B08-9309-4BBE-884C-A0D787D5A422}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E93F9B08-9309-4BBE-884C-A0D787D5A422}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E93F9B08-9309-4BBE-884C-A0D787D5A422}.Release|Any CPU.ActiveCfg = Release|Any CPU

Просмотреть файл

@ -1,12 +1,12 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:VectorPaint.Controls"
xmlns:vectorPaint="clr-namespace:VectorPaint"
x:Class="VectorPaint.App">
x:Class="VectorPaint.App"
RequestedThemeVariant="Light">
<Application.DataTemplates>
<vectorPaint:ViewLocator />
</Application.DataTemplates>
<Application.Styles>
<FluentTheme Mode="Light" />
<FluentTheme />
</Application.Styles>
</Application>

Просмотреть файл

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 172 KiB

После

Ширина:  |  Высота:  |  Размер: 172 KiB

Просмотреть файл

@ -2,7 +2,7 @@
using Avalonia;
using Avalonia.ReactiveUI;
namespace VectorPaint.NetCore
namespace VectorPaint
{
class Program
{

Просмотреть файл

@ -1,18 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>netstandard2.0</TargetFramework>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>False</IsPackable>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<Configurations>Debug;Release</Configurations>
<Platforms>AnyCPU;x64</Platforms>
<RootNamespace>VectorPaint</RootNamespace>
</PropertyGroup>
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.0-preview1" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.0-preview1" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview1" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0-preview1" />
<PackageReference Include="Avalonia" Version="11.0.6" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.6" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.6" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.6" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.6" />
</ItemGroup>
</Project>

Просмотреть файл

@ -7,7 +7,7 @@ namespace VectorPaint;
public class ViewLocator : IDataTemplate
{
public IControl Build(object? data)
public Control Build(object? data)
{
var name = data?.GetType().FullName?.Replace("ViewModel", "View");
var type = name is null ? null : Type.GetType(name);

Просмотреть файл

@ -36,7 +36,7 @@ public class EllipseDrawable : GeometryDrawable
{
if (_topLeft is null || _bottomRight is null)
{
return Rect.Empty;
return default;
}
return new Rect(

Просмотреть файл

@ -36,7 +36,7 @@ public class RectangleDrawable : GeometryDrawable
{
if (_topLeft is null || _bottomRight is null)
{
return Rect.Empty;
return default;
}
return new Rect(

Просмотреть файл

@ -30,9 +30,9 @@ public class Drawing : ReactiveObject, IDrawing
set => this.RaiseAndSetIfChanged(ref _overlayDrawables, value);
}
public IVisual? Canvas { get; set; }
public Visual? Canvas { get; set; }
public IInputElement? Input { get; set; }
public InputElement? Input { get; set; }
public Drawable? HitTest(Point point)
{

Просмотреть файл

@ -18,6 +18,6 @@ public interface IDrawing
IEnumerable<Drawable> HitTest(Rect rect);
void Draw(DrawingContext context, Rect bounds);
void Invalidate();
IVisual? Canvas { get; set; }
IInputElement? Input { get; set; }
Visual? Canvas { get; set; }
InputElement? Input { get; set; }
}

Просмотреть файл

@ -2,7 +2,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:c="clr-namespace:VectorPaint.Controls;assembly=VectorPaint.Base"
xmlns:c="clr-namespace:VectorPaint.Controls;assembly=VectorPaint"
xmlns:vm="clr-namespace:VectorPaint.ViewModels"
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="450"
x:CompileBindings="True" x:DataType="vm:MainWindowViewModel"

Просмотреть файл

@ -6,7 +6,7 @@ using VectorPaint.ViewModels;
namespace VectorPaint.Views;
public class MainView : UserControl
public partial class MainView : UserControl
{
public MainView()
{

Просмотреть файл

@ -12,7 +12,6 @@ public partial class MainWindow : Window
#if DEBUG
this.AttachDevTools();
#endif
Renderer.DrawFps = false;
}
private void InitializeComponent()