001 // This file is part of AceWiki.
002 // Copyright 2008-2012, AceWiki developers.
003 //
004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006 // the License, or (at your option) any later version.
007 //
008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010 // Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013 // not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.echocomp;
016
017 import java.util.HashMap;
018
019 import nextapp.echo.app.Color;
020 import nextapp.echo.app.Font;
021 import nextapp.echo.app.ResourceImageReference;
022 import nextapp.echo.app.StyleSheet;
023 import nextapp.echo.app.serial.SerialException;
024 import nextapp.echo.app.serial.StyleSheetLoader;
025
026 /**
027 * This class defines some style attributes that are used by the components of this package.
028 *
029 * @author Tobias Kuhn
030 */
031 public class Style {
032
033 private Style() {} // no instances allowed
034
035 private static final HashMap<String, ResourceImageReference> images =
036 new HashMap<String, ResourceImageReference>();
037
038 static {
039 try {
040 styleSheet = StyleSheetLoader.load(
041 "ch/uzh/ifi/attempto/echocomp/style/Default.stylesheet.xml",
042 Thread.currentThread().getContextClassLoader()
043 );
044 } catch (SerialException ex) {
045 throw new RuntimeException(ex);
046 }
047 }
048
049 /**
050 * The style sheet containing the shadows for internal windows.
051 */
052 public static StyleSheet styleSheet;
053
054 /**
055 * The light background color.
056 */
057 public static Color lightBackground = new Color(190, 190, 255);
058
059 /**
060 * The medium background color.
061 */
062 public static Color mediumBackground = new Color(160, 160, 255);
063
064 /**
065 * The dark background color.
066 */
067 public static Color darkBackground = new Color(60, 60, 220);
068
069 /**
070 * The color for shaded background areas.
071 */
072 public static Color shadedBackground = new Color(240, 240, 240);
073
074 /**
075 * The light foreground color.
076 */
077 public static Color lightForeground = new Color(255, 255, 255);
078
079 /**
080 * The medium foreground color.
081 */
082 public static Color mediumForeground = new Color(60, 60, 220);
083
084 /**
085 * The dark foreground color.
086 */
087 public static Color darkForeground = new Color(0, 0, 0);
088
089 /**
090 * The light color for disabled components
091 */
092 public static Color lightDisabled = new Color(220, 220, 220);
093
094 /**
095 * The dark color for disabled components
096 */
097 public static Color darkDisabled = new Color(100, 100, 100);
098
099 /**
100 * The color for the title background of internal windows.
101 */
102 public static Color windowTitleBackground = new Color(110, 110, 210);
103
104 /**
105 * The font typeface.
106 */
107 public static Font.Typeface fontTypeface = Font.VERDANA;
108
109 /**
110 * This method is used to modify a given color by keeping its brightness and saturation. A
111 * shift value of 120, for example, means a shift by 120 "degrees" towards violet. A shift of
112 * 360 is a full rotation and result in the original color.
113 *
114 * @param c The original color.
115 * @param colorShift The color shift value.
116 * @return The modified color.
117 */
118 public static Color shiftColor(Color c, int colorShift) {
119 if (colorShift >= 240) {
120 c = new Color(c.getGreen(), c.getBlue(), c.getRed());
121 } else if (colorShift >= 120) {
122 c = new Color(c.getBlue(), c.getRed(), c.getGreen());
123 }
124 double s = (colorShift % 120) / 120.0;
125 Color color = new Color(
126 (int) (s * c.getBlue() + (1-s) * c.getRed()),
127 (int) (s * c.getRed() + (1-s) * c.getGreen()),
128 (int) (s * c.getGreen() + (1-s) * c.getBlue())
129 );
130 return color;
131 }
132
133 /**
134 * Returns an image reference for the given file. The same reference is returned when
135 * this method is called twice for the same file.
136 *
137 * @param file Path and file name of an image file.
138 * @return An image reference for the given file.
139 */
140 public static ResourceImageReference getImage(String file) {
141 ResourceImageReference i = images.get(file);
142 if (i != null) {
143 return i;
144 } else {
145 i = new ResourceImageReference(file);
146 images.put(file, i);
147 return i;
148 }
149 }
150
151 }