001package armyc2.c2sd.renderer;
002
003import android.graphics.Bitmap;
004import android.graphics.Canvas;
005import android.graphics.Paint;
006import android.graphics.Bitmap.Config;
007import android.graphics.Paint.Align;
008import android.graphics.Point;
009import android.graphics.PointF;
010import android.graphics.Rect;
011import android.graphics.RectF;
012import android.graphics.Typeface;
013import armyc2.c2sd.graphics2d.Point2D;
014import armyc2.c2sd.renderer.utilities.Color;
015import armyc2.c2sd.renderer.utilities.ImageInfo;
016import armyc2.c2sd.renderer.utilities.SymbolUtilities;
017import armyc2.c2sd.renderer.utilities.TacticalGraphicLookup;
018
019public class TacticalGraphicIconRenderer {
020        
021        //font size of 60 produces a 40x40 pixel image.
022    private static int fontSizeForTGIcons = 60;
023    private static Typeface _TGMP = null;
024        private static final Object _TGFontMutex = new Object();
025
026        public static ImageInfo getIcon(String symbolID, int size, Color color, int symStd, int outlineWidth, Color outlineColor)
027        {
028                ImageInfo ii = null;
029                
030                
031                
032        if(armyc2.c2sd.renderer.utilities.SymbolUtilities.isWeather(symbolID)==true)
033        {
034            color = SymbolUtilities.getFillColorOfWeather(symbolID);
035            if(color == null)
036                color = SymbolUtilities.getLineColorOfWeather(symbolID);
037        }//*/
038        else if(color == null)
039        {
040            color = SymbolUtilities.getLineColorOfAffiliation(symbolID);
041        }
042                
043
044        int charSymbolIndex = TacticalGraphicLookup.getInstance().getCharCodeFromSymbol(symbolID, symStd);
045                
046        if(charSymbolIndex > 0)
047        {
048                float fontSize = fontSizeForTGIcons;
049                
050                //font size of 60 produces a 40x40 pixel image.
051            float ratio = size/40.0f;
052                
053            Point centerPoint = new Point(size/2, size/2);
054
055            
056          //resize to pixels
057            if(ratio > 0)
058            {
059                fontSize = fontSize * ratio;
060            }
061
062            //fontSize = (fontSize/96 * 72);
063            
064            Paint fillPaint = null;
065            fillPaint = new Paint();
066                        fillPaint.setStyle(Paint.Style.FILL);
067                        fillPaint.setColor(color.toARGB());
068                        fillPaint.setTextSize(fontSize);
069                        fillPaint.setAntiAlias(true);
070                        fillPaint.setTextAlign(Align.CENTER);
071                        fillPaint.setTypeface(_TGMP);
072            
073          //Draw glyphs to bitmap
074                        Bitmap bmp = Bitmap.createBitmap((int)(size), (int)(size), Config.ARGB_8888);
075                        Canvas canvas = new Canvas(bmp);
076                        
077                        String strSymbol = null;
078                        if(charSymbolIndex >0)
079                                strSymbol = String.valueOf((char)charSymbolIndex);
080                
081                        
082
083                        if(strSymbol != null)
084            {
085                synchronized(_TGFontMutex)
086                {
087                    if(outlineWidth > 0)
088                    {
089                        Paint tempFill = new Paint();
090                        tempFill.setStyle(Paint.Style.FILL_AND_STROKE);
091                        tempFill.setStrokeWidth(outlineWidth);
092                        tempFill.setColor(outlineColor.toARGB());
093                        tempFill.setTextSize(fontSize);
094                        tempFill.setAntiAlias(true);
095                        tempFill.setTextAlign(Align.CENTER);
096                        tempFill.setTypeface(_TGMP);
097
098                        canvas.drawText(strSymbol, centerPoint.x, centerPoint.y, tempFill);
099                    }
100                    canvas.drawText(strSymbol, centerPoint.x, centerPoint.y, fillPaint);
101                }
102            }
103
104
105                        ii = new ImageInfo(bmp, centerPoint, new Rect(0, 0, size, size));
106        }
107        
108                return ii;
109        }
110        
111        public static void setTGTypeFace(Typeface tgtf)
112        {
113                _TGMP = tgtf;
114        }
115}