/// <summary> /// Create a new <see cref="InputNumberField"/>. /// Creates sub elements and sets default values. /// </summary> /// <param name="parent"></param> public InputNumberField(IPositionedElement parent) : base(parent) { if (UIContentManager.TryGetInstance(out UIContentManager contentManager)) { _background = new RelativeTexture(this, new SpriteDefinition(contentManager.GetColorTexture(Color.White), new Rectangle(Point.Zero, new Point(1, 1)))) { AnchorPosition = AnchorPosition.TopLeft, RelativePosition = Point.Zero, }; _renderText = new RelativeText(this, contentManager.GetFont("DebugFont")) { AnchorPosition = AnchorPosition.TopLeft, RelativePosition = new Point(1, 1) }; _textSb = new StringBuilder(); Visible = true; } else { throw new InvalidOperationException("UI content manager does not exist."); } }
/// <summary> /// Create a new <see cref="Scrollbar"/>. /// </summary> /// /// <exception cref="Exception" /> public Scrollbar(IPositionedElement parent) : base(parent) { // Before the scrollbar items can be created, the required resources need to be created. Texture2D scrollbarSheet; if (UIContentManager.TryGetInstance(out UIContentManager manager)) { scrollbarSheet = manager.GetTexture("UI\\Scrollbar"); } else { throw new Exception("Could not retrieve scrollbar spritesheet."); } // Sprite definitions are created for the different sprites used by scrollbar items. Rectangle upButtonRect = new Rectangle(0, 0, 15, 15); SpriteDefinition upButtonDef = new SpriteDefinition(scrollbarSheet, upButtonRect); Rectangle downButtonRect = new Rectangle(15, 0, 15, 15); SpriteDefinition downButtonDef = new SpriteDefinition(scrollbarSheet, downButtonRect); Rectangle handleRect = new Rectangle(0, 15, 15, 20); SpriteDefinition handleDef = new SpriteDefinition(scrollbarSheet, handleRect); Rectangle backgroundRect = new Rectangle(15, 15, 15, 35); SpriteDefinition backgroundDef = new SpriteDefinition(scrollbarSheet, backgroundRect); // Finally, the items themselves can be created. _upButton = new Button(this, upButtonDef) { RelativePosition = Point.Zero, Size = new Point(15, 15), Focused = true, Visible = true }; _downButton = new Button(this, downButtonDef) { AnchorPosition = AnchorPosition.BottomLeft, RelativePosition = new Point(0, -15), Size = new Point(15, 15), Focused = true, Visible = true }; _handle = new RelativeTexture(this, handleDef) { Size = new Point(15, 20) }; _background = new RelativeTexture(this, backgroundDef) { RelativePosition = new Point(0, 15) }; _downButton.Hold += _downButton_Hold; _upButton.Hold += _upButton_Hold; ScrollPosition = 0F; }
/// <summary> /// Render the civ panel. /// </summary> /// /// <param name="spriteBatch"> /// The spritebatch used for drawing. /// </param> public void Render(SpriteBatch spriteBatch) { if (Visible) { int textHeight = _civText.Size.Y; if (textHeight > Size.Y) { _scrollbar.Focused = true; _scrollbar.Render(spriteBatch); } else { _scrollbar.Focused = false; } spriteBatch.End(); if (_clipState == null) { _clipState = new RasterizerState() { ScissorTestEnable = true }; } RasterizerState prevRasterizerState = spriteBatch.GraphicsDevice.RasterizerState; spriteBatch.GraphicsDevice.ScissorRectangle = Bounds; spriteBatch.Begin(SpriteSortMode.BackToFront, rasterizerState: _clipState); foreach (var civTexturePair in _civTexturePairs) { RelativeTexture civTexture = civTexturePair.Value.Texture; if (_checkBounds.Contains(civTexture.Bounds)) { civTexture.Render(spriteBatch); } } _civText.Render(spriteBatch); spriteBatch.End(); // The spritebatch is started again to continue the previous flow of drawing. spriteBatch.Begin(SpriteSortMode.BackToFront, rasterizerState: prevRasterizerState); } }