diff --git a/ChromaSDK/ChromaSDK.csproj b/ChromaSDK/ChromaSDK.csproj
index 99c21c0..1a1da3a 100644
--- a/ChromaSDK/ChromaSDK.csproj
+++ b/ChromaSDK/ChromaSDK.csproj
@@ -3,8 +3,6 @@
net7.0
x64;ARM64
- enable
- embedded
diff --git a/FMODCoreAPI/FMODCoreAPI.csproj b/FMODCoreAPI/FMODCoreAPI.csproj
index b9ebb9c..2ff45cf 100644
--- a/FMODCoreAPI/FMODCoreAPI.csproj
+++ b/FMODCoreAPI/FMODCoreAPI.csproj
@@ -3,8 +3,6 @@
net7.0
x64;ARM64
- enable
- embedded
diff --git a/Igniter/Igniter.csproj b/Igniter/Igniter.csproj
index 9fe26ca..ad0fc72 100644
--- a/Igniter/Igniter.csproj
+++ b/Igniter/Igniter.csproj
@@ -162,7 +162,7 @@
1.16.0
- 7.0.3
+ 8.0.0
diff --git a/LedCSharp/LedCSharp.csproj b/LedCSharp/LedCSharp.csproj
index 9f5f7c5..668d5d4 100644
--- a/LedCSharp/LedCSharp.csproj
+++ b/LedCSharp/LedCSharp.csproj
@@ -3,8 +3,6 @@
net7.0
x64;ARM64
- enable
- embedded
diff --git a/Protobuf/Protobuf.csproj b/Protobuf/Protobuf.csproj
index e21e4ed..c576f78 100644
--- a/Protobuf/Protobuf.csproj
+++ b/Protobuf/Protobuf.csproj
@@ -2,11 +2,9 @@
net7.0
x64;ARM64
- enable
- embedded
-
+
diff --git a/Protobuf/protoc.exe b/Protobuf/protoc.exe
index 7ebb219..36ff0b8 100644
--- a/Protobuf/protoc.exe
+++ b/Protobuf/protoc.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:940790b62b3c5c1fa783926e0eb2323b7ca20ed4910abe2a0ee136e0a9619606
-size 11554537
+oid sha256:c3739364aba9b9a89bbbc6133d4d6f27b9e1f9ce0082c76d76433c0d339cc1ee
+size 11554025
diff --git a/Qwilight/Assets/UI/@Default/@Default.zip b/Qwilight/Assets/UI/@Default/@Default.zip
index e45c149..9260209 100644
--- a/Qwilight/Assets/UI/@Default/@Default.zip
+++ b/Qwilight/Assets/UI/@Default/@Default.zip
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:149fdba0507308f257b4df1dff43c3e0f521cc238ea87b1e91e2eabfef6edcbb
-size 68724102
+oid sha256:c111de2bff6a429bb1d0fb4e120d1f1956f5af5cd7e79a10f4e4e13b57659e28
+size 54871318
diff --git a/Qwilight/Compiler/BMSCompiler.cs b/Qwilight/Compiler/BMSCompiler.cs
index f958b7b..7e45e94 100644
--- a/Qwilight/Compiler/BMSCompiler.cs
+++ b/Qwilight/Compiler/BMSCompiler.cs
@@ -789,7 +789,7 @@
},
Utility.AvailableFlag.Media => MediaSystem.Instance.Load(Utility.GetFiles(Path.GetDirectoryName(mediaFilePath), $"{Path.GetFileNameWithoutExtension(mediaFilePath)}.*")
.Where(targetFile => targetFile.IsTailCaselsss(".mp4"))
- .FirstOrDefault() ?? mediaFilePath, defaultComputer),
+ .FirstOrDefault() ?? mediaFilePath, defaultComputer, false),
_ => null as IHandledItem,
};
}
diff --git a/Qwilight/Compiler/BMSONCompiler.cs b/Qwilight/Compiler/BMSONCompiler.cs
index b03638e..f09de3e 100644
--- a/Qwilight/Compiler/BMSONCompiler.cs
+++ b/Qwilight/Compiler/BMSONCompiler.cs
@@ -560,7 +560,7 @@
Drawing = DrawingSystem.Instance.Load(mediaFilePath, defaultComputer),
DefaultDrawing = DrawingSystem.Instance.LoadDefault(mediaFilePath, defaultComputer)
},
- Utility.AvailableFlag.Media => MediaSystem.Instance.Load(mediaFilePath, defaultComputer),
+ Utility.AvailableFlag.Media => MediaSystem.Instance.Load(mediaFilePath, defaultComputer, false),
_ => null,
};
}
diff --git a/Qwilight/Compiler/BaseCompiler.cs b/Qwilight/Compiler/BaseCompiler.cs
index ac84f2e..b267f3c 100644
--- a/Qwilight/Compiler/BaseCompiler.cs
+++ b/Qwilight/Compiler/BaseCompiler.cs
@@ -239,7 +239,6 @@
defaultComputer.WaitMediaNoteMap.Into(0.0, new()
{
MediaMode = MediaNote.Mode.Default,
- IsLooping = true,
MediaItem = defaultComputer.LoopingBanalMedia,
HasContents = true
});
@@ -249,7 +248,6 @@
defaultComputer.WaitMediaNoteMap.Into(0.0, new()
{
MediaMode = MediaNote.Mode.Failed,
- IsLooping = true,
MediaItem = defaultComputer.LoopingBanalFailedMedia,
HasContents = true
});
@@ -737,7 +735,6 @@
var mediaNoteModified = new MediaNote
{
MediaMode = mediaNote.MediaMode,
- IsLooping = mediaNote.IsLooping,
MediaItem = mediaItem,
HasContents = mediaNote.HasContents,
MediaLevyingPosition = mediaNote.MediaLevyingPosition,
diff --git a/Qwilight/Compute/DefaultCompute.cs b/Qwilight/Compute/DefaultCompute.cs
index cc6c242..c0fbb84 100644
--- a/Qwilight/Compute/DefaultCompute.cs
+++ b/Qwilight/Compute/DefaultCompute.cs
@@ -607,7 +607,7 @@
switch (handler)
{
case DrawingHandlerItem drawingHandlerItem:
- HandleDrawing(ref r, drawingHandlerItem.DrawingComputingValue);
+ HandleDrawing(ref r, drawingHandlerItem.HandledDrawingItem);
break;
case MediaHandlerItem mediaHandlerItem:
var defaultMedia = mediaHandlerItem.HandledMediaItem.DefaultMedia;
@@ -673,7 +673,7 @@
switch (handler)
{
case DrawingHandlerItem drawingHandlerItem:
- HandleDrawing(ref r, drawingHandlerItem.DrawingComputingValue);
+ HandleDrawing(ref r, drawingHandlerItem.HandledDrawingItem);
break;
case MediaHandlerItem mediaHandlerItem:
var mediaFrame = mediaHandlerItem.MediaFrame;
@@ -934,7 +934,7 @@
}
}
- public void HandleComputer() => Task.Run(() =>
+ public void HandleComputer()
{
lock (_targetHandlerCSX)
{
@@ -947,7 +947,7 @@
_targetHandler = Utility.HandleParallelly(HandleNotes);
}
SendSituation();
- });
+ }
public object LoadedCSX { get; } = new();
@@ -959,42 +959,39 @@
SetStop = true;
SendNotCompiled();
TrailerAudioHandler.Stop();
- Task.Run(() =>
+ if (_targetCompiler != null)
{
- if (_targetCompiler != null)
+ lock (_targetCompiler)
{
- lock (_targetCompiler)
+ if (_targetCompilerStatus == CompilerStatus.Compiling)
{
- if (_targetCompilerStatus == CompilerStatus.Compiling)
- {
- _setCancelCompiler.Cancel();
- _setCancelCompiler.Dispose();
- MediaModifierValue.StopModifyMedia();
- _targetCompilerHandler.Join();
- _targetCompilerStatus = CompilerStatus.Close;
- }
+ _setCancelCompiler.Cancel();
+ _setCancelCompiler.Dispose();
+ MediaModifierValue.StopModifyMedia();
+ _targetCompilerHandler.Join();
+ _targetCompilerStatus = CompilerStatus.Close;
}
}
- lock (_targetHandlerCSX)
+ }
+ lock (_targetHandlerCSX)
+ {
+ if (IsHandling)
{
- if (IsHandling)
- {
- _targetHandler.Join();
- }
+ _targetHandler.Join();
}
- lock (LoadedCSX)
+ }
+ lock (LoadedCSX)
+ {
+ if (HasContents)
{
- if (HasContents)
- {
- AudioSystem.Instance.Stop(this);
- AudioSystem.Instance.Close(this, this);
- MediaSystem.Instance.Stop(this);
- MediaSystem.Instance.Close(this, this);
- DrawingSystem.Instance.Close(this);
- HasContents = false;
- }
+ AudioSystem.Instance.Stop(this);
+ AudioSystem.Instance.Close(this, this);
+ MediaSystem.Instance.Stop(this);
+ MediaSystem.Instance.Close(this, this);
+ DrawingSystem.Instance.Close(this);
+ HasContents = false;
}
- });
+ }
}
public void LowerMultiplier()
@@ -1578,7 +1575,7 @@
};
break;
case Utility.AvailableFlag.Media:
- LoopingBanalMedia = MediaSystem.Instance.Load(BanalMediaFilePath, this);
+ LoopingBanalMedia = MediaSystem.Instance.Load(BanalMediaFilePath, this, true);
break;
}
}
@@ -1603,7 +1600,7 @@
};
break;
case Utility.AvailableFlag.Media:
- LoopingBanalFailedMedia = MediaSystem.Instance.Load(BanalFailedMediaFilePath, this);
+ LoopingBanalFailedMedia = MediaSystem.Instance.Load(BanalFailedMediaFilePath, this, true);
break;
}
}
@@ -1689,16 +1686,16 @@
{
if (mediaNote.HasContents)
{
- var mediaItem = mediaNote.MediaItem;
- var isLooping = mediaNote.IsLooping;
- if (isLooping || mediaItem == null || LoopingCounter < waitModified + mediaItem.Length)
+ var handledItem = mediaNote.MediaItem;
+ var isLooping = handledItem.IsLooping;
+ if (isLooping || handledItem == null || LoopingCounter < waitModified + handledItem.Length)
{
lock (LoadedCSX)
{
if (HasContents)
{
var mediaMode = mediaNote.MediaMode;
- DrawingCollection[mediaMode] = mediaItem?.Handle(this, isLooping ? TimeSpan.Zero : TimeSpan.FromMilliseconds(waitModified) - mediaNote.MediaLevyingPosition, mediaMode, isLooping);
+ DrawingCollection[mediaMode] = handledItem?.Handle(this, isLooping ? TimeSpan.Zero : TimeSpan.FromMilliseconds(waitModified) - mediaNote.MediaLevyingPosition, mediaMode);
IsHandlingDrawing = true;
}
}
@@ -3599,7 +3596,7 @@
_pendingIOAvatarIDs.AddRange(_sentIOAvatarIDs);
_sentIOAvatarIDs.Clear();
}
- HandleComputer();
+ _targetHandler = Utility.HandleParallelly(HandleNotes);
}
else
{
@@ -3612,8 +3609,8 @@
isBanned = false
});
}
+ IsHandling = false;
}
- IsHandling = false;
}
void SetNoteJudged(BaseNote note, Component.Judged judged)
@@ -4075,7 +4072,7 @@
{
for (var i = _comments.Count - 1; i >= 0; --i)
{
- using var rms = PoolSystem.Instance.GetDataFlow();
+ using var rms = PoolSystem.Instance.GetDataFlow(_comments[i].CalculateSize());
_comments[i].WriteTo(rms);
rms.Position = 0;
zipFile.AddEntry(i.ToString(), rms);
@@ -4680,13 +4677,10 @@
{
if (!IsInEvents)
{
- Task.Run(() =>
+ if (!UI.Instance.HandleAudio(audioFileName, null, null, 0.0))
{
- if (!UI.Instance.HandleAudio(audioFileName, null, null, 0.0))
- {
- BaseUI.Instance.HandleAudio(audioFileName, null, null, 0.0);
- }
- });
+ BaseUI.Instance.HandleAudio(audioFileName, null, null, 0.0);
+ }
}
}
diff --git a/Qwilight/Model.cs b/Qwilight/Model.cs
index a789c2a..05ed2dc 100644
--- a/Qwilight/Model.cs
+++ b/Qwilight/Model.cs
@@ -1,12 +1,9 @@
using CommunityToolkit.Mvvm.ComponentModel;
-using System.ComponentModel;
namespace Qwilight
{
public class Model : ObservableObject
{
- protected override void OnPropertyChanged(PropertyChangedEventArgs e) => HandlingUISystem.Instance.HandleParallel(() => base.OnPropertyChanged(e));
-
public virtual void NotifyModel() => OnPropertyChanged(string.Empty);
}
}
diff --git a/Qwilight/Qwilight.csproj b/Qwilight/Qwilight.csproj
index d9b2159..1b005f7 100644
--- a/Qwilight/Qwilight.csproj
+++ b/Qwilight/Qwilight.csproj
@@ -36,6 +36,10 @@
+
+
+
+
@@ -56,9 +60,9 @@
-
+
-
+
diff --git a/Qwilight/System/BaseUI/BasePaintProperty.cs b/Qwilight/System/BaseUI/BasePaintProperty.cs
index 44f4d14..077f8a2 100644
--- a/Qwilight/System/BaseUI/BasePaintProperty.cs
+++ b/Qwilight/System/BaseUI/BasePaintProperty.cs
@@ -31,6 +31,8 @@
public HandledDrawingItem?[] HandledDrawingItems { get; set; }
+ public HandledMediaItem HandledMediaItemValue { get; set; }
+
public MediaHandlerItem MediaHandlerItemValue { get; set; }
public int DrawingVariety { get; set; }
diff --git a/Qwilight/System/BaseUI/BaseUI.cs b/Qwilight/System/BaseUI/BaseUI.cs
index 61df69b..6b24af8 100644
--- a/Qwilight/System/BaseUI/BaseUI.cs
+++ b/Qwilight/System/BaseUI/BaseUI.cs
@@ -1365,7 +1365,7 @@
using var fs = File.OpenWrite(hashMediaFilePath);
rms.WriteTo(fs);
}
- handledMediaValues[Path.GetFileName(fileName)] = MediaSystem.Instance.Load(hashMediaFilePath, this);
+ handledMediaValues[Path.GetFileName(fileName)] = MediaSystem.Instance.Load(hashMediaFilePath, this, true);
}
}
catch
@@ -1553,13 +1553,13 @@
var isDefaultAvailable = mode == 0;
if (handledMediaValues.TryGetValue(paintPropertyValue.Etc, out var handledMediaItem))
{
- paintPropertyValue.MediaHandlerItemValue = MediaSystem.Instance.Handle(handledMediaItem, this, isAvailable, isDefaultAvailable);
+ paintPropertyValue.HandledMediaItemValue = handledMediaItem;
}
else
{
try
{
- paintPropertyValue.MediaHandlerItemValue = MediaSystem.Instance.Handle(MediaSystem.Instance.Load(Path.Combine(QwilightComponent.UIEntryPath, target.UIEntry, paintPropertyValue.Etc), this), this, isAvailable, isDefaultAvailable);
+ paintPropertyValue.HandledMediaItemValue = MediaSystem.Instance.Load(Path.Combine(QwilightComponent.UIEntryPath, target.UIEntry, paintPropertyValue.Etc), this, true);
}
catch
{
@@ -1999,6 +1999,14 @@
ViewModels.Instance.NotifyWindowViewModels();
mainViewModel.NotifyModel();
mainViewModel.IsUILoading = false;
+ Task.Run(() =>
+ {
+ foreach (var paintPropertyValue in PaintPropertyValues.Where(paintVarietyValue => paintVarietyValue?.DrawingVariety == 11))
+ {
+ var mode = paintPropertyValue.Mode;
+ paintPropertyValue.MediaHandlerItemValue = MediaSystem.Instance.Handle(paintPropertyValue.HandledMediaItemValue, this, mode == 1, mode == 0);
+ }
+ });
}
}
diff --git a/Qwilight/System/Configure/Configure.cs b/Qwilight/System/Configure/Configure.cs
index 83737ff..60c299a 100644
--- a/Qwilight/System/Configure/Configure.cs
+++ b/Qwilight/System/Configure/Configure.cs
@@ -1026,7 +1026,7 @@
public void SetFontFamily()
{
- FontFamilyValue = new(string.Join(',', FontFamilyValues.Select(fontFamily => fontFamily?.ToString() ?? string.Empty)));
+ FontFamilyValue = new(string.Join(',', FontFamilyValues.SkipLast(1).Select(fontFamily => fontFamily?.ToString() ?? string.Empty)));
OnPropertyChanged(nameof(FontFamilyValue));
OnPropertyChanged(nameof(FontFamilyValues));
FontFace = new(FontFamilyValue, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
@@ -1035,8 +1035,6 @@
UI.Instance.SetFontFamily();
}
- public string GetFontFamily() => (FontFamilyValues.FirstOrDefault() ?? QwilightComponent.GetBuiltInData("DefaultFontFamily")).ToString();
-
public int CommentViewTabPosition
{
get => _commentViewTabPosition;
@@ -2379,11 +2377,6 @@
LowestWantLevelTextValue = 1;
HighestWantLevelTextValue = 12;
}
- if (isInit || Utility.IsLowerDate(Date, 1, 11, 10))
- {
- FontFamilyValues = new FontFamily[3];
- Array.Fill(FontFamilyValues, QwilightComponent.GetBuiltInData("DefaultFontFamily"));
- }
if (isInit || Utility.IsLowerDate(Date, 1, 11, 36))
{
GroupEntry = true;
@@ -3288,6 +3281,11 @@
InputWantInputMode = new bool[17];
Array.Fill(InputWantInputMode, true);
}
+ if (isInit || Utility.IsLowerDate(Date, 1, 16, 9))
+ {
+ FontFamilyValues = new FontFamily[4];
+ Array.Fill(FontFamilyValues, QwilightComponent.GetBuiltInData("DefaultFontFamily"));
+ }
if (!UIConfigureValuesV2.ContainsKey(UIItemValue.Title))
{
UIConfigureValuesV2[UIItemValue.Title] = new();
diff --git a/Qwilight/System/DrawingSystem/DrawingHandlerItem.cs b/Qwilight/System/DrawingSystem/DrawingHandlerItem.cs
index 8264393..a097927 100644
--- a/Qwilight/System/DrawingSystem/DrawingHandlerItem.cs
+++ b/Qwilight/System/DrawingSystem/DrawingHandlerItem.cs
@@ -2,10 +2,6 @@
{
public struct DrawingHandlerItem : IHandlerItem
{
- public HandledDrawingItem DrawingComputingValue { get; set; }
-
- public bool WasDefaultMediaHandled { get; set; }
-
- public IHandledItem Value => DrawingComputingValue;
+ public HandledDrawingItem HandledDrawingItem { get; set; }
}
}
\ No newline at end of file
diff --git a/Qwilight/System/DrawingSystem/DrawingSystem.cs b/Qwilight/System/DrawingSystem/DrawingSystem.cs
index cd6447d..9ecc8e0 100644
--- a/Qwilight/System/DrawingSystem/DrawingSystem.cs
+++ b/Qwilight/System/DrawingSystem/DrawingSystem.cs
@@ -73,6 +73,10 @@
static readonly string FaultEntryPath = Path.Combine(QwilightComponent.FaultEntryPath, nameof(DrawingSystem));
+ ///
+ /// Direct2D™ 싱글 스레드 제어용 락
+ ///
+ readonly object d2D1CSX = new();
readonly ConcurrentDictionary> _drawingMap = new();
readonly ConcurrentDictionary> _defaultDrawingMap = new();
readonly ConcurrentDictionary> _toCloseValues = new();
@@ -100,15 +104,10 @@
public bool CanNVLL { get; set; }
- public WriteableBitmap D3D9Drawing { get; set; }
+ public ImageSource D3D9Drawing { get; set; }
public HandledDrawingItem ClearedDrawing { get; set; }
- ///
- /// 다이렉트 2D 싱글 스레드 제어용 락
- ///
- public object D2D1CSX { get; } = new();
-
public ICanvasBrush[] FaintFilledPaints { get; } = new ICanvasBrush[101];
public ICanvasBrush[] FaintClearedPaints { get; } = new ICanvasBrush[101];
@@ -406,7 +405,6 @@
var wasLastMoved = LastMovedQueue.TryDequeue(out var lastMoved);
var wasLastNotPointed = LastNotPointedQueue.TryDequeue(out var lastNotPointed);
- var isWPFViewVisible = mainViewModel.IsWPFViewVisible;
var isNVLL = Configure.Instance.IsNVLL;
var allowFramerate = TelnetSystem.Instance.IsAvailable;
var mode = mainViewModel.ModeValue;
@@ -424,7 +422,7 @@
switch (mode)
{
case MainViewModel.Mode.NoteFile:
- lock (D2D1CSX)
+ lock (d2D1CSX)
{
using (targetSession = _rawTargetSystem.CreateDrawingSession(Colors.Black))
{
@@ -442,7 +440,7 @@
case MainViewModel.Mode.Computing:
defaultComputer = mainViewModel.Computer;
modeComponentValue = defaultComputer.ModeComponentValue;
- lock (D2D1CSX)
+ lock (d2D1CSX)
{
using (targetSession = _targetSystem.CreateDrawingSession())
{
@@ -2343,7 +2341,7 @@
defaultComputer = mainViewModel.Computer;
modeComponentValue = defaultComputer.ModeComponentValue;
var handlingComputer = mainViewModel.GetHandlingComputer();
- lock (D2D1CSX)
+ lock (d2D1CSX)
{
using (targetSession = _targetSystem.CreateDrawingSession())
{
@@ -2888,13 +2886,13 @@
void CopyD3D9Drawing()
{
- if (isWPFViewVisible)
+ if (mainViewModel.IsWPFViewVisible)
{
_targetSystem.GetPixelBytes(_targetSystemData);
- var w = new WriteableBitmap((int)_targetSystem.SizeInPixels.Width, (int)_targetSystem.SizeInPixels.Height, _targetSystem.Dpi, _targetSystem.Dpi, PixelFormats.Bgra32, null);
- w.WritePixels(new(0, 0, w.PixelWidth, w.PixelHeight), _rawTargetSystemData, w.Format.BitsPerPixel / 8 * w.PixelWidth, 0);
- w.Freeze();
- D3D9Drawing = w;
+ var d3D9Drawing = new WriteableBitmap((int)_targetSystem.SizeInPixels.Width, (int)_targetSystem.SizeInPixels.Height, _targetSystem.Dpi, _targetSystem.Dpi, PixelFormats.Bgra32, null);
+ d3D9Drawing.WritePixels(new(0, 0, d3D9Drawing.PixelWidth, d3D9Drawing.PixelHeight), _rawTargetSystemData, d3D9Drawing.Format.BitsPerPixel / 8 * d3D9Drawing.PixelWidth, 0);
+ d3D9Drawing.Freeze();
+ D3D9Drawing = d3D9Drawing;
}
}
@@ -3076,38 +3074,32 @@
var dataCount = Configure.Instance.DataCount;
if (_rawTargetSystem == null)
{
- Task.Run(() =>
+ lock (d2D1CSX)
{
- lock (D2D1CSX)
- {
- _targetSystem?.Dispose();
- _targetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, CanvasAlphaMode.Ignore);
- _rawTargetSystemData = new byte[_targetSystem.SizeInPixels.Width * _targetSystem.SizeInPixels.Height * 4];
- _targetSystemData = _rawTargetSystemData.AsBuffer();
- _rawTargetSystem?.Dispose();
- _rawTargetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, dataCount, CanvasAlphaMode.Ignore);
- }
- StrongReferenceMessenger.Default.Send(new SetD2DView
- {
- D2DView = _rawTargetSystem
- });
- StrongReferenceMessenger.Default.Send();
+ _targetSystem?.Dispose();
+ _targetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, CanvasAlphaMode.Ignore);
+ _rawTargetSystemData = new byte[_targetSystem.SizeInPixels.Width * _targetSystem.SizeInPixels.Height * 4];
+ _targetSystemData = _rawTargetSystemData.AsBuffer();
+ _rawTargetSystem?.Dispose();
+ _rawTargetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, dataCount, CanvasAlphaMode.Ignore);
+ }
+ StrongReferenceMessenger.Default.Send(new SetD2DView
+ {
+ D2DView = _rawTargetSystem
});
+ StrongReferenceMessenger.Default.Send();
}
else if (_rawTargetSystem.Size.Width != defaultLength || _rawTargetSystem.Size.Height != defaultHeight || _drawingQuality != drawingQuality || _rawTargetSystem.BufferCount != dataCount)
{
- Task.Run(() =>
+ lock (d2D1CSX)
{
- lock (D2D1CSX)
- {
- _targetSystem?.Dispose();
- _targetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, CanvasAlphaMode.Ignore);
- _rawTargetSystemData = new byte[_targetSystem.SizeInPixels.Width * _targetSystem.SizeInPixels.Height * 4];
- _targetSystemData = _rawTargetSystemData.AsBuffer();
- _rawTargetSystem.ResizeBuffers(defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, dataCount);
- }
- StrongReferenceMessenger.Default.Send();
- });
+ _targetSystem?.Dispose();
+ _targetSystem = new(CanvasDevice.GetSharedDevice(), defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, CanvasAlphaMode.Ignore);
+ _rawTargetSystemData = new byte[_targetSystem.SizeInPixels.Width * _targetSystem.SizeInPixels.Height * 4];
+ _targetSystemData = _rawTargetSystemData.AsBuffer();
+ _rawTargetSystem.ResizeBuffers(defaultLength, defaultHeight, targetWindowDPI, DirectXPixelFormat.B8G8R8A8UIntNormalized, dataCount);
+ }
+ StrongReferenceMessenger.Default.Send();
}
_drawingQuality = drawingQuality;
}
@@ -3555,6 +3547,6 @@
};
}
- public virtual void SetFontFamily(CanvasTextFormat font) => font.FontFamily = Configure.Instance.GetFontFamily();
+ public virtual void SetFontFamily(CanvasTextFormat font) => font.FontFamily = Configure.Instance.FontFamilyValues[3].ToString();
}
}
\ No newline at end of file
diff --git a/Qwilight/System/DrawingSystem/HandledDrawingItem.cs b/Qwilight/System/DrawingSystem/HandledDrawingItem.cs
index 384fb1f..f6fe4f4 100644
--- a/Qwilight/System/DrawingSystem/HandledDrawingItem.cs
+++ b/Qwilight/System/DrawingSystem/HandledDrawingItem.cs
@@ -6,13 +6,15 @@
{
public double Length => double.PositiveInfinity;
+ public bool IsLooping => true;
+
public DrawingItem? Drawing { get; init; }
public ImageSource DefaultDrawing { get; init; }
- public IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode, bool isLooping) => new DrawingHandlerItem
+ public IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode) => new DrawingHandlerItem
{
- DrawingComputingValue = this
+ HandledDrawingItem = this
};
public void Dispose()
diff --git a/Qwilight/System/HandlingUISystem.cs b/Qwilight/System/HandlingUISystem.cs
index 82cf37b..f11cdf5 100644
--- a/Qwilight/System/HandlingUISystem.cs
+++ b/Qwilight/System/HandlingUISystem.cs
@@ -29,17 +29,5 @@
UIHandler.InvokeAsync(onHandle);
}
}
-
- public T Handle(Func onHandle)
- {
- if (UIHandler.CheckAccess())
- {
- return onHandle();
- }
- else
- {
- return UIHandler.Invoke(onHandle);
- }
- }
}
}
diff --git a/Qwilight/System/IHandledItem.cs b/Qwilight/System/IHandledItem.cs
index c0db13a..4315668 100644
--- a/Qwilight/System/IHandledItem.cs
+++ b/Qwilight/System/IHandledItem.cs
@@ -4,6 +4,8 @@
{
double Length { get; }
- IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode, bool isLooping = false);
+ bool IsLooping { get; }
+
+ IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode);
}
}
\ No newline at end of file
diff --git a/Qwilight/System/IHandlerItem.cs b/Qwilight/System/IHandlerItem.cs
index 5d9bedc..ee1eda8 100644
--- a/Qwilight/System/IHandlerItem.cs
+++ b/Qwilight/System/IHandlerItem.cs
@@ -2,6 +2,5 @@
{
public interface IHandlerItem
{
- public IHandledItem Value { get; }
}
}
\ No newline at end of file
diff --git a/Qwilight/System/MediaSystem/HandledMediaItem.cs b/Qwilight/System/MediaSystem/HandledMediaItem.cs
index a262067..ceffd21 100644
--- a/Qwilight/System/MediaSystem/HandledMediaItem.cs
+++ b/Qwilight/System/MediaSystem/HandledMediaItem.cs
@@ -3,22 +3,26 @@
namespace Qwilight
{
- public struct HandledMediaItem : IHandledItem, IDisposable
+ public sealed class HandledMediaItem : IHandledItem, IDisposable
{
public FFmpegMediaSource MediaSrc { get; init; }
public MediaPlayer Media { get; init; }
- public System.Windows.Media.MediaPlayer DefaultMedia { get; init; }
+ public System.Windows.Media.MediaPlayer DefaultMedia { get; set; }
+
+ public string MediaFilePath { get; init; }
public double Length { get; init; }
- public IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode, bool isLooping) => MediaSystem.Instance.Handle(this, mediaHandler, levyingWait, mode, isLooping);
+ public bool IsLooping { get; init; }
+
+ public IHandlerItem Handle(IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode) => MediaSystem.Instance.Handle(this, mediaHandler, levyingWait, mode);
public void Dispose()
{
Media.Dispose();
- HandlingUISystem.Instance.HandleParallel(DefaultMedia.Close);
+ HandlingUISystem.Instance.HandleParallel(() => DefaultMedia?.Close());
}
}
}
\ No newline at end of file
diff --git a/Qwilight/System/MediaSystem/MediaHandlerItem.cs b/Qwilight/System/MediaSystem/MediaHandlerItem.cs
index 2cd12d4..fc32455 100644
--- a/Qwilight/System/MediaSystem/MediaHandlerItem.cs
+++ b/Qwilight/System/MediaSystem/MediaHandlerItem.cs
@@ -18,8 +18,6 @@
public bool IsDefaultAvailable { get; set; }
- public bool IsLooping { get; set; }
-
public bool IsHandling { get; set; }
public bool IsDefaultHandling { get; set; }
@@ -28,9 +26,7 @@
public CanvasBitmap MediaFrame { get; set; }
- public IHandledItem Value => HandledMediaItem;
-
- public double GetMediaPosition(IMediaHandler mediaHandler) => (mediaHandler.LoopingCounter - LevyingPosition.TotalMilliseconds) % (IsLooping ? HandledMediaItem.Length : double.PositiveInfinity);
+ public double GetMediaPosition(IMediaHandler mediaHandler) => (mediaHandler.LoopingCounter - LevyingPosition.TotalMilliseconds) % (HandledMediaItem.IsLooping ? HandledMediaItem.Length : double.PositiveInfinity);
public void Handle(IMediaHandler mediaHandler, double mediaPosition)
{
@@ -97,9 +93,23 @@
{
HandlingUISystem.Instance.HandleParallel(() =>
{
- HandledMediaItem.DefaultMedia.Position = TimeSpan.FromMilliseconds(mediaPosition);
- HandledMediaItem.DefaultMedia.SpeedRatio = mediaHandler.AudioMultiplier;
- HandledMediaItem.DefaultMedia.Play();
+ var defaultMedia = new System.Windows.Media.MediaPlayer
+ {
+ IsMuted = true
+ };
+ if (HandledMediaItem.IsLooping)
+ {
+ defaultMedia.MediaEnded += (sender, e) =>
+ {
+ defaultMedia.Position = TimeSpan.Zero;
+ defaultMedia.Play();
+ };
+ }
+ defaultMedia.Open(new(HandledMediaItem.MediaFilePath));
+ defaultMedia.Position = TimeSpan.FromMilliseconds(mediaPosition);
+ defaultMedia.SpeedRatio = mediaHandler.AudioMultiplier;
+ defaultMedia.Play();
+ HandledMediaItem.DefaultMedia = defaultMedia;
});
IsDefaultHandling = true;
}
@@ -107,7 +117,7 @@
public void StopDefault()
{
- HandlingUISystem.Instance.HandleParallel(HandledMediaItem.DefaultMedia.Stop);
+ HandlingUISystem.Instance.HandleParallel(() => HandledMediaItem.DefaultMedia?.Stop());
IsDefaultHandling = false;
}
@@ -115,23 +125,27 @@
{
if (isPaused)
{
- HandlingUISystem.Instance.HandleParallel(HandledMediaItem.DefaultMedia.Pause);
+ HandlingUISystem.Instance.HandleParallel(() => HandledMediaItem.DefaultMedia?.Pause());
}
else
{
- HandlingUISystem.Instance.HandleParallel(HandledMediaItem.DefaultMedia.Play);
+ HandlingUISystem.Instance.HandleParallel(() => HandledMediaItem.DefaultMedia?.Play());
}
}
public void SetDefaultMediaPosition(double mediaPosition)
{
- HandlingUISystem.Instance.HandleParallel(() =>
+ var defaultMedia = HandledMediaItem.DefaultMedia;
+ if (defaultMedia != null)
{
- if (Math.Abs(HandledMediaItem.DefaultMedia.Position.TotalMilliseconds - mediaPosition) >= 500.0)
+ HandlingUISystem.Instance.HandleParallel(() =>
{
- HandledMediaItem.DefaultMedia.Position = TimeSpan.FromMilliseconds(mediaPosition);
- }
- });
+ if (Math.Abs(defaultMedia.Position.TotalMilliseconds - mediaPosition) >= 500.0)
+ {
+ defaultMedia.Position = TimeSpan.FromMilliseconds(mediaPosition);
+ }
+ });
+ }
}
public void Dispose()
diff --git a/Qwilight/System/MediaSystem/MediaNote.cs b/Qwilight/System/MediaSystem/MediaNote.cs
index 0900644..5cd862c 100644
--- a/Qwilight/System/MediaSystem/MediaNote.cs
+++ b/Qwilight/System/MediaSystem/MediaNote.cs
@@ -11,8 +11,6 @@
public Mode MediaMode { get; set; }
- public bool IsLooping { get; set; }
-
public IHandledItem MediaItem { get; set; }
public bool HasContents { get; set; }
diff --git a/Qwilight/System/MediaSystem/MediaSystem.cs b/Qwilight/System/MediaSystem/MediaSystem.cs
index f80d58c..cf5ff39 100644
--- a/Qwilight/System/MediaSystem/MediaSystem.cs
+++ b/Qwilight/System/MediaSystem/MediaSystem.cs
@@ -3,7 +3,6 @@
using Qwilight.ViewModel;
using System.Collections.Concurrent;
using System.IO;
-using MediaPlayer = System.Windows.Media.MediaPlayer;
namespace Qwilight
{
@@ -28,10 +27,9 @@
{
if (Configure.Instance.Media && _mediaHandlerMap.TryGetValue(mediaHandler, out var mediaHandlerItems))
{
- var isNoteFileMode = ViewModels.Instance.MainValue.IsNoteFileMode;
foreach (var mediaHandlerItem in mediaHandlerItems)
{
- if (isNoteFileMode)
+ if (ViewModels.Instance.MainValue.IsWPFViewVisible)
{
mediaHandlerItem.PauseDefault(isPaused);
}
@@ -67,7 +65,7 @@
{
foreach (var mediaHandlerItem in mediaHandlerItems)
{
- if (mediaHandlerItem.IsVisible && !mediaHandlerItem.IsLooping)
+ if (mediaHandlerItem.IsVisible && !mediaHandlerItem.HandledMediaItem.IsLooping)
{
if (ViewModels.Instance.MainValue.IsWPFViewVisible)
{
@@ -88,7 +86,7 @@
}
}
- public HandledMediaItem Load(string mediaFilePath, IMediaContainer mediaContainer)
+ public HandledMediaItem Load(string mediaFilePath, IMediaContainer mediaContainer, bool isLooping)
{
var isCounterWave = mediaContainer.IsCounterWave;
var hash = $"{(isCounterWave ? '@' : string.Empty)}{Utility.GetID128s(File.ReadAllBytes(mediaFilePath))}";
@@ -133,19 +131,12 @@
{
Source = mediaSrc.CreateMediaPlaybackItem(),
IsMuted = true,
- IsVideoFrameServerEnabled = true
+ IsVideoFrameServerEnabled = true,
+ IsLoopingEnabled = isLooping
},
- DefaultMedia = HandlingUISystem.Instance.Handle(() =>
- {
- var defaultMedia = new MediaPlayer
- {
- IsMuted = true
- };
- defaultMedia.Open(new(mediaFilePath));
- defaultMedia.Stop();
- return defaultMedia;
- }),
- Length = mediaLength.TotalMilliseconds
+ MediaFilePath = mediaFilePath,
+ Length = mediaLength.TotalMilliseconds,
+ IsLooping = isLooping
};
handledMediaItem.Media.CommandManager.IsEnabled = false;
handledMediaItem.Media.SystemMediaTransportControls.IsEnabled = false;
@@ -169,30 +160,17 @@
}
}
- public MediaHandlerItem Handle(HandledMediaItem handledMediaItem, IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode, bool isLooping)
+ public MediaHandlerItem Handle(HandledMediaItem handledMediaItem, IMediaHandler mediaHandler, TimeSpan levyingWait, MediaNote.Mode mode)
{
- handledMediaItem.Media.IsLoopingEnabled = isLooping;
var mediaHandlerItem = new MediaHandlerItem
{
HandledMediaItem = handledMediaItem,
LevyingPosition = levyingWait,
Mode = mode,
- IsLooping = isLooping,
IsHandling = false,
IsDefaultHandling = false,
IsVisible = false
};
- if (isLooping)
- {
- HandlingUISystem.Instance.HandleParallel(() =>
- {
- handledMediaItem.DefaultMedia.MediaEnded += (sender, e) =>
- {
- handledMediaItem.DefaultMedia.Stop();
- handledMediaItem.DefaultMedia.Play();
- };
- });
- }
_mediaHandlerMap.AddOrUpdate(mediaHandler, (mediaHandler, t) => new()
{
t.mediaHandlerItem
@@ -240,24 +218,14 @@
public MediaHandlerItem Handle(HandledMediaItem handledMediaItem, IMediaHandler mediaHandler, bool isAvailable, bool isDefaultAvailable)
{
- handledMediaItem.Media.IsLoopingEnabled = true;
var mediaHandlerItem = new MediaHandlerItem
{
HandledMediaItem = handledMediaItem,
LevyingPosition = TimeSpan.Zero,
Mode = MediaNote.Mode.Default,
- IsLooping = true,
IsAvailable = isAvailable,
IsDefaultAvailable = isDefaultAvailable
};
- HandlingUISystem.Instance.HandleParallel(() =>
- {
- handledMediaItem.DefaultMedia.MediaEnded += (sender, e) =>
- {
- handledMediaItem.DefaultMedia.Stop();
- handledMediaItem.DefaultMedia.Play();
- };
- });
_mediaHandlerMap.AddOrUpdate(mediaHandler, (mediaHandler, mediaHandlerItem) => new()
{
mediaHandlerItem
@@ -292,7 +260,7 @@
{
if (mediaHandlerItem.IsVisible)
{
- if (mediaHandler == BaseUI.Instance ? isQuitMode && mediaHandlerItem.IsAvailable : !isNoteFileMode && Configure.Instance.Media)
+ if (!isNoteFileMode && (mediaHandler == BaseUI.Instance ? isQuitMode && mediaHandlerItem.IsAvailable : Configure.Instance.Media))
{
if (!mediaHandlerItem.IsHandling)
{
diff --git a/Qwilight/System/PoolSystem/PoolSystem.cs b/Qwilight/System/PoolSystem/PoolSystem.cs
index c7d39a0..60135e7 100644
--- a/Qwilight/System/PoolSystem/PoolSystem.cs
+++ b/Qwilight/System/PoolSystem/PoolSystem.cs
@@ -36,6 +36,13 @@
{
if (isWPFViewVisible)
{
+ foreach (var (defaultTextID, defaultTextItem) in _defaultTextItems)
+ {
+ _defaultTextItems.TryRemove(defaultTextID, out _);
+ }
+ }
+ else
+ {
foreach (var (textID, textItem) in _textItems)
{
using (textItem)
@@ -51,13 +58,6 @@
}
}
}
- else
- {
- foreach (var (defaultTextID, defaultTextItem) in _defaultTextItems)
- {
- _defaultTextItems.TryRemove(defaultTextID, out _);
- }
- }
foreach (var (valueTextID, text) in _valueIntTexts)
{
_valueIntTexts.TryRemove(valueTextID, out _);
diff --git a/Qwilight/System/TwilightSystem.cs b/Qwilight/System/TwilightSystem.cs
index a9e7002..d09a74d 100644
--- a/Qwilight/System/TwilightSystem.cs
+++ b/Qwilight/System/TwilightSystem.cs
@@ -417,13 +417,16 @@
toEnterSiteViewModel.SetAllowedPostableItems(twilightEnterSite);
toEnterSiteViewModel.ModeComponentValue.CopyAsJSON(twilightEnterSite.modeComponentData);
}
- var toEnterSite = HandlingUISystem.Instance.Handle(() => new Site
+ HandlingUISystem.Instance.HandleParallel(() =>
{
- DataContext = toEnterSiteViewModel
+ var toEnterSite = new Site
+ {
+ DataContext = toEnterSiteViewModel
+ };
+ toEnterSiteViewModel.View = toEnterSite;
+ siteContainerViewModel.SiteCollection.Add(toEnterSite);
+ siteContainerViewModel.SiteView = toEnterSite;
});
- toEnterSiteViewModel.View = toEnterSite;
- HandlingUISystem.Instance.HandleParallel(() => siteContainerViewModel.SiteCollection.Add(toEnterSite));
- siteContainerViewModel.SiteView = toEnterSite;
break;
case Event.Types.EventID.CallBundle:
var twilightCallBundle = Utility.GetJSON(eventItemText);
diff --git a/Qwilight/Utilities/IOUtility.cs b/Qwilight/Utilities/IOUtility.cs
index 6e66b1b..0fb11da 100644
--- a/Qwilight/Utilities/IOUtility.cs
+++ b/Qwilight/Utilities/IOUtility.cs
@@ -75,6 +75,7 @@
var faultFilePath = Path.Combine(faultEntryPath, Path.GetInvalidFileNameChars().Aggregate($"{DateTime.Now:F}.log", (faultFileName, target) => faultFileName.Replace(target, ' ')));
var faultText = Utility.GetFault(e);
Console.WriteLine(faultText);
+ Directory.CreateDirectory(Path.GetDirectoryName(faultFilePath));
File.WriteAllText(faultFilePath, faultText, Encoding.UTF8);
return (faultFilePath, faultText);
}
diff --git a/Qwilight/View/ConfigureWindow/ComputingGUIConfigureWindow.xaml b/Qwilight/View/ConfigureWindow/ComputingGUIConfigureWindow.xaml
index f689770..47747ea 100644
--- a/Qwilight/View/ConfigureWindow/ComputingGUIConfigureWindow.xaml
+++ b/Qwilight/View/ConfigureWindow/ComputingGUIConfigureWindow.xaml
@@ -68,21 +68,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -98,9 +98,9 @@
-
-
-
+
+
+
@@ -109,17 +109,17 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
+
diff --git a/Qwilight/View/ConfigureWindow/GUIConfigureWindow.xaml b/Qwilight/View/ConfigureWindow/GUIConfigureWindow.xaml
index b3bb89a..227e55d 100644
--- a/Qwilight/View/ConfigureWindow/GUIConfigureWindow.xaml
+++ b/Qwilight/View/ConfigureWindow/GUIConfigureWindow.xaml
@@ -14,7 +14,7 @@
-
+
@@ -36,6 +36,11 @@
+
diff --git a/Qwilight/View/MainWindow/MainWindow.xaml.cs b/Qwilight/View/MainWindow/MainWindow.xaml.cs
index 70fe062..66d3168 100644
--- a/Qwilight/View/MainWindow/MainWindow.xaml.cs
+++ b/Qwilight/View/MainWindow/MainWindow.xaml.cs
@@ -239,15 +239,21 @@
{
if (isVisible)
{
- _siteView.Enable();
- _siteView.Show();
- _windowXamlView.NavigateFocus(new(XamlSourceFocusNavigationReason.Programmatic));
- _d2DView.Focus(FocusState.Programmatic);
+ HandlingUISystem.Instance.HandleParallel(() =>
+ {
+ _siteView.Enable();
+ _siteView.Show();
+ _windowXamlView.NavigateFocus(new(XamlSourceFocusNavigationReason.Programmatic));
+ _d2DView.Focus(FocusState.Programmatic);
+ });
}
else
{
- _siteView.Hide();
- _siteView.Disable();
+ HandlingUISystem.Instance.HandleParallel(() =>
+ {
+ _siteView.Hide();
+ _siteView.Disable();
+ });
}
}
diff --git a/Qwilight/View/QwilightClass.xaml.cs b/Qwilight/View/QwilightClass.xaml.cs
index c9c6e8f..c2e494c 100644
--- a/Qwilight/View/QwilightClass.xaml.cs
+++ b/Qwilight/View/QwilightClass.xaml.cs
@@ -129,7 +129,6 @@
Directory.CreateDirectory(QwilightComponent.BundleEntryPath);
Directory.CreateDirectory(QwilightComponent.CommentEntryPath);
Directory.CreateDirectory(QwilightComponent.EdgeEntryPath);
- Directory.CreateDirectory(QwilightComponent.FaultEntryPath);
Directory.CreateDirectory(QwilightComponent.MediaEntryPath);
Directory.CreateDirectory(LevelSystem.EntryPath);
}
diff --git a/Qwilight/ViewModel/MainViewModel.cs b/Qwilight/ViewModel/MainViewModel.cs
index 62a6862..b81f912 100644
--- a/Qwilight/ViewModel/MainViewModel.cs
+++ b/Qwilight/ViewModel/MainViewModel.cs
@@ -219,13 +219,17 @@
{
if (SetProperty(ref _isWPFViewVisible, value, nameof(IsWPFViewVisible)))
{
+ if (!value)
+ {
+ DrawingSystem.Instance.OnModified();
+ }
+ PoolSystem.Instance.Wipe(value);
StrongReferenceMessenger.Default.Send(new SetD2DViewVisibility
{
IsVisible = !value
});
IsVital = IsComputingMode && !value;
ViewModels.Instance.NotifyWindowViewModels();
- DrawingSystem.Instance.OnModified();
var handlingComputer = GetHandlingComputer();
if (handlingComputer != null)
{
@@ -235,7 +239,6 @@
MediaSystem.Instance.HandleDefaultIfAvailable(BaseUI.Instance);
MediaSystem.Instance.HandleIfAvailable(BaseUI.Instance);
TVSystem.Instance.HandleSystemIfAvailable();
- PoolSystem.Instance.Wipe(value);
}
}
}
@@ -777,7 +780,10 @@
Configure.Instance.WindowLengthV2 = (int)(windowAreaLength / WindowDPI);
Configure.Instance.WindowHeightV2 = (int)(windowAreaHeight / WindowDPI);
}
- DrawingSystem.Instance.OnModified();
+ if (!IsWPFViewVisible)
+ {
+ DrawingSystem.Instance.OnModified();
+ }
}
public void OnMove()