Substance look and feel - complex themes

Complex theme is based on four other (not necessarily simple) themes:

To create a complex theme, use the following API (constructors) in SubstanceComplexTheme:

  /**
   * Creates a new complex theme.
   
   @param displayName
   *            Theme display name.
   @param themeKind
   *            Theme kind.
   @param activeTheme
   *            Active theme.
   @param defaultTheme
   *            Default theme.
   @param disabledTheme
   *            Disabled theme.
   @param activeTitlePaneTheme
   *            Active title pane theme.
   */
  public SubstanceComplexTheme(String displayName, ThemeKind themeKind,
      SubstanceTheme activeTheme, SubstanceTheme defaultTheme,
      SubstanceTheme disabledTheme, SubstanceTheme activeTitlePaneTheme)

  /**
   * Creates a new complex theme.
   
   @param displayName
   *            Theme display name.
   @param themeKind
   *            Theme kind.
   @param activeTheme
   *            Active theme.
   @param defaultTheme
   *            Default theme.
   @param disabledTheme
   *            Disabled theme.
   @param activeTitlePaneTheme
   *            Active title pane theme.
   @param watermarkTheme
   *            Watermark theme.
   */
  public SubstanceComplexTheme(String displayName, ThemeKind themeKind,
      SubstanceTheme activeTheme, SubstanceTheme defaultTheme,
      SubstanceTheme disabledTheme, SubstanceTheme activeTitlePaneTheme,
      SubstanceTheme watermarkTheme)

Example of a complex theme:

    SubstanceTheme activeTheme = new SubstanceMixTheme(
        new SubstancePurpleTheme(),
        new SubstanceBarbyPinkTheme()).saturate(0.5);
    SubstanceTheme defaultTheme = new SubstanceMixTheme(
        new SubstanceAquaTheme(),
        new SubstanceBottleGreenTheme()).saturate(0.3)
        .tint(0.2);
    SubstanceTheme disabledTheme = defaultTheme.saturate(-0.3);
    SubstanceTheme activeTitleTheme = activeTheme.saturate(-0.1);
    
    this.theme = new SubstanceComplexTheme(
        "Finding Nemo", ThemeKind.BRIGHT, activeTheme,
        defaultTheme, disabledTheme, activeTitleTheme);

Note that the basic themes of the complex themes are not necessarily simple. This creates the following visual theme:

Another example of a complex theme:

    ColorScheme shiftRed = new ShiftColorScheme(new SunsetColorScheme() {
      @Override
      public Color getForegroundColor() {
        return Color.white;
      }
    }, Color.red, 0.3);
    SubstanceTheme activeTheme = new SubstanceTheme(shiftRed, "Red sunset",
        ThemeKind.DARK).saturate(0.4);
    SubstanceTheme defaultTheme = new SubstanceCharcoalTheme();
    SubstanceTheme disabledTheme = defaultTheme.tone(0.2);
    SubstanceTheme activeTitleTheme = defaultTheme.saturate(0.2);
    SubstanceTheme watermarkTheme = defaultTheme.saturate(0.4);

    this.theme = new SubstanceComplexTheme(NAME, ThemeKind.DARK,
        activeTheme, defaultTheme, disabledTheme, activeTitleTheme,
        watermarkTheme);

which creates the following theme: