blob: 4b58e9191800b6f32f2e559c2c7e1c02e9db0f24 [file] [log] [blame]
// Copyright (c) 2012 Chan Wai Shing
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package syntaxhighlight;
import java.awt.Color;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
/**
* The style used by {@link syntaxhiglight.Theme} as those of CSS styles.
*
* @author Chan Wai Shing <cws1989@gmail.com>
*/
public class Style implements Cloneable {
/**
* It indicate whether the {@link #attributeSet} has updated after any style
* changes.
*/
protected boolean changed;
/**
* The {@link AttributeSet} representation of this style.
*/
protected SimpleAttributeSet attributeSet;
/**
* Font bold.
*/
protected boolean bold;
/**
* Font color.
*/
protected Color color;
/**
* The background color, null means no background color is set.
*/
protected Color background;
/**
* Font underline.
*/
protected boolean underline;
/**
* Font italic.
*/
protected boolean italic;
/**
* Constructor.
* <p>
* <b>Default values:</b><br />
* <ul>
* <li>bold: false;</li>
* <li>color: black;</li>
* <li>background: null;</li>
* <li>underline: false;</li>
* <li>italic: false;</li>
* </ul>
* </p>
*/
public Style() {
changed = true;
attributeSet = null;
bold = false;
color = Color.black;
background = null;
underline = false;
italic = false;
}
/**
* Get the {@link AttributeSet} of this style.
* @return the {@link AttributeSet}
*/
public SimpleAttributeSet getAttributeSet() {
if (changed) {
attributeSet = new SimpleAttributeSet();
StyleConstants.setBold(attributeSet, bold);
StyleConstants.setForeground(attributeSet, color);
if (background != null) {
StyleConstants.setBackground(attributeSet, background);
}
StyleConstants.setUnderline(attributeSet, underline);
StyleConstants.setItalic(attributeSet, italic);
changed = false;
}
return attributeSet;
}
/**
* Get the background color.
* @return the background color or null if no color is set
*/
public Color getBackground() {
return background;
}
/**
* Set the background color.
* @param background null means do not set the background
*/
public void setBackground(Color background) {
changed = true;
this.background = background;
}
public boolean isBold() {
return bold;
}
public void setBold(boolean bold) {
changed = true;
this.bold = bold;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
if (color == null) {
throw new NullPointerException("argument 'color' cannot be null");
}
changed = true;
this.color = color;
}
public boolean isItalic() {
return italic;
}
public void setItalic(boolean italic) {
changed = true;
this.italic = italic;
}
public boolean isUnderline() {
return underline;
}
public void setUnderline(boolean underline) {
changed = true;
this.underline = underline;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
int hash = 7;
hash = 97 * hash + (this.bold ? 1 : 0);
hash = 97 * hash + (this.color != null ? this.color.hashCode() : 0);
hash = 97 * hash + (this.background != null ? this.background.hashCode() : 0);
hash = 97 * hash + (this.underline ? 1 : 0);
hash = 97 * hash + (this.italic ? 1 : 0);
return hash;
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Style)) {
return false;
}
if (obj == this) {
return true;
}
Style _object = (Style) obj;
return _object.bold == bold && _object.color.equals(color) && _object.background.equals(background)
&& _object.underline == underline && _object.italic == italic;
}
/**
* {@inheritDoc}
*/
@Override
public Style clone() {
Style object = null;
try {
object = (Style) super.clone();
} catch (CloneNotSupportedException ex) {
}
return object;
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
sb.append(getClass().getName());
sb.append(": ");
sb.append("bold: ").append(bold);
sb.append(", ");
sb.append("color: ").append(color);
sb.append(", ");
sb.append("background: ").append(background);
sb.append(", ");
sb.append("underline: ").append(underline);
sb.append(", ");
sb.append("italic: ").append(italic);
sb.append("]");
return sb.toString();
}
}