Skip to content

Commit

Permalink
[add] CreateMediaElementAsync
Browse files Browse the repository at this point in the history
  • Loading branch information
ChangSakura committed Aug 6, 2024
1 parent d445cb4 commit 257a64f
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 19 deletions.
63 changes: 48 additions & 15 deletions Ink Canvas/Helpers/InkCanvasElementsHelper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

Expand Down Expand Up @@ -38,20 +39,6 @@ public static List<UIElement> GetSelectedElements(InkCanvas inkCanvas)
return selectedImages;
}

private static Image CloneImage(Image originalImage)
{
Image clonedImage = new Image
{
Source = originalImage.Source,
Width = originalImage.Width,
Height = originalImage.Height,
Stretch = originalImage.Stretch,
Opacity = originalImage.Opacity,
RenderTransform = originalImage.RenderTransform.Clone()
};
return clonedImage;
}

public class ElementData
{
public double SetLeftData { get; set; }
Expand All @@ -76,12 +63,13 @@ public static List<UIElement> CloneSelectedElements(InkCanvas inkCanvas, ref Dic
InkCanvas.SetTop(frameworkElement, InkCanvas.GetTop(element));
inkCanvas.Children.Add(frameworkElement);
clonedElements.Add(frameworkElement);
ElementsInitialHistory[frameworkElement.Name] = new InkCanvasElementsHelper.ElementData
ElementsInitialHistory[frameworkElement.Name] = new ElementData
{
SetLeftData = InkCanvas.GetLeft(element),
SetTopData = InkCanvas.GetTop(element),
FrameworkElement = frameworkElement
};
LogHelper.WriteObjectLogToFile(frameworkElement);
}
}
return clonedElements;
Expand All @@ -95,6 +83,11 @@ private static UIElement CloneUIElement(UIElement element)
{
return CloneImage(originalImage);
}

if (element is MediaElement originalMediaElement)
{
return CloneMediaElement(originalMediaElement);
}

if (element is FrameworkElement frameworkElement)
{
Expand All @@ -113,5 +106,45 @@ private static UIElement CloneUIElement(UIElement element)

return null;
}

private static Image CloneImage(Image originalImage)
{
Image clonedImage = new Image
{
Source = originalImage.Source,
Width = originalImage.Width,
Height = originalImage.Height,
Stretch = originalImage.Stretch,
Opacity = originalImage.Opacity,
RenderTransform = originalImage.RenderTransform.Clone()
};
return clonedImage;
}

private static MediaElement CloneMediaElement(MediaElement originalMediaElement)
{
MediaElement clonedMediaElement = new MediaElement
{
Source = originalMediaElement.Source,
Width = originalMediaElement.Width,
Height = originalMediaElement.Height,
Stretch = originalMediaElement.Stretch,
Opacity = originalMediaElement.Opacity,
RenderTransform = originalMediaElement.RenderTransform.Clone(),
LoadedBehavior = originalMediaElement.LoadedBehavior,
UnloadedBehavior = originalMediaElement.UnloadedBehavior,
Volume = originalMediaElement.Volume,
Balance = originalMediaElement.Balance,
IsMuted = originalMediaElement.IsMuted,
ScrubbingEnabled = originalMediaElement.ScrubbingEnabled
};
clonedMediaElement.Loaded += async (sender, args) =>
{
clonedMediaElement.Play();
await Task.Delay(100);
clonedMediaElement.Pause();
};
return clonedMediaElement;
}
}
}
45 changes: 45 additions & 0 deletions Ink Canvas/Helpers/LogHelper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Reflection;

namespace Ink_Canvas.Helpers
{
Expand Down Expand Up @@ -46,6 +47,50 @@ public static void WriteLogToFile(string str, LogType logType = LogType.Info)
catch { }
}

public static void WriteObjectLogToFile(object obj, LogType logType = LogType.Info)
{
string strLogType = "Info";
switch (logType)
{
case LogType.Event:
strLogType = "Event";
break;
case LogType.Trace:
strLogType = "Trace";
break;
case LogType.Error:
strLogType = "Error";
break;
}
try
{
var file = App.RootPath + LogFile;
if (!Directory.Exists(App.RootPath))
{
Directory.CreateDirectory(App.RootPath);
}
using (StreamWriter sw = new StreamWriter(file, true))
{
sw.WriteLine($"{DateTime.Now:O} [{strLogType}] Object Log:");
if (obj != null)
{
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
object value = property.GetValue(obj, null);
sw.WriteLine($"{property.Name}: {value}");
}
}
else
{
sw.WriteLine("null");
}
}
}
catch { }
}

public enum LogType
{
Info,
Expand Down
19 changes: 15 additions & 4 deletions Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ private async void BtnImageInsert_Click(object sender, RoutedEventArgs e)

if (image != null)
{
string timestamp = "img_" + DateTime.Now.ToString("ddHHmmssfff");
string timestamp = "img_" + DateTime.Now.ToString("yyyyMMdd_HH_mm_ss_fff");
image.Name = timestamp;

CenterAndScaleElement(image);
Expand Down Expand Up @@ -101,9 +101,6 @@ private async void BtnMediaInsert_Click(object sender, RoutedEventArgs e)

if (mediaElement != null)
{
string timestamp = "media_" + DateTime.Now.ToString("ddHHmmssfff");
mediaElement.Name = timestamp;

CenterAndScaleElement(mediaElement);

InkCanvas.SetLeft(mediaElement, 0);
Expand All @@ -121,16 +118,30 @@ private async void BtnMediaInsert_Click(object sender, RoutedEventArgs e)

private async Task<MediaElement> CreateMediaElementAsync(string filePath)
{
string savePath = Path.Combine(Settings.Automation.AutoSavedStrokesLocation, "File Dependency");
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
return await Dispatcher.InvokeAsync(() =>
{
MediaElement mediaElement = new MediaElement();
mediaElement.Source = new Uri(filePath);
string timestamp = "media_" + DateTime.Now.ToString("yyyyMMdd_HH_mm_ss_fff");
mediaElement.Name = timestamp;
mediaElement.LoadedBehavior = MediaState.Manual;
mediaElement.UnloadedBehavior = MediaState.Manual;
mediaElement.Width = 256;
mediaElement.Height = 256;
string fileExtension = Path.GetExtension(filePath);
string newFilePath = Path.Combine(savePath, mediaElement.Name + fileExtension);
File.Copy(filePath, newFilePath, true);
mediaElement.Source = new Uri(newFilePath);
return mediaElement;
});
}
Expand Down

0 comments on commit 257a64f

Please sign in to comment.