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)); } }
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); }
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); }
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); } }
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); } }
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); }
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); } }
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); }
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); } }
public Image CreateNormalImage( WndDrawData wndDrawData, int index) { return(CreateNormalImage(wndDrawData.Items[index].Image)); }
public Image CreateFromWndDrawData(WndDrawData wndDrawData, int index) { return(CreateFromMappedImageReference(wndDrawData.Items[index].Image)); }
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); } }