示例#1
0
        private static CroppedBitmap LoadImage(WndDrawData wndDrawData, int drawDataIndex, ContentManager contentManager)
        {
            var image = wndDrawData.Items[drawDataIndex].Image;

            if (string.IsNullOrEmpty(image) || image == "NoImage")
            {
                return(null);
            }

            var mappedImage = contentManager.IniDataContext.MappedImages.FirstOrDefault(x => x.Name == image);

            if (mappedImage == null)
            {
                return(null);
            }

            var texture = contentManager.Load <Texture>(
                new[]
            {
                Path.Combine(@"Data\English\Art\Textures", mappedImage.Texture),
                Path.Combine(@"Art\Textures", mappedImage.Texture)
            },
                new TextureLoadOptions {
                GenerateMipMaps = false
            });

            var textureRect = mappedImage.Coords.ToRectangle();

            return(new CroppedBitmap(texture, textureRect));
        }
        private WndWindowStateConfiguration(
            WndWindowDefinition wndWindow,
            ColorRgba textColor,
            ColorRgba textBorderColor,
            WndDrawData wndDrawData,
            StretchableImage image,
            GraphicsDevice graphicsDevice,
            GraphicsDevice2D graphicsDevice2D)
        {
            TextColor       = textColor;
            TextBorderColor = textBorderColor;

            if (!wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
            {
                BackgroundColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].Color);
            }

            if (BackgroundColor != null || wndWindow.Status.HasFlag(WndWindowStatusFlags.Border))
            {
                BorderColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].BorderColor);
            }

            if (image != null)
            {
                ImageTexture = AddDisposable(image.RenderToTexture(graphicsDevice, graphicsDevice2D));
            }
        }
示例#3
0
        public Texture GetStretchableTexture(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var cacheKey = new WndImageKey
            {
                DestinationSize = wndWindow.ScreenRect.ToRectangle().Size,
                LeftImage       = wndDrawData.Items[leftIndex].Image,
                MiddleImage     = wndDrawData.Items[middleIndex].Image,
                RightImage      = wndDrawData.Items[rightIndex].Image
            };

            if (!_cache.TryGetValue(cacheKey, out var result))
            {
                var leftMappedImageTexture   = GetMappedImage(cacheKey.LeftImage);
                var middleMappedImageTexture = GetMappedImage(cacheKey.MiddleImage);
                var rightMappedImageTexture  = GetMappedImage(cacheKey.RightImage);

                if (leftMappedImageTexture != null &&
                    middleMappedImageTexture != null &&
                    rightMappedImageTexture != null)
                {
                    result = CreateTexture(
                        cacheKey,
                        drawingContext =>
                    {
                        var leftWidth  = leftMappedImageTexture.SourceRect.Width;
                        var rightWidth = rightMappedImageTexture.SourceRect.Width;
                        var leftRect   = new Rectangle(0, 0, leftWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            leftMappedImageTexture.Texture,
                            leftMappedImageTexture.SourceRect,
                            leftRect);
                        var middleRect = new Rectangle(leftRect.Right, 0, cacheKey.DestinationSize.Width - leftWidth - rightWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            middleMappedImageTexture.Texture,
                            middleMappedImageTexture.SourceRect,
                            middleRect);
                        var rightRect = new Rectangle(middleRect.Right, 0, rightWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            rightMappedImageTexture.Texture,
                            rightMappedImageTexture.SourceRect,
                            rightRect);
                    });
                }
                else
                {
                    result = null;
                }

                _cache.Add(cacheKey, result);
            }

            return(result);
        }
示例#4
0
        public static StretchableImage CreateNormalImage(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            ContentManager contentManager)
        {
            var image = LoadImage(wndDrawData, 0, contentManager);

            return(image != null
                ? CreateNormal(wndWindow.ScreenRect.ToRectangle().Width, image)
                : null);
        }
示例#5
0
        private WndWindowStateConfiguration(
            WndWindowDefinition wndWindow,
            ColorRgba textColor,
            ColorRgba textBorderColor,
            WndDrawData wndDrawData)
        {
            TextColor       = textColor;
            TextBorderColor = textBorderColor;

            if (!wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
            {
                BackgroundColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].Color);
            }

            if (BackgroundColor != null || wndWindow.Status.HasFlag(WndWindowStatusFlags.Border))
            {
                BorderColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].BorderColor);
            }
        }
