Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
caba8e8
feat: implement animatable property system with validation support
yuto-trd Oct 1, 2025
f9b5553
feat: add validation support to keyframe animations and mark properti…
yuto-trd Oct 1, 2025
ee2cc72
feat: enhance GraphicsContext2D to support clock-based property retri…
yuto-trd Oct 1, 2025
449664e
feat: implement EngineObject class with property scanning and registr…
yuto-trd Oct 1, 2025
70809fb
feat: refactor AnimatableProperty and SimpleProperty constructors to …
yuto-trd Oct 4, 2025
90f0771
feat: enhance EngineObject with property registration and rendering i…
yuto-trd Oct 4, 2025
03e4011
feat: mark AudioStartTime and AudioDurationTime properties as obsolete
yuto-trd Oct 4, 2025
08381b3
feat: add RenderContext class for clock-based property retrieval
yuto-trd Oct 4, 2025
883c091
feat: migrate filter effects to use animatable properties
yuto-trd Oct 4, 2025
77343c2
feat: refactor FilterEffect and FilterEffectRenderNode for improved s…
yuto-trd Oct 4, 2025
5ec134d
feat: refactor Drawable class to inherit from EngineObject and update…
yuto-trd Oct 4, 2025
ac6c52f
feat: update GraphicsContext2D and RenderLayer to support clock-based…
yuto-trd Oct 4, 2025
09a9770
feat: update drawable rendering to support clock-based animation
yuto-trd Oct 4, 2025
d5774a6
delete: Renderable class
yuto-trd Oct 4, 2025
ff49e93
feat: refactor Brush and related classes to inherit from EngineObject…
yuto-trd Oct 4, 2025
39877b8
feat: remove unused method from IAnimation interface
yuto-trd Oct 4, 2025
5b298f2
delete: OpacityMaskRenderNode.cs
yuto-trd Oct 4, 2025
8e39fa2
feat: add RenderContext and EngineObject classes for improved propert…
yuto-trd Oct 4, 2025
177d9b1
feat: add Resource management and update methods in EngineObject for …
yuto-trd Oct 4, 2025
7485d81
feat: make FilterEffect classes partial for improved extensibility
yuto-trd Oct 5, 2025
58aa682
feat: refactor Resource handling in EngineObject for improved type sa…
yuto-trd Oct 8, 2025
9831f68
feat: add SourceGenerators project reference for improved analysis ca…
yuto-trd Oct 8, 2025
6e32839
feat: implement Resource handling in EngineObject for improved render…
yuto-trd Oct 8, 2025
f8668d9
feat: refactor brush classes to use property wrappers for improved da…
yuto-trd Oct 8, 2025
8f6a7bb
feat: refactor transformation classes to use property wrappers for im…
yuto-trd Oct 8, 2025
58eb6d7
refactor(engine): overhaul core property infrastructure
yuto-trd Oct 20, 2025
1f01603
refactor(engine): migrate audio, graphics, and media to new property API
yuto-trd Oct 20, 2025
4bbf761
refactor(project): align operators and project system with new proper…
yuto-trd Oct 20, 2025
8724717
feat(property): add owner management to animatable and simple properties
yuto-trd Oct 20, 2025
9aa8af4
feat(property): implement IListProperty and ListProperty for enhanced…
yuto-trd Oct 20, 2025
645d313
feat(engine): simplify property registration and enhance ownership ma…
yuto-trd Oct 20, 2025
3687fc0
feat(property): migrate children properties to IListProperty for impr…
yuto-trd Oct 20, 2025
4251df3
feat(math): replace ToRadians and ToDegrees with Deg2Rad and Rad2Deg …
yuto-trd Oct 20, 2025
1a55765
feat(segment): implement GetEndPoint method for various segment classes
yuto-trd Oct 21, 2025
d26cb5b
feat(transform): update TransformGroup to use IListProperty for child…
yuto-trd Oct 21, 2025
fdcd0ab
delete: deleted the IClock class and switched to using TimeSpan direc…
yuto-trd Oct 21, 2025
3ade62f
add: Add attribute retrieval to property adapters
yuto-trd Oct 21, 2025
93b307d
feat(render): change Time property to be settable
yuto-trd Oct 22, 2025
0573632
exclude: Exclude NodeTree references and related code
yuto-trd Oct 22, 2025
d277fbb
feat(converter): enhance brush conversion with time-based observables
yuto-trd Oct 22, 2025
5b241b9
feat(properties): enhance PropertiesEditorViewModel to support Engine…
yuto-trd Oct 22, 2025
1aa6936
feat(editor): add reactive CurrentTime property to BaseEditorViewModel
yuto-trd Oct 22, 2025
190d64a
feat(editor): simplify attribute retrieval for property editors
yuto-trd Oct 22, 2025
eeb483e
feat(commands): add RecordableCommandsHelper for editing properties
yuto-trd Oct 22, 2025
7e02076
feat(path-editor): refactor properties to use IProperty for better ty…
yuto-trd Oct 22, 2025
ed67dbc
feat(drag-drop): update FilterEffect and Transform properties to use …
yuto-trd Oct 22, 2025
898cc8d
feat(editor): refactor properties to use concrete types for better ty…
yuto-trd Oct 22, 2025
273286a
feat(pen): update properties to use animatable types for improved ani…
yuto-trd Oct 22, 2025
fed9f6c
feat(drawable): add constructor to scan properties for Drawable and S…
yuto-trd Oct 22, 2025
eb47e8a
feat(engine): implement IsTimeAnchor property and optimize update logic
yuto-trd Oct 22, 2025
a3f26ea
feat(serialization): add serialization and deserialization methods fo…
yuto-trd Oct 22, 2025
1e3480e
feat(engine): refactor CompareAndUpdate methods for improved readability
yuto-trd Oct 22, 2025
bbb70af
feat(rendering): update render node properties to use resource types …
yuto-trd Oct 22, 2025
323ad0f
feat(AvaloniaTypeConverter): simplify AdaptEngineObject method and up…
yuto-trd Oct 23, 2025
cc513f5
feat: Introduce INotifyEdited interface and refactor related classes
yuto-trd Oct 23, 2025
2bd8646
feat(rendering): refactor RenderNodeCache and RenderLayer for improve…
yuto-trd Oct 24, 2025
a4e08a4
feat: refactor ListProperty deserialization logic for improved clarit…
yuto-trd Oct 24, 2025
5e89abf
feat(PublishOperator): add deserialization handling and prevent defau…
yuto-trd Oct 24, 2025
b6b9d93
feat(GraphicsContext2D): implement PushOpacityMask method and add Opa…
yuto-trd Oct 24, 2025
635cfaa
feat(GroupOperator, PublishOperator): refactor property handling and …
yuto-trd Oct 24, 2025
2284611
feat(rendering): update rendering logic to use resource's IsEnabled p…
yuto-trd Oct 24, 2025
92d3855
feat: refactor DrawableDecorator and DrawableGroup to improve child h…
yuto-trd Oct 25, 2025
5232212
feat: remove obsolete references to DrawableDecorator and DecorateOpe…
yuto-trd Oct 25, 2025
ceea2f9
feat(tests): remove obsolete CaptureChildren tests from RenderNodeCac…
yuto-trd Oct 25, 2025
68223c6
feat: enhance resource management and disposal logic across shape cla…
yuto-trd Oct 27, 2025
c345817
feat: simplify resource comparison logic in render node updates
yuto-trd Oct 27, 2025
d142ee2
feat: add null and disposed checks for resources in drawing methods
yuto-trd Oct 27, 2025
52fbefe
feat: add resource disposal logic in RenderLayer to prevent memory leaks
yuto-trd Oct 27, 2025
fecf66b
feat: improve resource disposal in TextBlock and PlayerViewModel to p…
yuto-trd Oct 27, 2025
22b2c52
feat: add subscription to CurrentTime in BaseEditorViewModel for impr…
yuto-trd Oct 27, 2025
ebe62b3
feat: remove unnecessary null checks in AvaloniaTypeConverter and Pat…
yuto-trd Oct 27, 2025
5e7d974
feat: remove commented-out Get methods in GraphicsContext2D for impro…
yuto-trd Oct 27, 2025
f4c3177
feat: implement memory management and custom render nodes in graphics…
yuto-trd Oct 27, 2025
75ab96c
feat: add LayerEffect filter and integrate into LibraryRegistrar
yuto-trd Oct 27, 2025
ba8b36a
feat: remove unused PushBoundaryTransform and PushSplittedTransform m…
yuto-trd Oct 27, 2025
4f121ac
feat: update property accessors for Version and IsEnabled in EngineOb…
yuto-trd Oct 31, 2025
33a8e87
feat: NodeTreeのコメントアウトを解除
yuto-trd Oct 31, 2025
cb3503b
feat: InvalidatedイベントをEditedイベントに変更し、ノードの編集通知を統一
yuto-trd Oct 31, 2025
c19f9ea
feat: JsonSerializationContextにGetValueメソッドを追加し、NodePropertyAdapterをC…
yuto-trd Oct 31, 2025
ee3cf62
feat: 値型を出力するノードでCorePropertyを使わないように変更
yuto-trd Oct 31, 2025
73dc164
remove: ITransformを出力するノードを削除
yuto-trd Oct 31, 2025
71dc219
feat: RelativePointNodeでCorePropertyを使わないように変更
yuto-trd Oct 31, 2025
ea5dea0
feat: GeometryNodeを追加し、EllipseGeometryNode、RectGeometryNode、RoundedRe…
yuto-trd Oct 31, 2025
b9ddde7
feat: BrushNodeおよびそのサブクラスでのリソース型の使用を改善し、Opacity、Transform、TransformOr…
yuto-trd Oct 31, 2025
86850b0
feat: ConfigureNodeおよびFilterEffectNodeのリファクタリングとTransformNodeの追加
yuto-trd Oct 31, 2025
ca08713
feat: GeometryShapeNodeのGeometryRenderNodeへの移行
yuto-trd Oct 31, 2025
020c1a8
feat: SwitchNodeからCorePropertyを削除し、InputSocketの初期化を修正
yuto-trd Oct 31, 2025
ad42f2d
feat: MeasureNodeのInputSocketをDrawableからRenderNodeに変更
yuto-trd Oct 31, 2025
dbf5054
feat: CorePropertyをAssociatedPropertyNameとAssociatedPropertyTypeに置き換え…
yuto-trd Oct 31, 2025
17065dc
feat: LayerOutputNodeの機能をOutputNodeに統合し,OutputNodeをDrawableからRenderNo…
yuto-trd Oct 31, 2025
f1f1bcc
feat: NodeItemViewModelでNodeDisplayNameHelperを使用せず、直接Nameプロパティを取得するように変更
yuto-trd Oct 31, 2025
3889c67
feat: LayerOutputNodeをOutputNodeに変更し、Transformノードの登録を追加
yuto-trd Oct 31, 2025
05f5cef
feat: NodeTreeタブとNodeTree入力タブの拡張のコメントを解除
yuto-trd Nov 1, 2025
5b9ad10
feat: JsonSerializationTestでNodeTreeのシリアライズテストのコメントを解除
yuto-trd Nov 1, 2025
44cfae1
feat: CreateInputメソッドでNodePropertyAdapterを使用してDefaultInputSocketを設定
yuto-trd Nov 1, 2025
083a182
feat: PropertyEntrySerializerのToJsonメソッドにvalueTypeパラメータを追加し、NodePrope…
yuto-trd Nov 1, 2025
bddaf0e
feat: TransformParserに空文字列のUnit.Noneマッピングを追加し、パース処理での余分な空白をトリム
yuto-trd Nov 1, 2025
962a512
feat: BreadcrumbBarのアイテムテンプレートを更新し、NodeTreeNavigationItemの表示を改善
yuto-trd Nov 1, 2025
69a9e1c
fix: EngineObjectでフィールドを解放する処理を追加
yuto-trd Nov 1, 2025
ceb7d61
refactor: AddAndPushメソッドの引数を簡素化し、テストを更新
yuto-trd Nov 1, 2025
ff9fb0e
feat: IPropertyにCurrentValueプロパティを追加し、ObjectSearcherでのプロパティ検索を強化
yuto-trd Nov 8, 2025
a893428
feat: Add validation support to properties with custom validators
yuto-trd Nov 9, 2025
9c9c31f
fix: prevented Brushes.Resource from being disposed.
yuto-trd Nov 11, 2025
5a23f8a
feat: Remove deprecated Border filter effect from LibraryRegistrar
yuto-trd Nov 11, 2025
5c1314f
fix: Use ValueType instead of PropertyType in Remove and Move methods
yuto-trd Nov 25, 2025
9b5012c
fix: Update adapter type in EncoderSettingsViewModel to use CorePrope…
yuto-trd Nov 25, 2025
4168f81
feat: Enhance validation support by introducing ValidationContext in …
yuto-trd Nov 29, 2025
aaa6ed0
fix: Fix DrawSKPath in TextBlockTests
yuto-trd Nov 29, 2025
94014b4
refactor: Remove obsolete TODO comments in EngineObject and LutEffect
yuto-trd Nov 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
260 changes: 260 additions & 0 deletions Beutl.sln

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="8.3.0.1" />
<PackageVersion Include="ILGPU" Version="1.5.2" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.12.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.3" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="9.0.3" />
Expand Down
2 changes: 1 addition & 1 deletion src/Beutl.Api/Beutl.Api.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<PackageReference Include="System.Reactive" />
<PackageReference Include="System.Interactive" />
<PackageReference Include="System.Interactive.Async" />

