Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
 public void SetActivatedLayout(StandardLayout layout)
 {
     ActivatedLayout?.Deactivate();
     ActivatedLayout = layout;
     ActivatedLayout.Activate();
     PaintAgent.CurrentLayout = ActivatedLayout;
     PaintingTexture.CopyTo(PaintingTextureBackup);
     ActivatedLayoutChanged?.Invoke();
 }
Пример #4
0
        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();
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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();
        }
Пример #7
0
 public CMD_TileReplace(StandardLayout host, TiledTexture undoData, CanvasCase canvasCase)
 {
     Host            = host;
     Data            = undoData;
     this.canvasCase = canvasCase;
 }