diff --git a/CPF.Linux/CPF.Linux.csproj b/CPF.Linux/CPF.Linux.csproj
index 800c710..1f0e1e2 100644
--- a/CPF.Linux/CPF.Linux.csproj
+++ b/CPF.Linux/CPF.Linux.csproj
@@ -2,8 +2,7 @@
netstandard2.0
- 0.9.6.5
- false
+ 0.9.6.6
QQ:761716178
QQ:761716178
QQ:761716178 跨平台UI框架
@@ -13,7 +12,6 @@
Xhm.CPF.Linux
false
true
- false
diff --git a/CPF.Mac/CPF.Mac.csproj b/CPF.Mac/CPF.Mac.csproj
index 954437a..54153b9 100644
--- a/CPF.Mac/CPF.Mac.csproj
+++ b/CPF.Mac/CPF.Mac.csproj
@@ -3,9 +3,7 @@
netstandard2.1
QQ:761716178 跨平台UI框架
- 0.9.6.5
- false
- false
+ 0.9.6.6
Xhm.CPF.Mac
CPF(Cross platform UI framework) QQ:761716178 跨平台UI框架 http://cpf.cskin.net/
Copyright (c) 2020 by http://cpf.cskin.net/
diff --git a/CPF.Skia/CPF.Skia.csproj b/CPF.Skia/CPF.Skia.csproj
index 007ee62..d1a32b3 100644
--- a/CPF.Skia/CPF.Skia.csproj
+++ b/CPF.Skia/CPF.Skia.csproj
@@ -3,9 +3,7 @@
netstandard2.0
QQ:761716178 跨平台UI框架
- 0.9.6.5
- false
- false
+ 0.9.6.6
Xhm.CPF.Skia
CPF(Cross platform UI framework) QQ:761716178 跨平台UI框架 http://cpf.cskin.net/
Copyright (c) 2020 by http://cpf.cskin.net/
diff --git a/CPF.Skia/GlView.cs b/CPF.Skia/GlView.cs
index f2431c6..31b9ac8 100644
--- a/CPF.Skia/GlView.cs
+++ b/CPF.Skia/GlView.cs
@@ -37,6 +37,10 @@ namespace CPF.Skia
var size = new PixelSize((int)Math.Round(cSize.Width * Root.RenderScaling), (int)Math.Round(cSize.Height * Root.RenderScaling));
var skia = dc as SkiaDrawingContext;
var _gl = skia.GlContext;
+ if (_gl == null)
+ {
+ return;
+ }
if (paint == null)
{
paint = new SKPaint();
@@ -52,8 +56,8 @@ namespace CPF.Skia
_gl.BindTexture(GlConsts.GL_TEXTURE_2D, ColorBuffer);
- _gl.TexParameteri(GlConsts.GL_TEXTURE_2D, GlConsts.GL_TEXTURE_MIN_FILTER, (int)GlConsts.GL_LINEAR);
- _gl.TexParameteri(GlConsts.GL_TEXTURE_2D, GlConsts.GL_TEXTURE_MAG_FILTER, GlConsts.GL_LINEAR);
+ _gl.TexParameter(GlConsts.GL_TEXTURE_2D, GlConsts.GL_TEXTURE_MIN_FILTER, (int)GlConsts.GL_LINEAR);
+ _gl.TexParameter(GlConsts.GL_TEXTURE_2D, GlConsts.GL_TEXTURE_MAG_FILTER, GlConsts.GL_LINEAR);
_gl.BindTexture(GlConsts.GL_TEXTURE_2D, 0);
diff --git a/CPF.Windows/CPF.Windows.csproj b/CPF.Windows/CPF.Windows.csproj
index 438754e..165a08d 100644
--- a/CPF.Windows/CPF.Windows.csproj
+++ b/CPF.Windows/CPF.Windows.csproj
@@ -3,9 +3,7 @@
net40;netstandard2.0;net5
QQ:761716178 跨平台UI框架
- 0.9.6.5
- false
- false
+ 0.9.6.6
Xhm.CPF.Windows
CPF(Cross platform UI framework) QQ:761716178 跨平台UI框架 http://cpf.cskin.net/
http://cpf.cskin.net/
diff --git a/CPF/CPF.csproj b/CPF/CPF.csproj
index f689a6b..6b672d5 100644
--- a/CPF/CPF.csproj
+++ b/CPF/CPF.csproj
@@ -6,11 +6,8 @@
QQ:761716178
QQ:761716178 跨平台UI框架
CPF(Cross platform UI framework) QQ:761716178 跨平台UI框架 http://cpf.cskin.net/
- 0.9.6.5
+ 0.9.6.6
9.0
- false
- false
- false
Xhm.CPF
Copyright (c) 2020 by http://cpf.cskin.net/
diff --git a/CPF/Controls/Slider.cs b/CPF/Controls/Slider.cs
index 54cfa2e..450cae0 100644
--- a/CPF/Controls/Slider.cs
+++ b/CPF/Controls/Slider.cs
@@ -393,7 +393,7 @@ namespace CPF.Controls
{
// Move Thumb to the Mouse location
- Point pt = e.MouseDevice.GetPosition(Track);
+ Point pt = MouseDevice.GetPosition(Track);
var newValue = Track.ValueFromPoint(pt);
if (FloatUtil.IsFloatFinite(newValue))
{
diff --git a/CPF/Input/MouseDevice.cs b/CPF/Input/MouseDevice.cs
index 4ad0886..058a0af 100644
--- a/CPF/Input/MouseDevice.cs
+++ b/CPF/Input/MouseDevice.cs
@@ -24,7 +24,7 @@ namespace CPF.Input
///
///
///
- public Point GetPosition(UIElement element)
+ public static Point GetPosition(UIElement element)
{
if (element.Root == null)
{
diff --git a/CPF/OpenGL/IGlContext.cs b/CPF/OpenGL/IGlContext.cs
index cebcb75..a280eea 100644
--- a/CPF/OpenGL/IGlContext.cs
+++ b/CPF/OpenGL/IGlContext.cs
@@ -2,6 +2,7 @@
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
+using System.Text;
using CPF.Drawing;
namespace CPF.OpenGL
@@ -32,7 +33,7 @@ namespace CPF.OpenGL
IntPtr GetProcAddress(string name);
}
- public static class OpenglEx
+ public static unsafe class OpenglEx
{
static bool loaded;
public static void Load(IGlContext context)
@@ -332,10 +333,64 @@ namespace CPF.OpenGL
width, height);
}
+ public delegate void GlTexSubImage2D(uint target, int level, int xoffset, int yoffset, int width, int height, uint format, uint type, IntPtr pixels);
+ [GlImport("glTexSubImage2D")]
+ static GlTexSubImage2D texSubImage2D;
+ public static void TexSubImage2D(this IGlContext context, uint target, int level, int xoffset, int yoffset, int width, int height, uint format, uint type, IntPtr pixels)
+ {
+ Load(context);
+ texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+ }
+
+ public delegate void GlBufferData(int target, int size, IntPtr data, int usage);
+ [GlImport("glBufferData")]
+ static GlBufferData bufferData;
+ public static void BufferData(this IGlContext context, int target, int size, IntPtr data, int usage)
+ {
+ Load(context);
+ bufferData(target, size, data, usage);
+ }
+
+ public delegate void GlBindBuffer(int target, int buffer);
+ [GlImport("glBindBuffer")]
+ static GlBindBuffer bindBuffer;
+ public static void BindBuffer(this IGlContext context, int target, int buffer)
+ {
+ Load(context);
+ bindBuffer(target, buffer);
+ }
+
+ public delegate void GlUniform1i(int location, int v0);
+ [GlImport("glUniform1i")]
+ static GlUniform1i uniform1i;
+ public static void Uniform1(this IGlContext context, int location, int v0)
+ {
+ Load(context);
+ uniform1i(location, v0);
+ }
+ public delegate void GlUniform1f(int location, float v0);
+ [GlImport("glUniform1f")]
+ static GlUniform1f uniform1f;
+ public static void Uniform1(this IGlContext context, int location, float v0)
+ {
+ Load(context);
+ uniform1f(location, v0);
+ }
+
+ public delegate void GlBufferSubData(int target, IntPtr offset, int size, IntPtr data);
+ [GlImport("glBufferSubData")]
+ static GlBufferSubData bufferSubData;
+ public static void BufferSubData(this IGlContext context, int target, IntPtr offset, int size, IntPtr data)
+ {
+ Load(context);
+ bufferSubData(target, offset, size, data);
+ }
+
+
public delegate void GlTexParameteri(int target, int name, int value);
[GlImport("glTexParameteri")]
static GlTexParameteri texParameteri;
- public static void TexParameteri(this IGlContext context, int target, int name, int value)
+ public static void TexParameter(this IGlContext context, int target, int name, int value)
{
Load(context);
texParameteri(target, name, value);
@@ -356,10 +411,347 @@ namespace CPF.OpenGL
public delegate int GlCreateShader(int shaderType);
[GlImport("glCreateShader")]
static GlCreateShader createShader;
- public static void CreateShader(this IGlContext context, int shaderType)
+ public static int CreateShader(this IGlContext context, int shaderType)
{
Load(context);
- createShader(shaderType);
+ return createShader(shaderType);
+ }
+
+ public delegate void GlShaderSource(int shader, int count, IntPtr str, int* length);
+ [GlImport("glCreateShader")]
+ static GlShaderSource shaderSource;
+ public static void ShaderSource(this IGlContext context, int shader, string source)
+ {
+ Load(context);
+
+ int length = source.Length;
+ IntPtr intPtr = MarshalStringArrayToPtr(new string[] { source });
+ shaderSource(shader, 1, intPtr, &length);
+ FreeStringArrayPtr(intPtr, 1);
+ }
+
+ static IntPtr MarshalStringArrayToPtr(string[] str_array)
+ {
+ IntPtr intPtr = IntPtr.Zero;
+ if (str_array != null && str_array.Length != 0)
+ {
+ intPtr = Marshal.AllocHGlobal(str_array.Length * IntPtr.Size);
+ if (intPtr == IntPtr.Zero)
+ {
+ throw new OutOfMemoryException();
+ }
+
+ int i = 0;
+ try
+ {
+ for (i = 0; i < str_array.Length; i++)
+ {
+ IntPtr val = MarshalStringToPtr(str_array[i]);
+ Marshal.WriteIntPtr(intPtr, i * IntPtr.Size, val);
+ }
+ }
+ catch (OutOfMemoryException)
+ {
+ for (i--; i >= 0; i--)
+ {
+ Marshal.FreeHGlobal(Marshal.ReadIntPtr(intPtr, i * IntPtr.Size));
+ }
+
+ Marshal.FreeHGlobal(intPtr);
+ throw;
+ }
+ }
+
+ return intPtr;
+ }
+
+ static IntPtr MarshalStringToPtr(string str)
+ {
+ if (string.IsNullOrEmpty(str))
+ {
+ return IntPtr.Zero;
+ }
+
+ int num = Encoding.UTF8.GetMaxByteCount(str.Length) + 1;
+ IntPtr intPtr = Marshal.AllocHGlobal(num);
+ if (intPtr == IntPtr.Zero)
+ {
+ throw new OutOfMemoryException();
+ }
+
+ fixed (char* chars = str)
+ {
+ int bytes = Encoding.UTF8.GetBytes(chars, str.Length, (byte*)(void*)intPtr, num);
+ Marshal.WriteByte(intPtr, bytes, 0);
+ return intPtr;
+ }
+ }
+ static void FreeStringArrayPtr(IntPtr ptr, int length)
+ {
+ for (int i = 0; i < length; i++)
+ {
+ Marshal.FreeHGlobal(Marshal.ReadIntPtr(ptr, i * IntPtr.Size));
+ }
+
+ Marshal.FreeHGlobal(ptr);
+ }
+
+
+ public delegate int GlCreateProgram();
+ [GlImport("glCreateProgram")]
+ static GlCreateProgram createProgram;
+ public static int CreateProgram(this IGlContext context)
+ {
+ Load(context);
+ return createProgram();
+ }
+
+ public delegate void GlAttachShader(int program, int shader);
+ [GlImport("glAttachShader")]
+ static GlAttachShader attachShader;
+ public static void AttachShader(this IGlContext context, int program, int shader)
+ {
+ Load(context);
+ attachShader(program, shader);
+ }
+
+ public delegate void GlDetachShader(int program, int shader);
+ [GlImport("glDetachShader")]
+ static GlDetachShader detachShader;
+ public static void DetachShader(this IGlContext context, int program, int shader)
+ {
+ Load(context);
+ detachShader(program, shader);
+ }
+
+ public delegate void GlGetProgramiv(int program, int pname, int* @params);
+ [GlImport("glGetProgramiv")]
+ static GlGetProgramiv getProgramiv;
+ public static void GetProgram(this IGlContext context, int program, int pname, out int @params)
+ {
+ Load(context);
+ fixed (int* ptr = &@params)
+ {
+ getProgramiv(program, pname, ptr);
+ }
+ }
+
+ public delegate void GlGetProgramInfoLog(uint program, int bufSize, int* length, IntPtr infoLog);
+ [GlImport("glGetProgramInfoLog")]
+ static GlGetProgramInfoLog getProgramInfoLog;
+ public static string GetProgramInfoLog(this IGlContext context, uint program)
+ {
+ Load(context);
+ GetProgram(context, (int)program, GlConsts.GL_INFO_LOG_LENGTH, out var @params);
+ if (@params == 0)
+ {
+ return string.Empty;
+ }
+ int bufSize = @params * 2;
+ IntPtr intPtr = Marshal.AllocHGlobal((IntPtr)(bufSize + 1));
+ getProgramInfoLog(program, bufSize, &@params, intPtr);
+ var infoLog = MarshalPtrToString(intPtr);
+ Marshal.FreeHGlobal(intPtr);
+ return infoLog;
+ }
+
+ public static string GetActiveUniform(this IGlContext context, int program, int uniformIndex, out int size, out int type)
+ {
+ Load(context);
+ GetProgram(context, program, GlConsts.GL_ACTIVE_UNIFORM_MAX_LENGTH, out var @params);
+ GetActiveUniform(program, uniformIndex, (@params == 0) ? 1 : @params, out @params, out size, out type, out var name);
+ return name;
+ }
+
+ public delegate void GlGetActiveUniform(int program, int index, int bufSize, int* length, int* size, int* type, IntPtr name);
+ [GlImport("glGetActiveUniform")]
+ static GlGetActiveUniform getActiveUniform;
+ static void GetActiveUniform(int program, int index, int bufSize, out int length, out int size, out int type, out string name)
+ {
+ fixed (int* ptr = &length)
+ {
+ fixed (int* ptr2 = &size)
+ {
+ fixed (int* ptr3 = &type)
+ {
+ IntPtr intPtr = Marshal.AllocHGlobal((IntPtr)(bufSize + 1));
+ getActiveUniform(program, index, bufSize, ptr, ptr2, ptr3, intPtr);
+ name = MarshalPtrToString(intPtr);
+ Marshal.FreeHGlobal(intPtr);
+ }
+ }
+ }
+ }
+ unsafe static string MarshalPtrToString(IntPtr ptr)
+ {
+ if (ptr == IntPtr.Zero)
+ {
+ throw new ArgumentException("ptr");
+ }
+
+ sbyte* ptr2 = (sbyte*)(void*)ptr;
+ int num = 0;
+ for (; *ptr2 != 0; ptr2++)
+ {
+ num++;
+ }
+
+ return new string((sbyte*)(void*)ptr, 0, num, Encoding.UTF8);
+ }
+
+ public delegate int GlGetUniformLocation(int program, IntPtr name);
+ [GlImport("glGetUniformLocation")]
+ static GlGetUniformLocation getUniformLocation;
+ public static int GetUniformLocation(this IGlContext context, int program, string name)
+ {
+ Load(context);
+ IntPtr intPtr = MarshalStringToPtr(name);
+ var result = getUniformLocation(program, intPtr);
+ FreeStringPtr(intPtr);
+ return result;
+ }
+ static void FreeStringPtr(IntPtr ptr)
+ {
+ Marshal.FreeHGlobal(ptr);
+ }
+
+ public delegate void GlCompileShader(int shader);
+ [GlImport("glCompileShader")]
+ static GlCompileShader compileShader;
+ public static void CompileShader(this IGlContext context, int shader)
+ {
+ Load(context);
+ compileShader(shader);
+ }
+
+ public delegate void GlGetShaderiv(int shader, int pname, int* @params);
+ [GlImport("glGetShaderiv")]
+ static GlGetShaderiv getShaderiv;
+ public static void GetShader(this IGlContext context, int shader, int pname, out int @params)
+ {
+ Load(context);
+ fixed (int* ptr = &@params)
+ {
+ getShaderiv(shader, pname, ptr);
+ }
+ }
+
+ public static string GetShaderInfoLog(this IGlContext context, int shader)
+ {
+ Load(context);
+ GetShaderInfoLog(context, shader, out var info);
+ return info;
+ }
+
+ unsafe static void GetShaderInfoLog(IGlContext context, int shader, out string info)
+ {
+ GetShader(context, shader, GlConsts.GL_INFO_LOG_LENGTH, out var @params);
+ if (@params == 0)
+ {
+ info = string.Empty;
+ }
+ else
+ {
+ GetShaderInfoLog((uint)shader, @params * 2, &@params, out info);
+ }
+ }
+ public delegate void GlGetShaderInfoLog(uint shader, int bufSize, int* length, IntPtr infoLog);
+ [GlImport("glGetShaderInfoLog")]
+ static GlGetShaderInfoLog getShaderInfoLog;
+ static void GetShaderInfoLog(uint shader, int bufSize, [Out] int* length, out string infoLog)
+ {
+ IntPtr intPtr = Marshal.AllocHGlobal((IntPtr)(bufSize + 1));
+ getShaderInfoLog(shader, bufSize, length, intPtr);
+ infoLog = MarshalPtrToString(intPtr);
+ Marshal.FreeHGlobal(intPtr);
+ }
+
+ public delegate void GlLinkProgram(int program);
+ [GlImport("glLinkProgram")]
+ static GlLinkProgram linkProgram;
+ public static void LinkProgram(this IGlContext context, int program)
+ {
+ Load(context);
+ linkProgram(program);
+ }
+
+ public delegate int GlGetAttribLocation(int program, IntPtr name);
+ [GlImport("glGetAttribLocation")]
+ static GlGetAttribLocation getAttribLocation;
+ public static int GetAttribLocation(this IGlContext context, int program, string name)
+ {
+ Load(context);
+ IntPtr intPtr = MarshalStringToPtr(name);
+ int result = getAttribLocation(program, intPtr);
+ FreeStringPtr(intPtr);
+ return result;
+ }
+
+ public delegate void GlUseProgram(int program);
+ [GlImport("glUseProgram")]
+ static GlUseProgram useProgram;
+ public static void UseProgram(this IGlContext context, int program)
+ {
+ Load(context);
+ useProgram(program);
+ }
+
+ public delegate void GlGenVertexArrays(int num, uint* arrays);
+ [GlImport("glGenVertexArrays")]
+ static GlGenVertexArrays genVertexArrays;
+ public static int GenVertexArray(this IGlContext context)
+ {
+ Load(context);
+ int result = default(int);
+ genVertexArrays(1, (uint*)(&result));
+ return result;
+ }
+
+ public delegate void GlBindVertexArray(int array);
+ [GlImport("glBindVertexArray")]
+ static GlBindVertexArray bindVertexArray;
+ public static void BindVertexArray(this IGlContext context, int array)
+ {
+ Load(context);
+ bindVertexArray(array);
+ }
+
+ public delegate void GlGenBuffers(int num, uint* buffer);
+ [GlImport("glGenBuffers")]
+ static GlGenBuffers genBuffers;
+ public static int GenBuffer(this IGlContext context)
+ {
+ Load(context);
+ int result = default(int);
+ genBuffers(1, (uint*)(&result));
+ return result;
+ }
+
+ public delegate void GlEnableVertexAttribArray(int index);
+ [GlImport("glEnableVertexAttribArray")]
+ static GlEnableVertexAttribArray enableVertexAttribArray;
+ public static void EnableVertexAttribArray(this IGlContext context, int index)
+ {
+ Load(context);
+ enableVertexAttribArray(index);
+ }
+
+ public delegate void GlVertexAttribPointer(uint index, int size, int type, bool normalized, int stride, IntPtr pointer);
+ [GlImport("glVertexAttribPointer")]
+ static GlVertexAttribPointer vertexAttribPointer;
+ public static void VertexAttribPointer(this IGlContext context, uint index, int size, int type, bool normalized, int stride, int pointer)
+ {
+ Load(context);
+ vertexAttribPointer(index, size, type, normalized, stride, (IntPtr)pointer);
+ }
+
+ public delegate void GlDrawArrays(int mode, int first, int count);
+ [GlImport("glDrawArrays")]
+ static GlDrawArrays drawArrays;
+ public static void DrawArrays(this IGlContext context, int mode, int first, int count)
+ {
+ Load(context);
+ drawArrays(mode, first, count);
}
public delegate void GlEnable(int what);
diff --git a/CPF/Shapes/Path.cs b/CPF/Shapes/Path.cs
index 6f56527..0cff4af 100644
--- a/CPF/Shapes/Path.cs
+++ b/CPF/Shapes/Path.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
+using CPF.Controls;
using CPF.Drawing;
namespace CPF.Shapes
@@ -28,9 +29,25 @@ namespace CPF.Shapes
{
Data = path;
}
+ ///
+ /// 获取或设置 Stretch 模式,该模式确定内容适应可用空间的方式。
+ ///
+ [Description("获取或设置 Stretch 模式,该模式确定内容适应可用空间的方式。")]
+ [UIPropertyMetadata(Stretch.None, UIPropertyOptions.AffectsMeasure | UIPropertyOptions.AffectsRender)]
+ public Stretch Stretch
+ {
+ get { return GetValue(); }
+ set { SetValue(value); }
+ }
- bool disposeGeometryOnInvalidateGeometry = false;
- protected override bool DisposeGeometryOnInvalidateGeometry => disposeGeometryOnInvalidateGeometry;
+ [PropertyChanged(nameof(Stretch))]
+ void OnStretch(object newValue, object oldValue, PropertyMetadataAttribute propertyTabAttribute)
+ {
+ InvalidateGeometry();
+ }
+
+ //bool disposeGeometryOnInvalidateGeometry = false;
+ //protected override bool DisposeGeometryOnInvalidateGeometry => disposeGeometryOnInvalidateGeometry;
protected override CPF.Drawing.PathGeometry CreateDefiningGeometry()
{
@@ -39,15 +56,78 @@ namespace CPF.Shapes
{
return new Drawing.PathGeometry();
}
- return data;
+ var clone = data.Clone();
+
+ var pathBounds = data.GetBounds();
+
+ Matrix transform;
+
+ if (this.Stretch == Stretch.None)
+ {
+ transform = Matrix.Identity;
+ }
+ else
+ {
+ transform = Matrix.Identity;
+ var calculatedWidth = (float)(this.Width.Value / pathBounds.Width);
+ var calculatedHeight = (float)(this.Height.Value / pathBounds.Height);
+ var widthScale = float.IsNaN(calculatedWidth) ? 1 : calculatedWidth;
+ var heightScale = float.IsNaN(calculatedHeight) ? 1 : calculatedHeight;
+
+ switch (Stretch)
+ {
+ case Stretch.None:
+ break;
+ case Stretch.Fill:
+ transform.Scale(widthScale, heightScale);
+ transform.TranslatePrepend(
+ (float)(-pathBounds.Left),
+ (float)(-pathBounds.Top));
+ break;
+ case Stretch.Uniform:
+ var minScale = Math.Min(widthScale, heightScale);
+ transform.Scale(minScale, minScale);
+ var l = -pathBounds.Left;
+ var t = -pathBounds.Top;
+ transform.TranslatePrepend(l, t);
+ if (!Width.IsAuto && Width.Unit == Unit.Default)
+ {
+ l = (float)((this.Width.Value - minScale * pathBounds.Width) / 2);
+ }
+ else
+ {
+ l = 0;
+ }
+ if (!Height.IsAuto && Width.Unit == Unit.Default)
+ {
+ t = (float)((this.Height.Value - minScale * pathBounds.Height) / 2);
+ }
+ else
+ {
+ t = 0;
+ }
+ transform.Translate(l, t);
+ break;
+ case Stretch.UniformToFill:
+ var maxScale = Math.Max(widthScale, heightScale);
+ transform.Scale(maxScale, maxScale);
+ transform.TranslatePrepend((float)(-pathBounds.Left), (float)(-pathBounds.Top));
+ break;
+ }
+ }
+
+ if (!transform.IsIdentity)
+ clone.Transform(transform);
+
+ return clone;
}
//[PropertyChanged(nameof(Data))]
//void OnData(object newValue, object oldValue, PropertyMetadataAttribute propertyTabAttribute)
//{
- // disposeGeometryOnInvalidateGeometry = true;
- // InvalidateGeometry();
- // disposeGeometryOnInvalidateGeometry = false;
+ // //disposeGeometryOnInvalidateGeometry = true;
+ // //InvalidateGeometry();
+ // //disposeGeometryOnInvalidateGeometry = false;
//}
}
}
diff --git a/CPF/Styling/ResourceManager.cs b/CPF/Styling/ResourceManager.cs
index 4e69a8e..d1661d5 100644
--- a/CPF/Styling/ResourceManager.cs
+++ b/CPF/Styling/ResourceManager.cs
@@ -308,7 +308,7 @@ namespace CPF.Styling
}
catch (Exception e)
{
- Debug.WriteLine("加载网页失败:" + e.Message);
+ Debug.WriteLine("加载网页失败:" + path + " " + e.Message);
}
action(text);
}, null);
@@ -358,7 +358,7 @@ namespace CPF.Styling
}
catch (Exception e)
{
- Debug.WriteLine("读取文本失败:" + e.Message);
+ Debug.WriteLine("读取文本失败:" + path + " " + e.Message);
}
action(text);
return;
@@ -381,7 +381,7 @@ namespace CPF.Styling
}
catch (Exception e)
{
- Debug.WriteLine("加载文本失败:" + e.Message);
+ Debug.WriteLine("加载文本失败:" + path + " " + e.Message);
}
action(text);
return;
@@ -396,19 +396,22 @@ namespace CPF.Styling
///
public static Task GetText(string path)
{
- var task = Task.Factory.StartNew(() =>
+ //var task = Task.Factory.StartNew(() =>
+ //{
+ //var invokeMre = new ManualResetEvent(false);
+ //string result = null;
+ TaskCompletionSource completionSource = new TaskCompletionSource();
+ GetText(path, a =>
{
- var invokeMre = new ManualResetEvent(false);
- string result = null;
- GetText(path, a =>
- {
- result = a;
- invokeMre.Set();
- });
- invokeMre.WaitOne();
- return result;
+ completionSource.SetResult(a);
+ //result = a;
+ //invokeMre.Set();
});
- return task;
+ //invokeMre.WaitOne();
+ //return result;
+ return completionSource.Task;
+ //});
+ //return task;
}
///
/// 读取文件或者内嵌或者网络的图片,弱引用缓存
diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs
index cf295bb..8fd0450 100644
--- a/ConsoleApp1/Program.cs
+++ b/ConsoleApp1/Program.cs
@@ -40,9 +40,9 @@ namespace ConsoleApp1
#else
(OperatingSystemType.Windows, new WindowsPlatform(false), new SkiaDrawingFactory
{
-#if NETCOREAPP3_1_OR_GREATER
- UseGPU=true
-#endif
+ //#if NETCOREAPP3_1_OR_GREATER
+ UseGPU = true
+ //#endif
})
, (OperatingSystemType.OSX, new CPF.Mac.MacPlatform(), new SkiaDrawingFactory { UseGPU = false })
, (OperatingSystemType.Linux, new CPF.Linux.LinuxPlatform(), new SkiaDrawingFactory { UseGPU = true })
diff --git a/ConsoleApp1/VideoPlayTest.cs b/ConsoleApp1/VideoPlayTest.cs
index c93da71..9e69300 100644
--- a/ConsoleApp1/VideoPlayTest.cs
+++ b/ConsoleApp1/VideoPlayTest.cs
@@ -77,7 +77,7 @@ namespace ConsoleApp1
{
MaximizeBox = true,
});
- LoadStyleFile("res://ConsoleApp1.Stylesheet1.css");
+ LoadStyleFile("res://ConsoleApp1/Stylesheet1.css");
//加载样式文件,文件需要设置为内嵌资源
if (!DesignMode)//设计模式下不执行
diff --git a/ConsoleApp1/Window1.cs b/ConsoleApp1/Window1.cs
index 20abfe9..7664abd 100644
--- a/ConsoleApp1/Window1.cs
+++ b/ConsoleApp1/Window1.cs
@@ -1342,7 +1342,8 @@ namespace ConsoleApp1
nameof(Model.Insert)
}
},
- Foreground="#fff"
+ Foreground="#fff",
+ //[nameof(Button.IsMouseOver)]=new TriggerDescribe((nameof(Button.Background),"rgb(236,245,255)"),(nameof(Button.Foreground),"rgb(64,158,255)"))
},
new Button
{
@@ -1386,17 +1387,17 @@ namespace ConsoleApp1
Width="100%",
FontSize=22,
Tag=this,
- Template=(e,c)=>{
- c.Add(new Border
- {
- Background="#f00",
- Height = "100%",
- Width = "100%",
- BorderFill = null,
- Name = "contentPresenter",
- PresenterFor = this
- });
- }
+ //Template=(e,c)=>{
+ // c.Add(new Border
+ // {
+ // Background="#f00",
+ // Height = "100%",
+ // Width = "100%",
+ // BorderFill = null,
+ // Name = "contentPresenter",
+ // PresenterFor = this
+ // });
+ //}
},
Bindings=
{
diff --git a/ConsoleApp1/Window2.cs b/ConsoleApp1/Window2.cs
index 7ad5f38..321c3dd 100644
--- a/ConsoleApp1/Window2.cs
+++ b/ConsoleApp1/Window2.cs
@@ -627,7 +627,7 @@ namespace ConsoleApp1
Value=0.001,
Bindings =
{
-
+
}
},
new Button
@@ -1071,6 +1071,17 @@ namespace ConsoleApp1
Height = 172,
Width = 167,
},
+ new Path
+ {
+ IsAntiAlias = true,
+ Width = 205,
+ Height = 130,
+ MarginLeft = 461,
+ MarginTop = 78,
+ Fill = "#FFFF00",
+ Stretch = Stretch.Uniform,
+ Data="M224.94 813.36c-6.69 0-13.47-1.41-19.96-4.32-19.04-8.52-30.23-27.44-28.53-48.19 0.19-2.37 0.41-4.08 0.51-4.83 1.36-12.07 7.44-54.68 29.59-112.4 14.46-37.62 32.71-72.58 54.26-103.93 27.38-39.65 59.92-73.91 96.77-101.88 9.34-7.73 76.59-61.43 170.59-86.98v-59.34c0-22.02 12.57-41.09 32.82-49.77s42.72-4.63 58.67 10.56l199.82 190.34c15.82 15.07 24.53 35.4 24.53 57.24 0 21.85-8.71 42.17-24.53 57.24L619.65 747.48c-15.95 15.19-38.43 19.24-58.67 10.56-20.24-8.67-32.82-27.74-32.82-49.77v-47.71c-20.67 4.04-40.97 8.95-60.6 14.66-40.38 11.77-77.42 26.68-110.06 44.3-36.29 19.66-64.79 41.98-92.29 72.3-0.9 1.15-2.82 3.56-5.59 6.47-9.38 9.87-21.85 15.07-34.68 15.07z m39.93-21.15c-0.02 0.02-0.04 0.04-0.06 0.07 0.01-0.03 0.03-0.05 0.06-0.07z m-48.27-30.89s-0.15 1.09-0.29 2.81c-0.42 5.17 2.96 7.49 5.01 8.41 1.99 0.89 5.85 1.84 9.3-1.79 1.6-1.69 2.68-3.05 3.26-3.79 0.36-0.46 0.74-0.94 1.26-1.51 30.39-33.6 63.23-59.37 103.33-81.1 35.14-18.97 74.81-34.96 117.91-47.52 28.51-8.29 58.31-14.98 88.58-19.89 5.79-0.94 11.7 0.71 16.16 4.51 4.47 3.8 7.04 9.37 7.04 15.23v71.6c0 8.42 5.99 11.89 8.57 13 2.58 1.1 9.23 3.05 15.33-2.76l199.82-190.34c7.81-7.44 12.12-17.49 12.12-28.28 0-10.79-4.3-20.83-12.12-28.28L592.06 281.27c-6.09-5.81-12.75-3.86-15.33-2.76s-8.57 4.58-8.57 13v74.93c0 9.32-6.44 17.4-15.52 19.49-94.41 21.72-162.4 76.72-169.84 82.92-0.24 0.2-0.48 0.39-0.73 0.58-33.6 25.44-63.32 56.72-88.34 92.96-19.75 28.73-36.54 60.89-49.86 95.57-20.59 53.67-26.03 92.21-27.2 102.74-0.02 0.21-0.04 0.41-0.07 0.62z m0 0z"
+ },
}
}
},
@@ -1969,7 +1980,7 @@ namespace ConsoleApp1
},
new Separator
{
-
+
},
new MenuItem
{
@@ -3456,12 +3467,11 @@ new TabItemTemplate{
{
MaximizeBox = true,
ShadowBlur = 10,
-#if !DesignMode
+ #if !DesignMode
//Effect = effect
#endif
});
-
-//#if !Net4 && !NETCOREAPP3_0
+ //#if !Net4 && !NETCOREAPP3_0
// Children.Add(new GLView
// {
// Height = "30%",