2
* Copyright (c) 2005-2010 Substance Kirill Grouchnikov. All Rights Reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
7
* o Redistributions of source code must retain the above copyright notice,
8
* this list of conditions and the following disclaimer.
10
* o Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
14
* o Neither the name of Substance Kirill Grouchnikov nor the names of
15
* its contributors may be used to endorse or promote products derived
16
* from this software without specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
package org.pushingpixels.substance.api.skin;
32
import java.awt.Color;
34
import org.pushingpixels.substance.api.*;
35
import org.pushingpixels.substance.api.colorscheme.LightGrayColorScheme;
36
import org.pushingpixels.substance.api.painter.border.ClassicBorderPainter;
37
import org.pushingpixels.substance.api.painter.decoration.FractionBasedDecorationPainter;
38
import org.pushingpixels.substance.api.painter.fill.FractionBasedFillPainter;
39
import org.pushingpixels.substance.api.painter.highlight.ClassicHighlightPainter;
40
import org.pushingpixels.substance.api.painter.overlay.BottomLineOverlayPainter;
41
import org.pushingpixels.substance.api.shaper.ClassicButtonShaper;
44
* <code>Office Black 2007</code> skin. This class is part of officially
47
* @author Kirill Grouchnikov
49
public class OfficeBlack2007Skin extends SubstanceSkin {
51
* Display name for <code>this</code> skin.
53
public static final String NAME = "Office Black 2007";
56
* Creates a new <code>Office Black 2007</code> skin.
58
public OfficeBlack2007Skin() {
59
SubstanceSkin.ColorSchemes colorSchemes = SubstanceSkin
60
.getColorSchemes("org/pushingpixels/substance/api/skin/office2007.colorschemes");
62
SubstanceColorScheme activeScheme = colorSchemes
63
.get("Office Silver Active");
64
SubstanceColorScheme enabledScheme = colorSchemes
65
.get("Office Black Enabled");
66
SubstanceColorScheme disabledScheme = new LightGrayColorScheme().tint(
67
0.05).named("Office Black Disabled");
69
SubstanceColorSchemeBundle defaultSchemeBundle = new SubstanceColorSchemeBundle(
70
activeScheme, enabledScheme, enabledScheme);
71
defaultSchemeBundle.registerColorScheme(enabledScheme, 0.5f,
72
ComponentState.DISABLED_UNSELECTED);
73
defaultSchemeBundle.registerColorScheme(activeScheme, 0.5f,
74
ComponentState.DISABLED_SELECTED);
76
SubstanceColorScheme rolloverScheme = colorSchemes
77
.get("Office Silver Rollover");
78
SubstanceColorScheme rolloverSelectedScheme = colorSchemes
79
.get("Office Silver Rollover Selected");
80
SubstanceColorScheme selectedScheme = colorSchemes
81
.get("Office Silver Selected");
82
SubstanceColorScheme pressedScheme = colorSchemes
83
.get("Office Silver Pressed");
84
SubstanceColorScheme pressedSelectedScheme = colorSchemes
85
.get("Office Silver Pressed Selected");
87
// register state-specific color schemes on rollovers and selections
88
defaultSchemeBundle.registerColorScheme(rolloverScheme,
89
ComponentState.ROLLOVER_UNSELECTED);
90
defaultSchemeBundle.registerColorScheme(rolloverSelectedScheme,
91
ComponentState.ROLLOVER_SELECTED);
92
defaultSchemeBundle.registerColorScheme(selectedScheme,
93
ComponentState.SELECTED);
94
defaultSchemeBundle.registerColorScheme(pressedScheme,
95
ComponentState.PRESSED_UNSELECTED);
96
defaultSchemeBundle.registerColorScheme(pressedSelectedScheme,
97
ComponentState.PRESSED_SELECTED);
99
// register state-specific highlight color schemes on rollover and
101
defaultSchemeBundle.registerHighlightColorScheme(rolloverScheme, 0.8f,
102
ComponentState.ROLLOVER_UNSELECTED);
103
defaultSchemeBundle.registerHighlightColorScheme(selectedScheme, 0.8f,
104
ComponentState.SELECTED);
105
defaultSchemeBundle.registerHighlightColorScheme(
106
rolloverSelectedScheme, 0.8f, ComponentState.ROLLOVER_SELECTED);
107
defaultSchemeBundle.registerHighlightColorScheme(selectedScheme, 0.8f,
108
ComponentState.ARMED, ComponentState.ROLLOVER_ARMED);
111
SubstanceColorScheme borderEnabledScheme = colorSchemes
112
.get("Office Silver Border Enabled");
113
SubstanceColorScheme borderActiveScheme = colorSchemes
114
.get("Office Silver Border Active");
115
SubstanceColorScheme borderRolloverScheme = colorSchemes
116
.get("Office Border Rollover");
117
SubstanceColorScheme borderRolloverSelectedScheme = colorSchemes
118
.get("Office Border Rollover Selected");
119
SubstanceColorScheme borderSelectedScheme = colorSchemes
120
.get("Office Border Selected");
121
SubstanceColorScheme borderPressedScheme = colorSchemes
122
.get("Office Border Pressed");
124
defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
125
ColorSchemeAssociationKind.BORDER, ComponentState.ENABLED);
126
defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
127
ColorSchemeAssociationKind.BORDER,
128
ComponentState.DISABLED_SELECTED,
129
ComponentState.DISABLED_UNSELECTED);
130
defaultSchemeBundle.registerColorScheme(borderActiveScheme,
131
ColorSchemeAssociationKind.BORDER, ComponentState.DEFAULT);
132
defaultSchemeBundle.registerColorScheme(borderRolloverScheme,
133
ColorSchemeAssociationKind.BORDER,
134
ComponentState.ROLLOVER_UNSELECTED);
135
defaultSchemeBundle.registerColorScheme(borderRolloverSelectedScheme,
136
ColorSchemeAssociationKind.BORDER,
137
ComponentState.ROLLOVER_SELECTED, ComponentState.ARMED,
138
ComponentState.ROLLOVER_ARMED);
139
defaultSchemeBundle.registerColorScheme(borderSelectedScheme,
140
ColorSchemeAssociationKind.BORDER, ComponentState.SELECTED);
141
defaultSchemeBundle.registerColorScheme(borderPressedScheme,
142
ColorSchemeAssociationKind.BORDER,
143
ComponentState.PRESSED_SELECTED,
144
ComponentState.PRESSED_UNSELECTED);
146
SubstanceColorScheme markEnabledScheme = colorSchemes
147
.get("Office Black Mark Enabled");
148
defaultSchemeBundle.registerColorScheme(markEnabledScheme,
149
ColorSchemeAssociationKind.MARK, ComponentState.ENABLED);
150
defaultSchemeBundle.registerColorScheme(markEnabledScheme,
151
ColorSchemeAssociationKind.MARK,
152
ComponentState.DISABLED_SELECTED,
153
ComponentState.DISABLED_UNSELECTED);
155
registerDecorationAreaSchemeBundle(defaultSchemeBundle,
156
DecorationAreaType.NONE);
158
// tabs and tab borders
159
SubstanceColorScheme tabSelectedScheme = colorSchemes
160
.get("Office Silver Tab Selected");
161
SubstanceColorScheme tabRolloverScheme = colorSchemes
162
.get("Office Silver Tab Rollover");
163
defaultSchemeBundle.registerColorScheme(tabSelectedScheme,
164
ColorSchemeAssociationKind.TAB, ComponentState.SELECTED,
165
ComponentState.ROLLOVER_SELECTED,
166
ComponentState.PRESSED_SELECTED,
167
ComponentState.PRESSED_UNSELECTED);
168
defaultSchemeBundle.registerColorScheme(tabRolloverScheme,
169
ColorSchemeAssociationKind.TAB,
170
ComponentState.ROLLOVER_UNSELECTED);
171
defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
172
ColorSchemeAssociationKind.TAB_BORDER, ComponentState.SELECTED,
173
ComponentState.ROLLOVER_UNSELECTED);
174
defaultSchemeBundle.registerColorScheme(rolloverSelectedScheme,
175
ColorSchemeAssociationKind.TAB_BORDER,
176
ComponentState.ROLLOVER_SELECTED);
179
SubstanceColorScheme separatorScheme = colorSchemes
180
.get("Office Silver Separator");
181
defaultSchemeBundle.registerColorScheme(separatorScheme,
182
ColorSchemeAssociationKind.SEPARATOR);
184
this.registerDecorationAreaSchemeBundle(defaultSchemeBundle,
185
DecorationAreaType.NONE);
187
// color scheme bundle for title panes
188
SubstanceColorScheme activeHeaderScheme = colorSchemes
189
.get("Office Black Header Active");
190
SubstanceColorScheme enabledHeaderScheme = colorSchemes
191
.get("Office Black Header Enabled");
192
SubstanceColorSchemeBundle headerSchemeBundle = new SubstanceColorSchemeBundle(
193
activeHeaderScheme, enabledHeaderScheme, disabledScheme);
195
SubstanceColorScheme headerMarkEnabledScheme = colorSchemes
196
.get("Office Black Header Mark Enabled");
197
headerSchemeBundle.registerColorScheme(headerMarkEnabledScheme,
198
ColorSchemeAssociationKind.MARK, ComponentState.ENABLED);
199
headerSchemeBundle.registerColorScheme(markEnabledScheme,
200
ColorSchemeAssociationKind.MARK,
201
ComponentState.DISABLED_SELECTED,
202
ComponentState.DISABLED_UNSELECTED);
204
headerSchemeBundle.registerColorScheme(enabledHeaderScheme, 0.5f,
205
ComponentState.DISABLED_UNSELECTED,
206
ComponentState.DISABLED_SELECTED);
207
headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.6f,
208
ComponentState.ROLLOVER_UNSELECTED);
209
headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.8f,
210
ComponentState.SELECTED);
211
headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.95f,
212
ComponentState.ROLLOVER_SELECTED);
213
headerSchemeBundle.registerHighlightColorScheme(activeScheme, 0.8f,
214
ComponentState.ARMED, ComponentState.ROLLOVER_ARMED);
216
this.registerDecorationAreaSchemeBundle(headerSchemeBundle,
217
activeHeaderScheme, DecorationAreaType.PRIMARY_TITLE_PANE,
218
DecorationAreaType.HEADER);
220
// color scheme bundle for footer
221
SubstanceColorScheme enabledFooterScheme = colorSchemes
222
.get("Office Black Footer Enabled");
223
SubstanceColorSchemeBundle footerSchemeBundle = new SubstanceColorSchemeBundle(
224
activeHeaderScheme, enabledFooterScheme, disabledScheme);
225
SubstanceColorScheme borderFooterEnabledScheme = colorSchemes
226
.get("Office Black Footer Border Enabled");
227
footerSchemeBundle.registerColorScheme(borderFooterEnabledScheme,
228
ColorSchemeAssociationKind.BORDER, ComponentState.ENABLED,
229
ComponentState.DISABLED_SELECTED,
230
ComponentState.DISABLED_UNSELECTED);
231
footerSchemeBundle.registerColorScheme(borderFooterEnabledScheme,
232
ColorSchemeAssociationKind.BORDER, ComponentState
235
// register state-specific color schemes on rollovers and selections
236
footerSchemeBundle.registerColorScheme(rolloverScheme,
237
ComponentState.ROLLOVER_UNSELECTED);
238
footerSchemeBundle.registerColorScheme(rolloverSelectedScheme,
239
ComponentState.ROLLOVER_SELECTED);
240
footerSchemeBundle.registerColorScheme(selectedScheme,
241
ComponentState.SELECTED);
242
footerSchemeBundle.registerColorScheme(pressedScheme,
243
ComponentState.PRESSED_UNSELECTED);
244
footerSchemeBundle.registerColorScheme(pressedSelectedScheme,
245
ComponentState.PRESSED_SELECTED);
247
SubstanceColorScheme footerSeparatorScheme = colorSchemes
248
.get("Office Black Footer Separator");
249
footerSchemeBundle.registerColorScheme(footerSeparatorScheme,
250
ColorSchemeAssociationKind.SEPARATOR);
252
this.registerDecorationAreaSchemeBundle(footerSchemeBundle,
253
activeHeaderScheme, DecorationAreaType.FOOTER);
255
this.watermarkScheme = colorSchemes.get("Office Black Watermark");
256
this.registerAsDecorationArea(this.watermarkScheme,
257
DecorationAreaType.GENERAL);
259
SubstanceColorScheme headerWatermarkScheme = colorSchemes
260
.get("Office Black Header Watermark");
261
this.registerAsDecorationArea(headerWatermarkScheme,
262
DecorationAreaType.HEADER, DecorationAreaType.TOOLBAR);
264
setSelectedTabFadeStart(0.6);
265
setSelectedTabFadeEnd(0.9);
267
this.addOverlayPainter(new BottomLineOverlayPainter(
268
new ColorSchemeSingleColorQuery() {
270
public Color query(SubstanceColorScheme scheme) {
271
Color fg = scheme.getUltraDarkColor();
272
return new Color(fg.getRed(), fg.getGreen(), fg
275
}), DecorationAreaType.PRIMARY_TITLE_PANE);
277
this.buttonShaper = new ClassicButtonShaper();
278
this.watermark = null;
280
this.fillPainter = new FractionBasedFillPainter("Office Black 2007",
281
new float[] { 0.0f, 0.49999f, 0.5f, 1.0f },
282
new ColorSchemeSingleColorQuery[] {
283
ColorSchemeSingleColorQuery.LIGHT,
284
ColorSchemeSingleColorQuery.LIGHT,
285
ColorSchemeSingleColorQuery.MID,
286
ColorSchemeSingleColorQuery.LIGHT });
288
this.borderPainter = new ClassicBorderPainter();
290
this.decorationPainter = new FractionBasedDecorationPainter(
291
"Office Black 2007", new float[] { 0.0f, 0.2499999f, 0.25f,
292
0.6f, 1.0f }, new ColorSchemeSingleColorQuery[] {
293
ColorSchemeSingleColorQuery.LIGHT,
294
ColorSchemeSingleColorQuery.MID,
295
ColorSchemeSingleColorQuery.DARK,
296
ColorSchemeSingleColorQuery.DARK,
297
ColorSchemeSingleColorQuery.MID },
298
DecorationAreaType.PRIMARY_TITLE_PANE,
299
DecorationAreaType.FOOTER);
300
this.highlightPainter = new ClassicHighlightPainter();
306
* @see org.pushingpixels.substance.skin.SubstanceSkin#getDisplayName()
309
public String getDisplayName() {