Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
            }
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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;
        }