public Drawing GetDetailedDrawing(SymbolID symbolID, GameColor color) { if (m_symbolSet.Symbols.Contains(symbolID) == false) symbolID = SymbolID.Unknown; var symbol = m_symbolSet.Symbols[symbolID]; var gfx = DecideGfx(symbol); if (gfx is VectorGfxBase) { var g = (VectorGfxBase)gfx; var drawing = GetVectorGfx(g); if (color != GameColor.None) { drawing = drawing.Clone(); TileSetHelpers.ColorizeDrawing(drawing, color.ToWindowsColor()); } drawing.Freeze(); return drawing; } else if (gfx is BitmapGfx) { var g = (BitmapGfx)gfx; var bmp = GetBitmapGfx(g, 64); if (color != GameColor.None) bmp = TileSetHelpers.ColorizeBitmap(bmp, color.ToWindowsColor()); var drawing = TileSetHelpers.BitmapToDrawing(bmp); drawing.Freeze(); return drawing; } else { throw new Exception(); } }
public Drawing GetDrawing(string drawingName, GameColor color) { Dictionary<GameColor, Drawing> map; Drawing drawing; if (!m_drawingMap.TryGetValue(drawingName, out map)) return null; if (!map.TryGetValue(color, out drawing)) { drawing = m_drawingMap[drawingName][GameColor.None].Clone(); ColorizeDrawing(drawing, color.ToWindowsColor()); drawing.Freeze(); map[color] = drawing; } return drawing; }
static Drawing DrawCharacter(char ch, Typeface typeFace, double fontSize, GameColor color, GameColor bgColor, bool drawOutline, double outlineThickness, bool reverse) { Color c; if (color == GameColor.None) { c = Colors.White; } else { c = color.ToWindowsColor(); } DrawingGroup dGroup = new DrawingGroup(); var brush = new SolidColorBrush(c); var bgBrush = bgColor != GameColor.None ? new SolidColorBrush(bgColor.ToWindowsColor()) : Brushes.Transparent; using (DrawingContext dc = dGroup.Open()) { var formattedText = new FormattedText( ch.ToString(), System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, typeFace, fontSize, Brushes.Black); var geometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0)); var pen = drawOutline ? new Pen(Brushes.Black, outlineThickness) : null; var boundingGeometry = new RectangleGeometry(pen != null ? geometry.GetRenderBounds(pen) : geometry.Bounds); if (reverse) { geometry = new CombinedGeometry(GeometryCombineMode.Exclude, boundingGeometry, geometry); } dc.DrawGeometry(bgBrush, null, boundingGeometry); dc.DrawGeometry(brush, pen, geometry); } return(dGroup); }
public Drawing GetDrawing(string drawingName, GameColor color) { Dictionary <GameColor, Drawing> map; Drawing drawing; if (!m_drawingMap.TryGetValue(drawingName, out map)) { return(null); } if (!map.TryGetValue(color, out drawing)) { drawing = m_drawingMap[drawingName][GameColor.None].Clone(); ColorizeDrawing(drawing, color.ToWindowsColor()); drawing.Freeze(); map[color] = drawing; } return(drawing); }
public BitmapSource GetTileBitmap(SymbolID symbolID, GameColor color, int size) { if (m_symbolSet.Symbols.Contains(symbolID) == false) symbolID = SymbolID.Unknown; var symbol = m_symbolSet.Symbols[symbolID]; var gfx = DecideTileGfx(symbol, size); if (gfx is VectorGfxBase) { var g = (VectorGfxBase)gfx; var drawing = GetVectorGfx(g); var bmp = TileSetHelpers.DrawingToBitmap(drawing, size); if (color != GameColor.None) bmp = TileSetHelpers.ColorizeBitmap(bmp, color.ToWindowsColor()); return bmp; } else if (gfx is BitmapGfx) { var g = (BitmapGfx)gfx; var bmp = GetBitmapGfx(g, size); if (color != GameColor.None) bmp = TileSetHelpers.ColorizeBitmap(bmp, color.ToWindowsColor()); return bmp; } else { throw new Exception(); } }
public static Drawing DrawCharacter(char ch, Typeface typeFace, double fontSize, GameColor color, GameColor bgColor, bool drawOutline, double outlineThickness, bool reverse, CharRenderMode mode) { Color c; if (color == GameColor.None) c = Colors.White; else c = color.ToWindowsColor(); DrawingGroup dGroup = new DrawingGroup(); var brush = new SolidColorBrush(c); var bgBrush = bgColor != GameColor.None ? new SolidColorBrush(bgColor.ToWindowsColor()) : Brushes.Transparent; using (DrawingContext dc = dGroup.Open()) { var formattedText = new FormattedText( ch.ToString(), System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, typeFace, fontSize, Brushes.Black); var geometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0)); var pen = drawOutline ? new Pen(Brushes.Black, outlineThickness) : null; var bounds = pen != null ? geometry.GetRenderBounds(pen) : geometry.Bounds; Rect bb; switch (mode) { case CharRenderMode.Full: { double size = formattedText.Height; bb = new Rect(bounds.X + bounds.Width / 2 - size / 2, 0, size, size); } break; case CharRenderMode.Caps: { double size = typeFace.CapsHeight * fontSize; bb = new Rect(bounds.X + bounds.Width / 2 - size / 2, formattedText.Baseline - size, size, size); } break; case CharRenderMode.Free: bb = bounds; break; default: throw new Exception(); } if (reverse) geometry = new CombinedGeometry(GeometryCombineMode.Exclude, new RectangleGeometry(bb), geometry); //dc.DrawRectangle(bgBrush, new Pen(Brushes.Red, 1), bb); dc.DrawRectangle(bgBrush, null, bb); dc.DrawGeometry(brush, pen, geometry); /* var dl = new Action<double>((y) => dc.DrawLine(new Pen(Brushes.Red, 1), new Point(bb.Left, y), new Point(bb.Right, y))); dl(0); dl(formattedText.Baseline); dl(fontSize); dl(formattedText.Height); dl(formattedText.Baseline - typeFace.CapsHeight * fontSize); */ } return dGroup; }
static Drawing DrawCharacter(char ch, Typeface typeFace, double fontSize, GameColor color, GameColor bgColor, bool drawOutline, double outlineThickness, bool reverse) { Color c; if (color == GameColor.None) c = Colors.White; else c = color.ToWindowsColor(); DrawingGroup dGroup = new DrawingGroup(); var brush = new SolidColorBrush(c); var bgBrush = bgColor != GameColor.None ? new SolidColorBrush(bgColor.ToWindowsColor()) : Brushes.Transparent; using (DrawingContext dc = dGroup.Open()) { var formattedText = new FormattedText( ch.ToString(), System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, typeFace, fontSize, Brushes.Black); var geometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0)); var pen = drawOutline ? new Pen(Brushes.Black, outlineThickness) : null; var boundingGeometry = new RectangleGeometry(pen != null ? geometry.GetRenderBounds(pen) : geometry.Bounds); if (reverse) geometry = new CombinedGeometry(GeometryCombineMode.Exclude, boundingGeometry, geometry); dc.DrawGeometry(bgBrush, null, boundingGeometry); dc.DrawGeometry(brush, pen, geometry); } return dGroup; }