feat(渲染编辑): 优化渲染编辑完善资源保存
build.yaml / build (push) Successful in 45s

This commit is contained in:
xiaoqidun committed 2026-10-05 12:49:51 +08:00
1 parent 5dcd7a4e8d
commit 6c14eef1ee
39 files changed
+1926 -420

No files matched your search

-39
View File
@@ -912,45 +912,6 @@ func (e *Editor) editorImage(id string) (image.Point, error) {
return size, nil
}
// cloneEditorData 深复制编辑快照,未导出的排版及原文来源保持不可变共享
// 入参: value 原值
// 返回: T 独立副本
func cloneEditorData[T any](value T) T {
return cloneEditorValue(reflect.ValueOf(value)).Interface().(T)
}
// cloneEditorValue 复制结构体中的可变指针和切片
// 入参: value 原值
// 返回: reflect.Value 独立副本
func cloneEditorValue(value reflect.Value) reflect.Value {
switch value.Kind() {
case reflect.Pointer:
if !value.IsNil() {
result := reflect.New(value.Type().Elem())
result.Elem().Set(cloneEditorValue(value.Elem()))
return result
}
case reflect.Slice:
if !value.IsNil() {
result := reflect.MakeSlice(value.Type(), value.Len(), value.Len())
for i := range value.Len() {
result.Index(i).Set(cloneEditorValue(value.Index(i)))
}
return result
}
case reflect.Struct:
result := reflect.New(value.Type()).Elem()
result.Set(value)
for i := range value.NumField() {
if result.Field(i).CanSet() && value.Type().Field(i).IsExported() {
result.Field(i).Set(cloneEditorValue(value.Field(i)))
}
}
return result
}
return value
}
// editorObjectXML 编码可编辑对象,包含独立命名空间声明
// 入参: object 对象
// 返回: []byte XML片段, error 错误信息