/*******************************************************************************
* Copyright (c) 2007, 2009 David Green and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
/**
*
*/
package org.eclipse.mylyn.internal.wikitext.ui.viewer;
import org.eclipse.swt.graphics.RGB;
/**
* @author David Green
*/
public class FontState {
public static final int STATE_BOLD = 0x1;
public static final int STATE_ITALIC = 0x2;
public static final int STATE_STRIKETHROUGH = 0x4;
public static final int STATE_UNDERLINE = 0x8;
public static final int STATE_SUPERSCRIPT = 0x10;
public static final int STATE_SUBSCRIPT = 0x20;
public static final int STATE_FIXED_WIDTH = 0x40;
/**
* RGB foreground color
*/
public RGB foreground;
/**
* RGB background color
*/
public RGB background;
/**
* State bits
*/
public int state;
/**
* Font size multiplier
*/
public float sizeFactor = 1.0f;
public FontState() {
}
public FontState(FontState copy) {
this.foreground = copy.foreground;
this.background = copy.background;
this.state = copy.state;
this.sizeFactor = copy.sizeFactor;
}
public boolean isBold() {
return isSet(STATE_BOLD);
}
public boolean isItalic() {
return isSet(STATE_ITALIC);
}
public boolean isStrikethrough() {
return isSet(STATE_STRIKETHROUGH);
}
public boolean isUnderline() {
return isSet(STATE_UNDERLINE);
}
public boolean isSuperscript() {
return isSet(STATE_SUPERSCRIPT);
}
public boolean isSubscript() {
return isSet(STATE_SUBSCRIPT);
}
public boolean isFixedWidth() {
return isSet(STATE_FIXED_WIDTH);
}
public void setBold(boolean bold) {
set(bold, STATE_BOLD);
}
public void setItalic(boolean value) {
set(value, STATE_ITALIC);
}
public void setStrikethrough(boolean value) {
set(value, STATE_STRIKETHROUGH);
}
public void setUnderline(boolean value) {
set(value, STATE_UNDERLINE);
}
public void setSuperscript(boolean value) {
set(value, STATE_SUPERSCRIPT);
}
public void setSubscript(boolean value) {
set(value, STATE_SUBSCRIPT);
}
public void setFixedWidth(boolean value) {
set(value, STATE_FIXED_WIDTH);
}
private boolean isSet(int bits) {
return (state & bits) == bits;
}
private void set(boolean value, int bits) {
if (value) {
state |= bits;
} else {
state &= ~bits;
}
}
public RGB getForeground() {
return foreground;
}
public void setForeground(RGB foreground) {
this.foreground = foreground;
}
public RGB getBackground() {
return background;
}
public void setBackground(RGB background) {
this.background = background;
}
public float getSizeFactor() {
return sizeFactor;
}
public void setSizeFactor(float sizeFactor) {
this.sizeFactor = sizeFactor;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((background == null) ? 0 : background.hashCode());
result = prime * result + ((foreground == null) ? 0 : foreground.hashCode());
result = prime * result + Float.floatToIntBits(sizeFactor);
result = prime * result + state;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final FontState other = (FontState) obj;
if (background == null) {
if (other.background != null) {
return false;
}
} else if (!background.equals(other.background)) {
return false;
}
if (foreground == null) {
if (other.foreground != null) {
return false;
}
} else if (!foreground.equals(other.foreground)) {
return false;
}
if (Float.floatToIntBits(sizeFactor) != Float.floatToIntBits(other.sizeFactor)) {
return false;
}
if (state != other.state) {
return false;
}
return true;
}
}