static bool CultureCheck1(CreateBrushHelper createBrushHelper, string culture) { if (culture == null) { culture = ""; } if (createBrushHelper.Culture == null) { createBrushHelper.Culture = culture; } bool isCurrentCulture = appUsedCultureName.Equals(culture, StringComparison.CurrentCultureIgnoreCase); bool inCurrentCulture = appUsedCultureName.Equals(createBrushHelper.Culture, StringComparison.CurrentCultureIgnoreCase); bool isSubstitute = culture.Equals(createBrushHelper.Culture, StringComparison.CurrentCultureIgnoreCase); if (isCurrentCulture || isSubstitute || (string.IsNullOrEmpty(culture) && !inCurrentCulture)) { createBrushHelper.Culture = culture; return(true); } else { return(false); } }
public static IAsyncOperation <Brush[]> LoadFromFileAsync(DeviceResources deviceResources, StorageFile file) { return(Task.Run(async() => { Stream stream = (await file.OpenAsync(FileAccessMode.Read)).AsStream(); XmlReaderSettings setting1 = new XmlReaderSettings(); setting1.IgnoreComments = true; XmlReader xmlReader = XmlReader.Create(stream, setting1); Dictionary <string, string> code = new Dictionary <string, string>(); List <CreateBrushHelper> createBrushHelpers = new List <CreateBrushHelper>(); List <DCParameter> dcBrushParameters = new List <DCParameter>(); bool isSelectionBrush = false; for (int i = 0; i < c_parameterCount; i++) { dcBrushParameters.Add(new DCParameter() { Name = string.Format("参数{0}", i + 1) }); } while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { switch (xmlReader.Name) { case "Brush": bool.TryParse(xmlReader.GetAttribute("SelectionBrush"), out isSelectionBrush); break; case "Code": string stage = xmlReader.GetAttribute("Stage"); code[stage] = xmlReader.ReadElementContentAsString(); break; case "Parameter": int.TryParse(xmlReader.GetAttribute("Index"), out int index); dcBrushParameters[index].Type = xmlReader.GetAttribute("Type"); if (string.IsNullOrEmpty(dcBrushParameters[index].Type)) { dcBrushParameters[index].Type = "TextBox"; } if (int.TryParse(xmlReader.GetAttribute("MaxValue"), out int maxValue)) { dcBrushParameters[index].MaxValue = maxValue; } else { dcBrushParameters[index].MaxValue = int.MaxValue; } if (int.TryParse(xmlReader.GetAttribute("MinValue"), out int minValue)) { dcBrushParameters[index].MinValue = minValue; } else { dcBrushParameters[index].MinValue = int.MinValue; } while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { switch (xmlReader.Name) { case "Name": if (CultureCheck2(dcBrushParameters[index], xmlReader.GetAttribute("Culture"))) { dcBrushParameters[index].Name = xmlReader.ReadElementContentAsString(); } break; case "Description": if (CultureCheck2(dcBrushParameters[index], xmlReader.GetAttribute("Culture"))) { dcBrushParameters[index].Description = xmlReader.ReadElementContentAsString(); } break; } } else if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.Name == "Parameter") { break; } } break; case "ParametersGroup": CreateBrushHelper createBrushHelper = new CreateBrushHelper(); createBrushHelper.ImagePath = xmlReader.GetAttribute("Image"); for (int i = 0; i < c_refTextureCount; i++) { createBrushHelper.refTexturePath[i] = xmlReader.GetAttribute(string.Format("RefTexture{0}", i + 1)); } if (!float.TryParse(xmlReader.GetAttribute("DefaultSize"), out createBrushHelper.BrushSize)) { createBrushHelper.BrushSize = 40.0f; } for (int i = 0; i < c_parameterCount; i++) { int.TryParse(xmlReader.GetAttribute(string.Format("Parameter{0}", i + 1)), out createBrushHelper.parametersValue[i]); } while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { switch (xmlReader.Name) { case "Name": if (CultureCheck1(createBrushHelper, xmlReader.GetAttribute("Culture"))) { createBrushHelper.Name = xmlReader.ReadElementContentAsString(); } continue; case "Description": if (CultureCheck1(createBrushHelper, xmlReader.GetAttribute("Culture"))) { createBrushHelper.Description = xmlReader.ReadElementContentAsString(); } continue; } xmlReader.Skip(); } else if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.Name == "ParametersGroup") { break; } } createBrushHelpers.Add(createBrushHelper); break; } } } string x; if (!isSelectionBrush) { x = componentCode1; } else { x = componentCode2; } byte[] code1 = Encoding.UTF8.GetBytes(x.Replace("#define codehere", code["Begin"])); byte[] code2 = Encoding.UTF8.GetBytes(x.Replace("#define codehere", code["Doing"])); byte[] code3 = Encoding.UTF8.GetBytes(x.Replace("#define codehere", code["End"])); var t21 = ComputeShader.CompileAndCreate(deviceResources, code1); var t22 = ComputeShader.CompileAndCreate(deviceResources, code2); var t23 = ComputeShader.CompileAndCreate(deviceResources, code3); Brush[] brushes = new Brush[createBrushHelpers.Count]; for (int i = 0; i < createBrushHelpers.Count; i++) { Brush brush = new Brush(t21, t22, t23, isSelectionBrush); brush.Name = createBrushHelpers[i].Name; brush.Description = createBrushHelpers[i].Description; brush.ImagePath = createBrushHelpers[i].ImagePath; brush.Size = createBrushHelpers[i].BrushSize; for (int j = 0; j < c_refTextureCount; j++) { brush.RefTexturePath[j] = createBrushHelpers[i].refTexturePath[j]; } for (int j = 0; j < c_parameterCount; j++) { brush.Parameters[j].Name = dcBrushParameters[j].Name; brush.Parameters[j].Description = dcBrushParameters[j].Description; brush.Parameters[j].Type = dcBrushParameters[j].Type; brush.Parameters[j].MaxValue = dcBrushParameters[j].MaxValue; brush.Parameters[j].MinValue = dcBrushParameters[j].MinValue; brush.Parameters[j].Value = createBrushHelpers[i].parametersValue[j]; } brushes[i] = brush; } return brushes; }).AsAsyncOperation()); }