📄 firetheme.java
字号:
/** * */package gr.fire.ui;import gr.fire.core.FireScreen;import gr.fire.core.Theme;import gr.fire.util.Log;import java.io.IOException;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;/* * Fire (Flexible Interface Rendering Engine) is a set of graphics widgets for creating GUIs for j2me applications. * Copyright (C) 2006-2008 Bluevibe (www.bluevibe.net) * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * *//** * @author padeler * */public class FireTheme extends Theme{ /** * The file name of the theme. */ private String themeFile; /** * The name of the backgroung. */ private String themeBg; private Image defaultGradImage,defaultBgImageSrc,defaultLogo,defaultBorder; public FireTheme(String themeFile) throws IOException { this.themeFile=themeFile; loadTheme(); if(defaultLogo!=null && (defaultLogo.getHeight()+2)> decorTop) { decorTop= defaultLogo.getHeight()+2; } } public Image getLogo() { return defaultLogo; } private void loadTheme() throws IOException { defaultGradImage=null; defaultBgImageSrc=null; defaultLogo=null; defaultBorder=null; // first check record store for a custom theme. Image img = Image.createImage(getClass().getResourceAsStream(themeFile)); defaultLogo = Image.createImage(50,15); Graphics g = defaultLogo.getGraphics(); g.drawImage(img,0,0,Graphics.TOP|Graphics.LEFT); int bgrad[]= new int[15]; img.getRGB(bgrad,0,15,35,16,15,1); defaultBorder = Image.createRGBImage(bgrad,1,15,false); int []palete = new int[50]; img.getRGB(palete,0,50,0,16,50,1); int tmp = palete[12]; if((tmp&0x00FFFFFF)==0x00FFFFFF) // show grad { bgrad= new int[50]; img.getRGB(bgrad,0,50,0,15,50,1); defaultGradImage = Image.createRGBImage(bgrad,50,1,true); } else { Log.logInfo("Grad background is not displayed."); defaultGradImage=null; } defaultColor = palete[0]; labelColor = palete[1]; softKeyFgColor = labelColor; scrollColor = palete[2]; linkColor = palete[3]; selectedLinkColor = palete[4]; tmp = palete[5]; selectedLinkBgColor = tmp; rulerColor1 = palete[6]; rulerColor2 = palete[7]; scrollRulerColor1= palete[8];// decorRightColor = scrollRulerColor1; decorBottomColor = scrollRulerColor1; scrollRulerColor2 = palete[9]; scrollRulerColor3 = palete[10]; primaryFillColor = palete[13]; secondaryFillColor = palete[14]; borderColor = palete[15]; pointerColor = palete[16]; secondaryPointerColor = palete[17]; tooltipFgColor = palete[18]; tooltipBgColor = palete[19]; tmp = palete[11]; if((tmp&0x00FFFFFF)==0x00FFFFFF) // show bg image { img = Image.createImage(getClass().getResourceAsStream(themeBg)); defaultBgImageSrc = img; } else { defaultBgImageSrc = null; } /* **** Hack for Motorola phones ********** Thanks to Maxim Blagov */ /* **** Some (if not all) Motorola phones, return "j2me" to getProperty("microedition.platform") */ String platform = null; String prop = System.getProperty("com.mot.carrier.URL"); if (prop != null) { platform = "motorola"; } else { try{ Class.forName("com.motorola.graphics.j3d.Graphics3D"); platform = "motorola"; }catch (Throwable e) {} } if(platform==null) // ok its propably not a motorola phone. { platform=System.getProperty("microedition.platform"); } } public Image getDecorBottomTexture() { return defaultBorder; } public Image getDecorTopTexture() { return defaultBorder; } private void prepareDecorationImages(int width,int height) { int color= defaultColor; Image gradImage = defaultGradImage; Image bg = defaultBgImageSrc; boolean tiled =false; boolean vertical=true; Image img = Image.createImage(width,height); Graphics g = img.getGraphics(); if(gradImage==null) { g.setColor(color); g.fillRect(0,0,width,height); } else { int srcLen = gradImage.getWidth() * gradImage.getHeight(); int srcColorMap[] = new int[srcLen]; gradImage.getRGB(srcColorMap,0,gradImage.getWidth(),0,0,gradImage.getWidth(),gradImage.getHeight()); int len; if(vertical) len = width; else len = height; int []colorMap = new int[len]; for(int i=0;i<len;++i) { colorMap[i] = srcColorMap[(i*srcLen)/len]; } srcColorMap=null; if(vertical) { int i; for(i=0;i<width;++i) { g.setColor(colorMap[i]); g.drawLine(i,0,i,height); } } else { int i; for(i=decorTop;i<len-decorBottom;++i) { g.setColor(colorMap[i-decorTop]); g.drawLine(0,i,width,i); } } } if(defaultBorder!=null) { // draw top border. int len = defaultBorder.getWidth() * defaultBorder.getHeight(); int colorMap[] = new int[len]; defaultBorder.getRGB(colorMap,0,defaultBorder.getWidth(),0,0,defaultBorder.getWidth(),defaultBorder.getHeight()); int i; for(i=0;i<(decorTop-1) && i<len ;++i) { g.setColor(colorMap[i]&0x00FFFFFF); g.drawLine(0,i,width,i); } for(i=len;i<(decorTop-1);++i) { g.drawLine(0,i,width,i); } g.setColor(rulerColor2); g.drawLine(0,decorTop-2,width,decorTop-2); g.setColor(rulerColor1); g.drawLine(0,decorTop-1,width,decorTop-1); // draw bottom border. int p = height-decorBottom+2; for(i=0;i<decorBottom && i<len;++i) { g.setColor(colorMap[i]); g.drawLine(0,p+i,width,p+i); } for(i=len;i<decorBottom;++i) { g.drawLine(0,p+i,width,p+i); } g.setColor(rulerColor2); g.drawLine(0,height-decorBottom+2,width,height-decorBottom+2); g.setColor(rulerColor1); g.drawLine(0,height-decorBottom+1,width,height-decorBottom+1); } if(defaultLogo!=null) { switch (logoPossition) { case FireScreen.LEFT: g.drawImage(defaultLogo,0,0,Graphics.TOP|Graphics.LEFT); break; case FireScreen.CENTER: g.drawImage(defaultLogo,(width/2)-(defaultLogo.getWidth()/2),0,Graphics.TOP|Graphics.LEFT); break; default: // default is RIGHT. g.drawImage(defaultLogo,width-defaultLogo.getWidth(),0,Graphics.TOP|Graphics.LEFT); break; } } // draw bgImage if(bg!=null) { int w = width; int h = height-decorTop-decorBottom; int offx = bg.getWidth()/2,offy=bg.getHeight()/2; int x=0,y=0; if(bgImageHorizontalOrientation==FireScreen.CENTER) x = w/2 - offx; else if(bgImageHorizontalOrientation==FireScreen.LEFT) x=0; else if(bgImageHorizontalOrientation==FireScreen.RIGHT) x=w-offx-offx; if(bgImageVerticalOrientation==FireScreen.CENTER) y = h/2-offy; else if(bgImageVerticalOrientation==FireScreen.TOP) y= 0; else if(bgImageVerticalOrientation==FireScreen.BOTTOM) y=h-offy-offy; g.drawImage(bg,x,y+decorTop,Graphics.TOP|Graphics.LEFT); } } String getThemeFile() { return themeFile; } void setThemeFile(String themeFile) { this.themeFile = themeFile; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -