org.jets3t.gui.skins.html.SkinnedLookAndFeel Maven / Gradle / Ivy
/*
* JetS3t : Java S3 Toolkit
* Project hosted at http://bitbucket.org/jmurty/jets3t/
*
* Copyright 2006-2010 James Murty
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jets3t.gui.skins.html;
import java.awt.Color;
import java.awt.Font;
import java.util.Properties;
import javax.swing.JLabel;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* A specialisation of the default Metal theme that allows specific colours and
* fonts to be used instead of those in the Metal theme.
*
* This class controls:
*
* - the colour used for Window and Control backgrounds
* - the colour used for System, Control and User text
* - the font used for System, Control and User text
*
*
* @author James Murty
*/
public class SkinnedLookAndFeel extends MetalLookAndFeel {
private static final long serialVersionUID = 4391824305469950437L;
private static final Log log = LogFactory.getLog(SkinnedLookAndFeel.class);
public SkinnedLookAndFeel(Properties skinProperties, String itemName) {
super();
// Determine system defaults.
JLabel defaultLabel = new JLabel();
Color backgroundColor = defaultLabel.getBackground();
Color textColor = defaultLabel.getForeground();
Font font = defaultLabel.getFont();
// Find skinning configurations.
String backgroundColorValue = skinProperties.getProperty("backgroundColor", null);
String textColorValue = skinProperties.getProperty("textColor", null);
String fontValue = skinProperties.getProperty("font", null);
// Apply skinning configurations.
if (backgroundColorValue != null) {
Color color = Color.decode(backgroundColorValue);
if (color == null) {
log.error("Unable to set background color with value: " + backgroundColorValue);
} else {
backgroundColor = color;
}
}
if (textColorValue != null) {
Color color = Color.decode(textColorValue);
if (color == null) {
log.error("Unable to set text color with value: " + textColorValue);
} else {
textColor = color;
}
}
if (fontValue != null) {
Font myFont = Font.decode(fontValue);
if (myFont == null) {
log.error("Unable to set font with value: " + fontValue);
} else {
font = myFont;
}
}
// Update metal theme with configured display properties.
SkinnedMetalTheme skinnedTheme = new SkinnedMetalTheme(new ColorUIResource(backgroundColor),
new ColorUIResource(textColor), new FontUIResource(font));
MetalLookAndFeel.setCurrentTheme(skinnedTheme);
}
private class SkinnedMetalTheme extends DefaultMetalTheme {
private ColorUIResource backgroundColorUIResource = null;
private ColorUIResource textColorUIResource = null;
private FontUIResource fontUIResource = null;
public SkinnedMetalTheme(ColorUIResource backgroundColorUIResource, ColorUIResource
textColorUIResource, FontUIResource fontUIResource)
{
this.backgroundColorUIResource = backgroundColorUIResource;
this.textColorUIResource = textColorUIResource;
this.fontUIResource = fontUIResource;
}
public String getName() {
return "Uploader HTML skinnable theme";
}
public FontUIResource getSystemTextFont() {
return fontUIResource;
}
public FontUIResource getControlTextFont() {
return fontUIResource;
}
public FontUIResource getUserTextFont() {
return fontUIResource;
}
public ColorUIResource getSystemTextColor() {
return textColorUIResource;
}
public ColorUIResource getControlTextColor() {
return textColorUIResource;
}
public ColorUIResource getUserTextColor() {
return textColorUIResource;
}
public ColorUIResource getWindowBackground() {
return backgroundColorUIResource;
}
public ColorUIResource getControl() {
return backgroundColorUIResource;
}
}
}