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}