示例#6
0
        public Image CreateNormalImage(
            WndDrawData wndDrawData,
            int index)
        {
            var leftImage          = wndDrawData.Items[index].Image;
            var mappedImageTexture = GetMappedImage(leftImage);

            if (mappedImageTexture != null)
            {
                return(new Image(mappedImageTexture.SourceRect.Size, size =>
                {
                    var cacheKey = new WndImageKey
                    {
                        DestinationSize = size,
                        LeftImage = leftImage
                    };

                    if (!_cache.TryGetValue(cacheKey, out var result))
                    {
                        result = CreateTexture(
                            cacheKey,
                            spriteBatch =>
                        {
                            spriteBatch.DrawImage(
                                mappedImageTexture.Texture,
                                mappedImageTexture.SourceRect,
                                new Rectangle(Point2D.Zero, size).ToRectangleF(),
                                ColorRgbaF.White);
                        });

                        _cache.Add(cacheKey, result);
                    }

                    return result;
                }));
            }
            else
            {
                return(null);
            }
        }
示例#7
0
        public static StretchableImage CreatePushButtonImage(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            ContentManager contentManager,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var imageLeft   = LoadImage(wndDrawData, leftIndex, contentManager);
            var imageMiddle = LoadImage(wndDrawData, middleIndex, contentManager);
            var imageRight  = LoadImage(wndDrawData, rightIndex, contentManager);

            if (imageLeft != null && imageMiddle != null && imageRight != null)
            {
                return(CreateStretchable(wndWindow.ScreenRect.ToRectangle().Width, imageLeft, imageMiddle, imageRight));
            }

            //if (imageLeft != null)
            //    return StretchableImage.CreateNormal(wndWindow.ScreenRect.ToRectangle().Width, imageLeft);

            return(null);
        }
示例#8
0
        public Image CreateFromStretchableWndDrawData(WndDrawData wndDrawData, int leftIndex, int middleIndex, int rightIndex)
        {
            var leftImage   = wndDrawData.Items[leftIndex].Image?.Value;
            var middleImage = wndDrawData.Items[middleIndex].Image?.Value;
            var rightImage  = wndDrawData.Items[rightIndex].Image?.Value;

            if (leftImage != null &&
                middleImage != null &&
                rightImage != null)
            {
                return(new Image(
                           $"{leftImage.Name}:{middleImage.Name}:{rightImage.Name}",
                           new StretchableMappedImageSource(leftImage, middleImage, rightImage, _textureCache)));
            }
            else if (leftImage != null)
            {
                return(CreateFromMappedImageReference(wndDrawData.Items[leftIndex].Image));
            }
            else
            {
                return(null);
            }
        }
示例#9
0
        public Texture GetNormalTexture(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            int index)
        {
            var cacheKey = new WndImageKey
            {
                DestinationSize = wndWindow.ScreenRect.ToRectangle().Size,
                LeftImage       = wndDrawData.Items[index].Image
            };

            if (!_cache.TryGetValue(cacheKey, out var result))
            {
                var mappedImageTexture = GetMappedImage(cacheKey.LeftImage);

                if (mappedImageTexture != null)
                {
                    result = CreateTexture(
                        cacheKey,
                        drawingContext =>
                    {
                        drawingContext.DrawImage(
                            mappedImageTexture.Texture,
                            mappedImageTexture.SourceRect,
                            new Rectangle(Point2D.Zero, cacheKey.DestinationSize));
                    });
                }
                else
                {
                    result = null;
                }

                _cache.Add(cacheKey, result);
            }

            return(result);
        }