<PackageReference Include="NuGet.ProjectModel" />
<PackageReference Include="NuGet.Protocol" />
<PackageReference Include="NuGet.Resolver" />
Expand Down
75 changes: 0 additions & 75 deletions src/Beutl.Controls/AvaloniaTypeConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,79 +99,4 @@ public static RelativePoint ToAvaRelativePoint(this in Graphics.RelativePoint pt
? RelativeUnit.Relative
: RelativeUnit.Absolute);
}

public static Avalonia.Media.IBrush ToAvaBrush(this Media.IBrush brush)
{
switch (brush)
{
case Media.ISolidColorBrush s:
return new Avalonia.Media.SolidColorBrush
{
Color = s.Color.ToAvaColor(),
Opacity = s.Opacity
};
case Media.IGradientBrush g:
{
var sp = g.SpreadMethod switch
{
Media.GradientSpreadMethod.Pad => Avalonia.Media.GradientSpreadMethod.Pad,
Media.GradientSpreadMethod.Reflect => Avalonia.Media.GradientSpreadMethod.Reflect,
Media.GradientSpreadMethod.Repeat => Avalonia.Media.GradientSpreadMethod.Repeat,
_ => throw new ArgumentOutOfRangeException(nameof(brush)),
};
var stops = new Avalonia.Media.GradientStops();
stops.AddRange(g.GradientStops.Select(v => new Avalonia.Media.GradientStop(v.Color.ToAvaColor(), v.Offset)));

switch (g)
{
case Media.ILinearGradientBrush l:
{
var st = l.StartPoint;
var ed = l.EndPoint;
return new Avalonia.Media.LinearGradientBrush
{
StartPoint = st.ToAvaRelativePoint(),
EndPoint = ed.ToAvaRelativePoint(),
GradientStops = stops,
Opacity = l.Opacity,
SpreadMethod = sp
};
}

case Media.IConicGradientBrush c:
{
var center = c.Center;
return new Avalonia.Media.ConicGradientBrush
{
Center = center.ToAvaRelativePoint(),
Angle = c.Angle,
GradientStops = stops,
Opacity = c.Opacity,
SpreadMethod = sp
};
}

case Media.IRadialGradientBrush r:
{
var center = r.Center;
var origin = r.GradientOrigin;
return new Avalonia.Media.RadialGradientBrush
{
Center = center.ToAvaRelativePoint(),
GradientOrigin = origin.ToAvaRelativePoint(),
RadiusX = new RelativeScalar(r.Radius, RelativeUnit.Relative),
RadiusY = new RelativeScalar(r.Radius, RelativeUnit.Relative),
GradientStops = stops,
Opacity = r.Opacity,
SpreadMethod = sp
};

}
}
}
break;
}

return null;
}
}
6 changes: 3 additions & 3 deletions src/Beutl.Controls/PropertyEditors/BrushEditorFlyout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public sealed class BrushEditorFlyout : PickerFlyoutBase
public static readonly StyledProperty<Brush?> BrushProperty =
AvaloniaProperty.Register<BrushEditorFlyout, Brush?>(nameof(Brush));

