📄 linestyle.java
字号:
/** LumaQQ - Java QQ Client** Copyright (C) 2004 luma <stubma@163.com>** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program 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 General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/package edu.tsinghua.lumaqq.widgets.rich;import org.eclipse.jface.resource.JFaceResources;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.FontData;import org.eclipse.swt.widgets.Display;/** * 行的样式,为了简化编程,这里规定style只应用于一行 * * @author luma */public class LineStyle { public static final LineStyle INSTANCE = new LineStyle(); public Color foreground; public Color background; // MAY BE SWT.NORMAL OR SWT.BOLD public int fontStyle = SWT.NORMAL; // 缺省字体大小 public int fontSize = 9; // 字体名称 public String fontName = "宋体"; // 为了照顾不同平台之间的字体不一致问题,在这里得到缺省字体大小,对于 // 小于系统缺省字体大小的,一律设置为缺省大小 private static int DEFAULT_FONT_SIZE; static { DEFAULT_FONT_SIZE = JFaceResources.getDefaultFont().getFontData()[0].getHeight(); } /** * 创建一个缺省的行样式 */ public LineStyle() { fontStyle = SWT.NORMAL; fontSize = (9 < DEFAULT_FONT_SIZE) ? DEFAULT_FONT_SIZE : 9; fontName = "宋体"; } /** * 创建一个新的行样式 * <p> * * @param foreground * 行前景色 * @param background * 行背景色 */ public LineStyle(Color foreground, Color background) { this(); this.foreground = foreground; this.background = background; } /** * 创建一个新的行样式 * <p> * * @param foreground * 行前景色 * @param background * 行背景色 * @param fontName * 字体名称 * @param fontStyle * 字体样式 * @param fontSize * 字体大小 */ public LineStyle(Color foreground, Color background, String fontName, int fontStyle, int fontSize) { this.foreground = foreground; this.background = background; this.fontName = fontName; this.fontStyle = fontStyle; this.fontSize = (fontSize < DEFAULT_FONT_SIZE) ? DEFAULT_FONT_SIZE : fontSize; } /** * Compare the specified object to this StyleRange and answer if the two are * equal. The object must be an instance of StyleRange and have the same * field values. * <p> * * @param object * the object to compare with this object * @return true if the objects are equal, false otherwise */ public boolean equals(Object object) { LineStyle style; if (object == this) return true; if (object instanceof LineStyle) style = (LineStyle) object; else return false; if (this.foreground != null) { if (!this.foreground.equals(style.foreground)) return false; } else if (style.foreground != null) return false; if (this.background != null) { if (!this.background.equals(style.background)) return false; } else if (style.background != null) return false; if(!this.fontName.equals(style.fontName)) return false; if (this.fontStyle != style.fontStyle) return false; if(this.fontSize != style.fontSize) return false; return true; } /** * Returns an integer hash code for the receiver. Objects which are equal * answer the same value for this method. * <p> * * @return the receiver's hash */ public int hashCode() { int code = 0; if (foreground != null) code += foreground.hashCode(); if (background != null) code += background.hashCode(); code += fontName.hashCode(); code += fontSize; return code + fontStyle; } /** * Returns whether or not the receiver is unstyled (i.e., does not have any * style attributes specified). * <p> * * @return true if the receiver is unstyled, false otherwise. */ public boolean isUnstyled() { if (this.foreground != null) return false; if (this.background != null) return false; if (this.fontStyle != SWT.NORMAL) return false; if(!this.fontName.equals("宋体")) return false; if(this.fontSize != 9) return false; return true; } /** * Compares the specified object to this StyleRange and answer if the two * are similar. The object must be an instance of StyleRange and have the * same field values for except for start and length. * <p> * * @param object * the object to compare with this object * @return true if the objects are similar, false otherwise */ public boolean similarTo(LineStyle style) { if (this.foreground != null) { if (!this.foreground.equals(style.foreground)) return false; } else if (style.foreground != null) return false; if (this.background != null) { if (!this.background.equals(style.background)) return false; } else if (style.background != null) return false; if(!this.fontName.equals(style.fontName)) return false; if (this.fontStyle != style.fontStyle) return false; if(this.fontSize != style.fontSize) return false; return true; } /** * Answers a new StyleRange with the same values as this StyleRange. * <p> * * @return a shallow copy of this StyleRange */ public Object clone() { Color fg = (foreground == null) ? null : new Color(Display.getCurrent(), foreground.getRGB()); Color bg = (background == null) ? null : new Color(Display.getCurrent(), foreground.getRGB()); LineStyle style = new LineStyle(fg, bg, fontName, fontStyle, fontSize); return style; } /** * @return * 字体字符串 */ public String getFontString() { StringBuffer buf = new StringBuffer(); buf.append(fontName + '_'); buf.append(fontSize); if((fontStyle & SWT.BOLD) != 0) buf.append("_bold"); if((fontStyle & SWT.ITALIC) != 0) buf.append("_italic"); return buf.toString(); } /** * @return * 字体 */ public FontData[] createFontData() { FontData fd = new FontData(); fd.setName(fontName); fd.setHeight(fontSize); fd.setStyle(fontStyle); return new FontData[] { fd }; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -