예제 #1
0
        /// <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.");
            }
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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);
            }
        }