public PictureLayout CopyLayout(int index) { watched = false; PictureLayout pictureLayout = Layouts[index]; PictureLayout newPictureLayout = null; if (pictureLayout is StandardLayout standardLayout) { newPictureLayout = new StandardLayout(standardLayout) { Name = string.Format("{0} 复制", standardLayout.Name) }; } else if (pictureLayout is PureLayout pureLayout) { newPictureLayout = new PureLayout(pureLayout) { Name = string.Format("{0} 复制", pureLayout.Name) }; } Layouts.Insert(index, newPictureLayout); watched = true; UndoManager.AddUndoData(new CMD_DeleteLayout(newPictureLayout, this, index)); return(newPictureLayout); }
public static IAsyncOperation <StandardLayout> LoadFromFileAsync(CanvasCase canvasCase, StorageFile file) { var task1 = Task <StandardLayout> .Run(async() => { var stream = await file.OpenReadAsync(); DataReader reader = new DataReader(stream); await reader.LoadAsync((uint)stream.Size); reader.ReadInt32(); //header Guid readedGuid = reader.ReadGuid(); int count = reader.ReadInt32(); byte[] oData = new byte[count * 8]; byte[] bData = new byte[count * 1024]; reader.ReadBytes(oData); reader.ReadBytes(bData); TiledTexture tTex = new TiledTexture(canvasCase.DeviceResources, bData, oData); StandardLayout loadedLayout = new StandardLayout(tTex); loadedLayout.PaintingTexture = canvasCase.PaintingTexture; loadedLayout.PaintingTextureTemp = canvasCase.PaintingTextureTemp; loadedLayout.saved = true; loadedLayout.guid = readedGuid; return(loadedLayout); }); return(task1.AsAsyncOperation()); }
public void SetActivatedLayout(StandardLayout layout) { ActivatedLayout?.Deactivate(); ActivatedLayout = layout; ActivatedLayout.Activate(); PaintAgent.CurrentLayout = ActivatedLayout; PaintingTexture.CopyTo(PaintingTextureBackup); ActivatedLayoutChanged?.Invoke(); }
static byte[] header = { 0x44, 0x43, 0x4c, 0x46 };//DCLF public static async Task SaveToFileAsync(this StandardLayout layout, StorageFile file) { var stream = await file.OpenAsync(FileAccessMode.ReadWrite); int count; TiledTexture tex0 = null; if (layout is StandardLayout standardLayout) { if (standardLayout.activated) { tex0 = new TiledTexture(standardLayout.PaintingTexture); count = tex0.tilesCount; } else if (standardLayout.tiledTexture != null) { tex0 = new TiledTexture(standardLayout.tiledTexture); count = tex0.tilesCount; } else { count = 0; } DataWriter dataWriter = new DataWriter(stream); dataWriter.WriteBytes(header); dataWriter.WriteGuid(layout.guid); dataWriter.WriteInt32(count); if (count != 0) { byte[] oData = new byte[count * 8]; byte[] bData = new byte[count * 1024]; tex0.BlocksData.GetData(bData); tex0.BlocksOffsetsData.GetData(oData); if (!standardLayout.activated) { tex0.Dispose(); //此时为临时创建的TiledTexture } dataWriter.WriteBytes(oData); dataWriter.WriteBytes(bData); } await dataWriter.StoreAsync(); layout.saved = true; dataWriter.Dispose(); stream.Dispose(); } }
public StandardLayout NewStandardLayout(int insertIndex, int RenderBufferNum) { StandardLayout standardLayout = new StandardLayout(DeviceResources) { PaintingTexture = PaintingTexture, PaintingTextureTemp = PaintingTextureTemp, BlendMode = DefaultBlendMode, RenderBufferNum = RenderBufferNum, guid = System.Guid.NewGuid(), Name = string.Format("图层 {0}", Layouts.Count + 1) }; watched = false; Layouts.Insert(insertIndex, standardLayout); watched = true; UndoManager.AddUndoData(new CMD_DeleteLayout(standardLayout, this, insertIndex)); return(standardLayout); }
private async Task LoadLayouts() { IReadOnlyList <StorageFile> layoutFiles = await layoutsFolder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName); foreach (StorageFile layoutFile in layoutFiles) { if (!".dclf".Equals(layoutFile.FileType, StringComparison.CurrentCultureIgnoreCase)) { continue; } StandardLayout standardLayout = await DirectCanvasLayoutFormat.LoadFromFileAsync(canvasCase, layoutFile); layoutFileMap[standardLayout.guid] = layoutFile; canvasCase.LayoutsMap.Add(standardLayout.guid, standardLayout); } StorageFile layoutSettingsFile = await CaseFolder.GetFileAsync("Layouts.xml"); Stream settingsStream = (await layoutSettingsFile.OpenAsync(FileAccessMode.ReadWrite)).AsStream(); XmlReader xmlReader = XmlReader.Create(settingsStream, xmlReaderSettings); canvasCase.watched = false; while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { Guid guid; switch (xmlReader.Name) { case "Layout": guid = Guid.Parse(xmlReader.GetAttribute("Guid")); StandardLayout standardLayout = (StandardLayout)canvasCase.LayoutsMap[guid]; LoadLayoutInfo(xmlReader, standardLayout); canvasCase.Layouts.Add(standardLayout); break; case "PureLayout": guid = Guid.Parse(xmlReader.GetAttribute("Guid")); if (guid == Guid.Empty) { guid = Guid.NewGuid(); } PureLayout pureLayout = new PureLayout(canvasCase.DeviceResources) { guid = guid }; LoadLayoutInfo(xmlReader, pureLayout); string colorString = xmlReader.GetAttribute("Color"); if (!string.IsNullOrEmpty(colorString)) { string[] colorG = colorString.Split(" "); float.TryParse(colorG[0], out float cR); float.TryParse(colorG[1], out float cG); float.TryParse(colorG[2], out float cB); float.TryParse(colorG[3], out float cA); pureLayout.Color = new System.Numerics.Vector4(cR, cG, cB, cA); } canvasCase.LayoutsMap.Add(guid, pureLayout); canvasCase.Layouts.Add(pureLayout); break; } } } canvasCase.watched = true; settingsStream.Dispose(); }
public CMD_TileReplace(StandardLayout host, TiledTexture undoData, CanvasCase canvasCase) { Host = host; Data = undoData; this.canvasCase = canvasCase; }