示例#10
0
        public Image CreateStretchableImage(
            WndDrawData wndDrawData,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var leftImage   = wndDrawData.Items[leftIndex].Image;
            var middleImage = wndDrawData.Items[middleIndex].Image;
            var rightImage  = wndDrawData.Items[rightIndex].Image;

            var leftMappedImageTexture   = GetMappedImage(leftImage);
            var middleMappedImageTexture = GetMappedImage(middleImage);
            var rightMappedImageTexture  = GetMappedImage(rightImage);

            if (leftMappedImageTexture != null &&
                middleMappedImageTexture != null &&
                rightMappedImageTexture != null)
            {
                var naturalSize = new Size(
                    leftMappedImageTexture.SourceRect.Width + middleMappedImageTexture.SourceRect.Width + rightMappedImageTexture.SourceRect.Width,
                    leftMappedImageTexture.SourceRect.Height);

                return(new Image(naturalSize, size =>
                {
                    var cacheKey = new WndImageKey
                    {
                        DestinationSize = size,
                        LeftImage = leftImage,
                        MiddleImage = middleImage,
                        RightImage = rightImage
                    };

                    if (!_cache.TryGetValue(cacheKey, out var result))
                    {
                        result = CreateTexture(
                            cacheKey,
                            spriteBatch =>
                        {
                            var leftWidth = leftMappedImageTexture.SourceRect.Width;
                            var rightWidth = rightMappedImageTexture.SourceRect.Width;
                            var leftRect = new Rectangle(0, 0, leftWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                leftMappedImageTexture.Texture,
                                leftMappedImageTexture.SourceRect,
                                leftRect.ToRectangleF(),
                                ColorRgbaF.White);
                            var middleRect = new Rectangle(leftRect.Right, 0, cacheKey.DestinationSize.Width - leftWidth - rightWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                middleMappedImageTexture.Texture,
                                middleMappedImageTexture.SourceRect,
                                middleRect.ToRectangleF(),
                                ColorRgbaF.White);
                            var rightRect = new Rectangle(middleRect.Right, 0, rightWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                rightMappedImageTexture.Texture,
                                rightMappedImageTexture.SourceRect,
                                rightRect.ToRectangleF(),
                                ColorRgbaF.White);
                        });

                        _cache.Add(cacheKey, result);
                    }

                    return result;
                }));
            }
            else
            {
                return(null);
            }
        }
示例#11
0
 public Image CreateNormalImage(
     WndDrawData wndDrawData,
     int index)
 {
     return(CreateNormalImage(wndDrawData.Items[index].Image));
 }
示例#12
0
 public Image CreateFromWndDrawData(WndDrawData wndDrawData, int index)
 {
     return(CreateFromMappedImageReference(wndDrawData.Items[index].Image));
 }
示例#13
0
        public Image CreateStretchableImage(
            WndDrawData wndDrawData,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var leftImage   = wndDrawData.Items[leftIndex].Image;
            var middleImage = wndDrawData.Items[middleIndex].Image;
            var rightImage  = wndDrawData.Items[rightIndex].Image;

            var leftMappedImageTexture   = GetMappedImage(leftImage);
            var middleMappedImageTexture = GetMappedImage(middleImage);
            var rightMappedImageTexture  = GetMappedImage(rightImage);

            if (leftMappedImageTexture != null &&
                middleMappedImageTexture != null &&
                rightMappedImageTexture != null)
            {
                var naturalSize = new Size(
                    leftMappedImageTexture.Coords.Width + middleMappedImageTexture.Coords.Width + rightMappedImageTexture.Coords.Width,
                    leftMappedImageTexture.Coords.Height);

                bool requiresFlip = !_contentManager.GraphicsDevice.IsUvOriginTopLeft;

                return(new Image("WndImage", naturalSize, size =>
                {
                    var cacheKey = new WndImageKey
                    {
                        DestinationSize = size,
                        LeftImage = leftImage,
                        MiddleImage = middleImage,
                        RightImage = rightImage
                    };

                    if (!_cache.TryGetValue(cacheKey, out var result))
                    {
                        result = CreateTexture(
                            cacheKey,
                            spriteBatch =>
                        {
                            var leftWidth = leftMappedImageTexture.Coords.Width;
                            var rightWidth = rightMappedImageTexture.Coords.Width;
                            var leftRect = new Rectangle(0, 0, leftWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                leftMappedImageTexture.Texture.Value,
                                leftMappedImageTexture.Coords,
                                leftRect.ToRectangleF(),
                                ColorRgbaF.White,
                                requiresFlip);
                            var middleRect = new Rectangle(leftRect.Right, 0, cacheKey.DestinationSize.Width - leftWidth - rightWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                middleMappedImageTexture.Texture.Value,
                                middleMappedImageTexture.Coords,
                                middleRect.ToRectangleF(),
                                ColorRgbaF.White,
                                requiresFlip);
                            var rightRect = new Rectangle(middleRect.Right, 0, rightWidth, cacheKey.DestinationSize.Height);
                            spriteBatch.DrawImage(
                                rightMappedImageTexture.Texture.Value,
                                rightMappedImageTexture.Coords,
                                rightRect.ToRectangleF(),
                                ColorRgbaF.White,
                                requiresFlip);
                        });

                        _cache.Add(cacheKey, result);
                    }

                    return result;
                }));
            }
            else
            {
                return(null);
            }
        }