修改插件系统接口,增加 SDK 开发函数方便开发
This commit is contained in:
parent
b44bd6d9ac
commit
27e9decabd
|
@ -496,8 +496,9 @@ namespace IWingRecorder
|
|||
/// <summary>
|
||||
/// 开始录制
|
||||
/// </summary>
|
||||
/// <param name="filename">录制文件</param>
|
||||
/// <returns></returns>
|
||||
bool StartRecording();
|
||||
bool StartRecording(string filename);
|
||||
|
||||
/// <summary>
|
||||
/// 结束录制
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace IWingRecorder
|
||||
{
|
||||
/// <summary>
|
||||
/// 羽云录屏插件系统 SDK ,提供宿主与插件通信的编码基础,
|
||||
/// 并提供简单的函数封装方便插件开发
|
||||
/// </summary>
|
||||
public partial class Utilities
|
||||
{
|
||||
/// <summary>
|
||||
|
@ -12,20 +17,38 @@ namespace IWingRecorder
|
|||
/// </summary>
|
||||
public const string PluginVersion = "V1B";
|
||||
|
||||
/// <summary>
|
||||
/// 对于 WPF 字体样式枚举
|
||||
/// </summary>
|
||||
public enum TextDecorationType
|
||||
{
|
||||
/// <summary>
|
||||
/// 无效果
|
||||
/// </summary>
|
||||
None,
|
||||
/// <summary>
|
||||
/// 下划线
|
||||
/// </summary>
|
||||
Underline,
|
||||
/// <summary>
|
||||
/// 基线
|
||||
/// </summary>
|
||||
Baseline,
|
||||
/// <summary>
|
||||
/// 删除线
|
||||
/// </summary>
|
||||
Strikethrough,
|
||||
/// <summary>
|
||||
/// 上划线
|
||||
/// </summary>
|
||||
OverLine
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取文本效果类型
|
||||
/// 通过 WPF 文字样式获取 TextDecorationType 文本效果类型枚举
|
||||
/// </summary>
|
||||
/// <param name="decoration"></param>
|
||||
/// <returns></returns>
|
||||
/// <param name="decoration">TextDecoration 对象</param>
|
||||
/// <returns>返回 TextDecorationType 枚举</returns>
|
||||
public static TextDecorationType TypeOfTextDecorationItem(TextDecoration decoration)
|
||||
{
|
||||
if (decoration == TextDecorations.Underline[0])
|
||||
|
@ -47,6 +70,73 @@ namespace IWingRecorder
|
|||
return TextDecorationType.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断 TextDecorationCollection 对象是否包含 TextDecorationType 字体样式枚举
|
||||
/// </summary>
|
||||
/// <param name="decorations">TextDecorationCollection 对象</param>
|
||||
/// <param name="type">TextDecorationType 字体样式枚举</param>
|
||||
/// <returns>如果包含返回 true</returns>
|
||||
public static bool TextDecorationTypeContains(TextDecorationCollection decorations, TextDecorationType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TextDecorationType.None:
|
||||
return true;
|
||||
case TextDecorationType.Underline:
|
||||
return decorations.Contains(TextDecorations.Underline[0]);
|
||||
case TextDecorationType.Baseline:
|
||||
return decorations.Contains(TextDecorations.Baseline[0]);
|
||||
case TextDecorationType.Strikethrough:
|
||||
return decorations.Contains(TextDecorations.Strikethrough[0]);
|
||||
case TextDecorationType.OverLine:
|
||||
return decorations.Contains(TextDecorations.OverLine[0]);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取包含最大路径的 StringBuilder 对象
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static StringBuilder Get_MAX_PATH_BufferStringBuilder()
|
||||
=> new StringBuilder(260);
|
||||
|
||||
/// <summary>
|
||||
/// 将 WPF 的 Color 对象转化为 ARGB 十六进制数字
|
||||
/// </summary>
|
||||
/// <param name="color">WPF 的 Color 对象</param>
|
||||
/// <returns>ARGB 十六进制数字</returns>
|
||||
public static uint ColorToRGBHex(Color color)
|
||||
{
|
||||
return (uint)(color.A << 24 | color.R << 16 | color.G << 8 | color.B);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 忽略大小写比较字符串
|
||||
/// </summary>
|
||||
/// <param name="str1">字符串 1</param>
|
||||
/// <param name="str2">字符串 2</param>
|
||||
/// <returns>如果忽略大小写字符串相等返回 true</returns>
|
||||
public static bool StringCompareIgnoreCase(string str1, string str2)
|
||||
{
|
||||
return string.Compare(str1, str2, true) == 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 调用 PropertyChanged 事件函数,通知数据更改
|
||||
/// </summary>
|
||||
/// <param name="propertyChanged">数据更改事件处理事件</param>
|
||||
/// <param name="sender">触发者</param>
|
||||
/// <param name="propertyName">属性名</param>
|
||||
public static void OnPropertyChanged(PropertyChangedEventHandler propertyChanged, object sender, string propertyName)
|
||||
{
|
||||
propertyChanged?.Invoke(sender, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 羽云录屏封装的 WPF 字体对象
|
||||
/// </summary>
|
||||
public class WingFont
|
||||
{
|
||||
public FontFamily FontFamily { get; set; }
|
||||
|
@ -69,6 +159,43 @@ namespace IWingRecorder
|
|||
}
|
||||
return $"{FontFamily} | {FontWeight} | {FontStyle} | {sb}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 WingFont 字体转为 C++ 使用的 LOGFONT
|
||||
/// 注意此转换将会损失一些 WPF 字体特性
|
||||
/// </summary>
|
||||
/// <returns>LOGFONT结构体</returns>
|
||||
public object ToLogFont()
|
||||
{
|
||||
var fontstyle = FontStyle;
|
||||
System.Drawing.FontStyle fontStyle = System.Drawing.FontStyle.Regular;
|
||||
if (fontstyle == FontStyles.Oblique || fontstyle== FontStyles.Italic)
|
||||
fontStyle |= System.Drawing.FontStyle.Italic;
|
||||
|
||||
var textd = TextDecorations;
|
||||
if (textd != null)
|
||||
{
|
||||
if(TextDecorationTypeContains(textd, TextDecorationType.Underline)||
|
||||
TextDecorationTypeContains(textd, TextDecorationType.Baseline))
|
||||
fontStyle|= System.Drawing.FontStyle.Underline;
|
||||
if(TextDecorationTypeContains(textd, TextDecorationType.Strikethrough))
|
||||
fontStyle |= System.Drawing.FontStyle.Strikeout;
|
||||
}
|
||||
|
||||
var fontweight = FontWeight;
|
||||
if (fontweight != null)
|
||||
{
|
||||
if (fontweight == FontWeights.Bold || fontweight == FontWeights.SemiBold ||
|
||||
fontweight == FontWeights.DemiBold || fontweight == FontWeights.UltraBold ||
|
||||
fontweight == FontWeights.ExtraBold)
|
||||
fontStyle |= System.Drawing.FontStyle.Bold;
|
||||
}
|
||||
|
||||
System.Drawing.Font font = new System.Drawing.Font(FontFamily.Source, (float)FontSize,fontStyle);
|
||||
object logFont = new object();
|
||||
font.ToLogFont(logFont);
|
||||
return logFont;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -226,8 +226,9 @@ namespace TestAddin
|
|||
return true;
|
||||
}
|
||||
|
||||
public bool StartRecording()
|
||||
public bool StartRecording(string filename)
|
||||
{
|
||||
FormTest.WriteLine($"+ StartRecording : {filename}");
|
||||
timer.Start();
|
||||
recordingState = RecordingState.Recording;
|
||||
return true;
|
||||
|
@ -305,7 +306,7 @@ namespace TestAddin
|
|||
if (format == null) return false;
|
||||
foreach (var item in SupportRecordingFormats)
|
||||
{
|
||||
if (string.Compare(item.Name, format, true) == 0)
|
||||
if (Utilities.StringCompareIgnoreCase(item.Name, format))
|
||||
{
|
||||
currentRecordingFormat = format;
|
||||
OnPropertyChanged(nameof(CurrentRecordingFormat));
|
||||
|
@ -336,7 +337,7 @@ namespace TestAddin
|
|||
if (format == null) return false;
|
||||
foreach (var item in SupportScreenShotFormat)
|
||||
{
|
||||
if (string.Compare(item, format, true) == 0)
|
||||
if (Utilities.StringCompareIgnoreCase(item, format))
|
||||
{
|
||||
currentScreenShotFormat = format;
|
||||
OnPropertyChanged(nameof(CurrentScreenShotFormat));
|
||||
|
|
|
@ -166,7 +166,7 @@ namespace WingRecorder
|
|||
{
|
||||
new CountDownWindow().ShowDialog();
|
||||
}
|
||||
if (engine.StartRecording())
|
||||
if (engine.StartRecording(Utilities.GetRandomFileName(Utilities.RandomFileType.Video, engine.CurrentRecordingFormat)))
|
||||
{
|
||||
config.Locked = true;
|
||||
lblStartRecord.Text = PauseTitle;
|
||||
|
|
Loading…
Reference in New Issue