Mega Code Archive

 
Categories / Android / UI
 

Image String Drawer

//package com.akjava.lib.android.opengl; import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.opengles.GL11; import javax.microedition.khronos.opengles.GL11Ext; public class ImageStringDrawer {   private int textureId;   private int baseSize = 16;// ??   public float fontMargin = 0.5f;// ???   public static final float[] color_white = { 1, 1, 1, 1 };   public static final float[] color_black = { 0, 0, 0, 1 };   public static final float[] color_red = { 1, 0, 0, 1 };   public static final String FPS_LABEL = "FPS:";   public static final char[] numbers = { '0', '1', '2', '3', '4', '5', '6',       '7', '8', '9' };   /*    * ???? ???????????????    */   public ImageStringDrawer(int textureId) {     this.textureId = textureId;     getImageFontRec_return = new int[] { 0, 0, baseSize, baseSize };   }   public ImageStringDrawer(int textureId, int baseSize) {     this.textureId = textureId;     this.baseSize = baseSize;     getImageFontRec_return = new int[] { 0, 0, baseSize, baseSize * 2 };   }   int dx;   int dy;   char ch;   int i;   public int getStringWidth(StringBuffer text, final int fontSize,       final float marginPersent) {     return (int) (text.length() * fontSize * marginPersent) + fontSize / 2;   }   public synchronized void drawString(final GL10 gl, final StringBuffer text,       final int startX, final int startY, final int fontSize,       final float marginPersent) {     dy = startY;     dx = startX;     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);     for (i = 0; i < text.length(); i++) {       ch = text.charAt(i);       // gl.glDisable(GL10.GL_BLEND);       ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,           GL11Ext.GL_TEXTURE_CROP_RECT_OES, getImageFontRec(ch), 0);       ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize * 2);       dx += fontSize * marginPersent;// *marginPersent;       // gl.glEnable(GL10.GL_BLEND);     }   }   public synchronized void drawFpsString(final GL10 gl, final int fps,       final int startX, final int startY, final int fontSize,       final float marginPersent) {     dy = startY;     dx = startX;     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);     for (i = 0; i < FPS_LABEL.length(); i++) {       ch = FPS_LABEL.charAt(i);       ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,           GL11Ext.GL_TEXTURE_CROP_RECT_OES, getImageFontRec(ch), 0);       ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize * 2);       dx += fontSize * marginPersent;     }     ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,         GL11Ext.GL_TEXTURE_CROP_RECT_OES,         getImageFontRec(numbers[fps / 100]), 0);     ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize * 2);     dx += fontSize * marginPersent;     ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,         GL11Ext.GL_TEXTURE_CROP_RECT_OES,         getImageFontRec(numbers[fps % 100 / 10]), 0);     ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize * 2);     dx += fontSize * marginPersent;     ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,         GL11Ext.GL_TEXTURE_CROP_RECT_OES,         getImageFontRec(numbers[fps % 10]), 0);     ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize * 2);   }   public synchronized void drawString(final GL10 gl, final StringBuffer text,       final int startX, final int startY, final int fontSize) {     drawString(gl, text, startX, startY, fontSize, fontMargin);   }   public synchronized void drawShadowString(final GL10 gl,       final StringBuffer text, final int startX, final int startY,       final int fontSize, float[] shadowColor, float[] textColor,       int shadowX, int shadowY) {     gl.glColor4f(shadowColor[0], shadowColor[1], shadowColor[2],         shadowColor[3]);     drawString(gl, text, startX + shadowX, startY - shadowY, fontSize,         fontMargin);// Y is mirroed     gl.glColor4f(textColor[0], textColor[1], textColor[2], textColor[3]);     drawString(gl, text, startX, startY, fontSize, fontMargin);// Y is                                   // mirroed   }   /*    * ????????????    */   public synchronized void drawBorderString(final GL10 gl,       final StringBuffer text, final int startX, final int startY,       final int fontSize, float marginPersent, float[] borderColor,       float[] textColor, int border) {     dy = startY;     dx = startX;     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);     for (i = 0; i < text.length(); i++) {       ch = text.charAt(i);       gl.glColor4f(borderColor[0], borderColor[1], borderColor[2],           borderColor[3]);       ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,           GL11Ext.GL_TEXTURE_CROP_RECT_OES, getImageFontRec(ch), 0);       ((GL11Ext) gl).glDrawTexiOES(dx, dy, 0, fontSize, fontSize);       gl.glColor4f(textColor[0], textColor[1], textColor[2], textColor[3]);       ((GL11Ext) gl).glDrawTexiOES(dx + border / 2, dy + border / 2, 0,           fontSize - border, fontSize - border);       dx += fontSize * marginPersent;// *marginPersent;     }   }   int getImageFontRec_x;   int getImageFontRec_y;   int getImageFontRec_return[];   public synchronized int[] getImageFontRec(char ch) {     getImageFontRec_x = ((int) ch) % 16;     getImageFontRec_y = 7 - ((int) ch) / 16;// image size     // Log.i("my","dx:"+dx+",dy="+dy);     getImageFontRec_return[0] = baseSize * getImageFontRec_x;     getImageFontRec_return[1] = baseSize * getImageFontRec_y * 2;     return getImageFontRec_return;   } }