/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.ui.style;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.TextStyle;
import org.xmind.gef.GEF;
import org.xmind.ui.resources.ColorUtils;
import org.xmind.ui.resources.FontUtils;
public class TextStyleData {
public String name;
public int height;
public boolean bold;
public boolean italic;
public RGB color;
public boolean underline;
public boolean strikeout;
public int align;
public int textCase;
public TextStyleData() {
this(JFaceResources.getDefaultFont().getFontData()[0]);
}
public TextStyleData(FontData fd) {
this.name = fd.getName();
this.height = fd.getHeight();
this.bold = (fd.getStyle() & SWT.BOLD) != 0;
this.italic = (fd.getStyle() & SWT.ITALIC) != 0;
this.color = new RGB(0, 0, 0);
this.underline = false;
this.strikeout = false;
this.align = PositionConstants.LEFT;
this.textCase = GEF.MANUAL;
}
public TextStyleData(TextStyleData data) {
this.name = data.name;
this.height = data.height;
this.bold = data.bold;
this.italic = data.italic;
this.color = data.color;
this.underline = data.underline;
this.strikeout = data.strikeout;
this.align = data.align;
this.textCase = data.textCase;
}
public FontData createFontData() {
int style = SWT.NORMAL;
if (bold)
style |= SWT.BOLD;
if (italic)
style |= SWT.ITALIC;
return new FontData(name, height, style);
}
public Font createFont() {
return FontUtils.getFont(createFontData());
}
public TextStyle createTextStyle() {
TextStyle textStyle = new TextStyle(createFont(),
ColorUtils.getColor(color), null);
textStyle.underline = underline;
textStyle.strikeout = strikeout;
return textStyle;
}
public boolean equals(Object obj) {
if (obj == this)
return true;
if (obj == null || !(obj instanceof TextStyleData))
return false;
TextStyleData that = (TextStyleData) obj;
return (this.name == that.name || (this.name != null && this.name
.equals(that.name)))
&& this.height == that.height
&& this.bold == that.bold
&& this.italic == that.italic
&& (this.color == that.color || (this.color != null && this.color
.equals(that.color)))
&& this.underline == that.underline
&& this.strikeout == that.strikeout
&& this.align == that.align && this.textCase == that.textCase;
}
public int hashCode() {
int c = height;
if (bold)
c ^= 1;
if (italic)
c ^= 1 << 1;
if (underline)
c ^= 1 << 2;
if (strikeout)
c ^= 1 << 3;
if (name != null)
c ^= name.hashCode();
if (color != null)
c ^= color.hashCode();
c ^= align;
c ^= textCase;
return c;
}
public String toString() {
StringBuilder sb = new StringBuilder(30);
sb.append("{name="); //$NON-NLS-1$
sb.append(name);
sb.append(",height="); //$NON-NLS-1$
sb.append(height);
sb.append(",color="); //$NON-NLS-1$
sb.append(color);
sb.append(","); //$NON-NLS-1$
if (bold)
sb.append("bold"); //$NON-NLS-1$
if (italic)
sb.append("italic"); //$NON-NLS-1$
if (underline)
sb.append("underline"); //$NON-NLS-1$
if (strikeout)
sb.append("strikeout"); //$NON-NLS-1$
sb.append(",align="); //$NON-NLS-1$
sb.append(align);
sb.append(textCase);
sb.append("}"); //$NON-NLS-1$
return sb.toString();
}
}