public override void RenderText(Font font, Point position, string text) { //Debug.Print(String.Format("RenderText {0}", font.FaceName)); System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } var key = new Tuple <string, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { // not cached - create text renderer Debug.Print(String.Format("RenderText: caching \"{0}\", {1}", text, font.FaceName)); Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); Brush brush = new SolidBrush(DrawColor); // todo: cache tr.DrawString(text, sysFont, brush, Point.Empty); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); brush.Dispose(); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); } }
public override void RenderText(Font font, Point position, string text) { Flush(); System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2 || sysFont.OriginalFontName != font.FaceName) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } var key = new Tuple <String, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { // not cached - create text renderer Size size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.Width, size.Height, this); tr.DrawString(text, sysFont, Brushes.White, Point.Zero, m_StringFormat); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); } }
public override void RenderText(Font font, Point position, string text, bool shouldCache) { //Debug.Print(String.Format("RenderText {0}", font.FaceName)); // The DrawString(...) below will bind a new texture // so make sure everything is rendered! Flush(); System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } if (!shouldCache) { Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); tr.DrawString(text, sysFont, Brushes.White, Point.Empty, m_StringFormat); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); notCachingRenderers.Add(tr); return; } var key = new Tuple <String, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { // not cached - create text renderer Debug.Print(String.Format("RenderText: caching \"{0}\", {1}", text, font.FaceName)); Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); tr.DrawString(text, sysFont, Brushes.White, Point.Empty, m_StringFormat); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); } }
public override void RenderText(Font font, Point position, string text) { //Debug.Print(String.Format("RenderText {0}", font.FaceName)); // The DrawString(...) below will bind a new texture // so make sure everything is rendered! Flush(); System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } var key = new Tuple<String, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { // not cached - create text renderer Debug.Print(String.Format("RenderText: caching \"{0}\", {1}", text, font.FaceName)); Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); tr.DrawString(text, sysFont, Brushes.White, Point.Empty, m_StringFormat); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); } }
public override void RenderText(Font font, Point position, string text) { //Debug.Print(String.Format("RenderText {0}", font.FaceName)); System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } var key = new Tuple<string, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { // not cached - create text renderer Debug.Print(String.Format("RenderText: caching \"{0}\", {1}", text, font.FaceName)); Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); Brush brush = new SolidBrush(DrawColor); // todo: cache tr.DrawString(text, sysFont, brush, Point.Empty); // renders string on the texture DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); brush.Dispose(); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); } }
/// <summary> /// Renders text using specified font. /// </summary> /// <param name="font">Font to use.</param> /// <param name="position">Top-left corner of the text.</param> /// <param name="text">Text to render.</param> public override void RenderText(Gwen.Font font, Point position, string text) { if (!IgnoreTextDrawing) { lock (AllowTextDrawing) { System.Drawing.Font sysFont = font.RendererData as System.Drawing.Font; if (sysFont == null || Math.Abs(font.RealSize - font.Size * Scale) > 2) { FreeFont(font); LoadFont(font); sysFont = font.RendererData as System.Drawing.Font; } var key = new Tuple<String, Font>(text, font); if (!m_StringCache.ContainsKey(key)) { Point size = MeasureText(font, text); TextRenderer tr = new TextRenderer(size.X, size.Y, this); tr.DrawString(text, sysFont, new SolidBrush(DrawColor), Point.Empty, m_StringFormat); PrivateRendererContext.SetBlendFunc(RendererBlendingFactorSrc.DstAlpha, RendererBlendingFactorDest.One); DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); PrivateRendererContext.SetBlendFunc(RendererBlendingFactorSrc.SrcAlpha, RendererBlendingFactorDest.OneMinusSrcAlpha); m_StringCache[key] = tr; } else { TextRenderer tr = m_StringCache[key]; PrivateRendererContext.SetBlendFunc(RendererBlendingFactorSrc.DstAlpha, RendererBlendingFactorDest.One); DrawTexturedRect(tr.Texture, new Rectangle(position.X, position.Y, tr.Texture.Width, tr.Texture.Height)); PrivateRendererContext.SetBlendFunc(RendererBlendingFactorSrc.SrcAlpha, RendererBlendingFactorDest.OneMinusSrcAlpha); } } } }