예제 #1
0
        private DXFont GetFont(System.Drawing.Font font)
        {
            DXFont result = null;

            string fontKey = string.Format("{0}{1}{2}", font.Name, font.Size, font.Style);
            if (!_fontCache.TryGetValue(fontKey, out result)) {
                result = new DXFont(_device, _deviceContext);
                result.Initialize(font.Name, font.Size, font.Style, true);
                _fontCache[fontKey] = result;
            }

            return result;
        }
        public void DrawString(int X, int Y, string text, int R, int G, int B, int A, DXFont F)
        {
            Color4 blendFactor = new Color4(1.0f);
            Color4 backupBlendFactor;
            int backupMask;
            var backupBlendState = _deviceContext.OutputMerger.GetBlendState(out backupBlendFactor, out backupMask);
            _deviceContext.OutputMerger.SetBlendState(_transparentBS, blendFactor);

            BeginBatch(F.GetFontSheetSRV());

            int length = text.Length;

            int posX = X;
            int posY = Y;

            Color4 color;
            Vector4 Vec = new Vector4(R > 0 ? (float)(R / 255.0f) : 0.0f, G > 0 ? (float)(G / 255.0f) : 0.0f, B > 0 ? (float)(B / 255.0f) : 0.0f, A > 0 ? (float)(A / 255.0f) : 0.0f);
            color = new Color4(Vec);

            for (int i = 0; i < length; ++i)
            {
                char character = text[i];

                if (character == ' ')
                    posX += F.GetSpaceWidth();
                else if (character == '\n')
                {
                    posX = X;
                    posY += F.GetCharHeight();
                }
                else
                {
                    Rectangle charRect = F.GetCharRect(character);

                    int width = charRect.Right - charRect.Left;
                    int height = charRect.Bottom - charRect.Top;

                    Draw(new Rectangle(posX, posY, posX + width, posY + height), charRect, color);

                    posX += width + 1;
                }
            }

            EndBatch();
            _deviceContext.OutputMerger.SetBlendState(backupBlendState, backupBlendFactor, backupMask);
        }