public static void DrawText(this Graphics g, DrawTextInformationGDI DrawData) { if (DrawData.Format == null) { DrawData.Format = new StringFormat(); } //May 15th 2019- we now draw the string manually. None of this DrawString stuff. var characterpositions = MeasureCharacterSizes(g, DrawData.DrawFont, DrawData.Text); char[] drawcharacters = DrawData.Text.ToCharArray(); g.PageUnit = GraphicsUnit.Pixel; for (int i = 0; i < drawcharacters.Length; i++) { //get the dimensions of this character char drawcharacter = drawcharacters[i]; PointF DrawPosition = new PointF(characterpositions[i].Location.X + DrawData.Position.X, characterpositions[i].Location.Y + DrawData.Position.Y); DrawData.CharacterHandler.DrawCharacter(g, drawcharacter, DrawData, DrawPosition, characterpositions[i].Size, i, drawcharacters.Length, 1); } //Draw the foreground for (int i = 0; i < drawcharacters.Length; i++) { //get the dimensions of this character char drawcharacter = drawcharacters[i]; PointF DrawPosition = new PointF(characterpositions[i].Location.X + DrawData.Position.X, characterpositions[i].Location.Y + DrawData.Position.Y); DrawData.CharacterHandler.DrawCharacter(g, drawcharacter, DrawData, DrawPosition, characterpositions[i].Size, i, drawcharacters.Length, 2); } //g.DrawString(DrawData.Text, DrawData.DrawFont, DrawData.ShadowBrush,DrawData.Position.X+DrawData.ShadowOffset.X, DrawData.Position.Y+DrawData.ShadowOffset.Y,DrawData.Format); }
public void Render(IStateOwner pOwner, Graphics pRenderTarget, MenuStateTextMenuItem Source, MenuStateMenuItemGDIPlusDrawData Element) { var useFont = GetScaledFont(pOwner, Source.FontFace, Source.FontSize); var MeasureText = pRenderTarget.MeasureString(Source.Text, useFont); PointF DrawPosition = GetDrawPosition(Element.Bounds, MeasureText, Source.TextAlignment.GetGDIPlusAlignment()); Brush BackBrush = new SolidBrush(Source.BackColor); if (Element.DrawState == MenuStateMenuItem.StateMenuItemState.State_Selected) { BackBrush = Brushes.DarkBlue; } pRenderTarget.FillRectangle(BackBrush, Element.Bounds); StringFormat central = new StringFormat(); central.Alignment = StringAlignment.Near; central.LineAlignment = StringAlignment.Near; Brush ForeBrush = new SolidBrush(Source.ForeColor); if (Element.DrawState == MenuStateMenuItem.StateMenuItemState.State_Selected) { ForeBrush = Brushes.Aqua; } Brush ShadowBrush = new SolidBrush(Source.ShadowColor); var useStyle = new DrawTextInformationGDI() { Text = Source.Text, BackgroundBrush = Brushes.Transparent, DrawFont = useFont, ForegroundBrush = ForeBrush, ShadowBrush = ShadowBrush, Position = DrawPosition, ShadowOffset = new PointF(5f, 5f), Format = central }; if (Element.DrawState == MenuStateMenuItem.StateMenuItemState.State_Selected) { useStyle.CharacterHandler.SetPositionCalculator(new RotatingPositionCharacterPositionCalculatorGDI()); } pRenderTarget.DrawText(useStyle); // TetrisGame.DrawText(Target, useFont, Text, ForeBrush, ShadowBrush, DrawPosition.X, DrawPosition.Y, 5f, 5f, central); //Cheating... // Source.Draw(pOwner,pRenderTarget,Element.Bounds,Element.DrawState); }