public static readonly StyledProperty<Media.IBrush?> OriginalBrushProperty =
AvaloniaProperty.Register<BrushEditorFlyout, Media.IBrush?>(nameof(OriginalBrush));
public static readonly StyledProperty<Media.Brush?> OriginalBrushProperty =
AvaloniaProperty.Register<BrushEditorFlyout, Media.Brush?>(nameof(OriginalBrush));

public static readonly StyledProperty<string?> DrawableNameProperty =
AvaloniaProperty.Register<BrushEditorFlyout, string?>(nameof(DrawableName));
Expand All @@ -46,7 +46,7 @@ public Brush? Brush
set => SetValue(BrushProperty, value);
}

public Media.IBrush? OriginalBrush
public Media.Brush? OriginalBrush
{
get => GetValue(OriginalBrushProperty);
set => SetValue(OriginalBrushProperty, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public class BrushEditorFlyoutPresenter : DraggablePickerFlyoutPresenter
public static readonly StyledProperty<Brush?> BrushProperty =
AvaloniaProperty.Register<BrushEditorFlyoutPresenter, Brush?>(nameof(Brush));

public static readonly StyledProperty<Media.IBrush?> OriginalBrushProperty =
AvaloniaProperty.Register<BrushEditorFlyoutPresenter, Media.IBrush?>(nameof(OriginalBrush));
public static readonly StyledProperty<Media.Brush?> OriginalBrushProperty =
AvaloniaProperty.Register<BrushEditorFlyoutPresenter, Media.Brush?>(nameof(OriginalBrush));

public static readonly StyledProperty<string?> DrawableNameProperty =
AvaloniaProperty.Register<BrushEditorFlyoutPresenter, string?>(nameof(DrawableName));
Expand Down Expand Up @@ -72,7 +72,7 @@ public Brush? Brush
set => SetValue(BrushProperty, value);
}

public Media.IBrush? OriginalBrush
public Media.Brush? OriginalBrush
{
get => GetValue(OriginalBrushProperty);
set => SetValue(OriginalBrushProperty, value);
Expand Down
2 changes: 2 additions & 0 deletions src/Beutl.Core/Collections/CoreList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ public CoreList(params T[] items)

bool IList.IsFixedSize => false;

bool ICoreList<T>.IsReadOnly => false;

bool IList.IsReadOnly => false;

int ICollection.Count => Inner.Count;
Expand Down
4 changes: 4 additions & 0 deletions src/Beutl.Core/Collections/ICoreList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public interface ICoreList : IList

public interface ICoreList<T> : IObservableList<T>, ICoreReadOnlyList<T>, ICoreList
{
new bool IsReadOnly { get; }

new int Count { get; }

new T this[int index] { get; set; }
Expand Down Expand Up @@ -47,4 +49,6 @@ public interface ICoreList<T> : IObservableList<T>, ICoreReadOnlyList<T>, ICoreL
new void RemoveAt(int index);

new void Clear();

void EnsureCapacity(int capacity);
}
10 changes: 9 additions & 1 deletion src/Beutl.Core/CorePropertyMetadata`1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public JsonSerializerOptions GetSerializerOptions()
return _serializerOptions;
}

private static IValidator<T> ConvertValidator(ValidationAttribute att)
internal static IValidator<T> ConvertValidator(ValidationAttribute att)
{
switch (att)
{
Expand Down Expand Up @@ -81,6 +81,14 @@ private static IValidator<T> ConvertValidator(ValidationAttribute att)

goto default;

case DataTypeAttribute dataTypeAttribute:
if (dataTypeAttribute.DataType == DataType.MultilineText)
{
// MultilineTextの場合はバリデーションを行わない
return new DataAnnotationValidater<T>(null);
}
goto default;

default:
return new DataAnnotationValidater<T>(att);
}
Expand Down
6 changes: 6 additions & 0 deletions src/Beutl.Core/INotifyEdited.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Beutl;

public interface INotifyEdited
{
event EventHandler? Edited;
}
1 change: 1 addition & 0 deletions src/Beutl.Core/OptionalJsonConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public override bool CanConvert(Type typeToConvert)
return typeToConvert.IsAssignableTo(typeof(IOptional));
}

// TODO: JsonArrayに対応させる
public override IOptional? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var jsonNode = JsonNode.Parse(ref reader);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,25 @@ private static void DeserializeArray(
return default;
}
}

public object? GetValue(string name, Type type)
{
// TにはOptional型が入る場合があるので、Jsonプロパティがnullの場合と存在しない場合で分ける
if (_json.TryGetPropertyValue(name, out JsonNode? node))
{
if (node == null)
{
return null;
}
else
{
return Deserialize(node, type, name, ErrorNotifier, this);
}
}
else
{
// 存在しない場合
return default;
}
}
}
41 changes: 41 additions & 0 deletions src/Beutl.Core/Serialization/JsonSerializationContext.Serialize.cs
Original file line number Diff line number Diff line change
Expand Up @@ -144,4 +144,45 @@ public void SetValue<T>(string name, T? value)
_knownTypes[name] = (typeof(T), actualType);
}
}

public void SetValue(string name, object? value, Type type)
{
if (value is Unit)
{
_json.Remove(name);
_knownTypes.Remove(name);
}
else if (value == null)
{
_json[name] = null;
_knownTypes.Remove(name);
}
else
{
Type actualType = value.GetType();
if (value is ICoreSerializable or IEnumerable or IReference)
{
_json[name] = Serialize(name, value, actualType, type, ErrorNotifier, this);
}
else if (value is JsonNode jsonNode)
{
_json[name] = jsonNode;
}
else
{
ISerializationErrorNotifier? captured = LocalSerializationErrorNotifier.Current;
try
{
LocalSerializationErrorNotifier.Current = new RelaySerializationErrorNotifier(ErrorNotifier, name);
_json[name] = JsonSerializer.SerializeToNode(value, type, JsonHelper.SerializerOptions);
}
finally
{
LocalSerializationErrorNotifier.Current = captured;
}
}

_knownTypes[name] = (type, actualType);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<IsPackable>false</IsPackable>
<IncludeBuildOutput>false</IncludeBuildOutput>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<RootNamespace>Beutl.Engine.SourceGenerators</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" PrivateAssets="all" />
</ItemGroup>
</Project>
Loading
Loading