<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you 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.

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../nbbuild/javadoctools/apichanges.dtd">
<apichanges>
<apidefs>
    <apidef name="plaf">Look And Feel Customization</apidef>
</apidefs>
<changes>
    <change id="dark-theme">
        <api name="plaf"/>
        <summary>Support for dark theme fro Metal and Nimbus look and feel.</summary>
        <version major="1" minor="32"/>
        <date day="31" month="1" year="2013"/>
        <author login="saubrecht"/>
        <compatibility
            addition="yes"
            binary="compatible" deletion="no" deprecation="no"
            modification="no" semantic="compatible" source="compatible"
        />
        <description>
            <p>When using Nimbus or Metal look and feel then system property
                netbeans.plaf.dark.theme=true will switch to dark color theme
                which nicely fits to 'Norway Today' editor color schema.
            </p>
        </description>
    </change>
    <change id="windows8-lfcustoms">
        <api name="plaf"/>
        <summary>New look and feel customizations for Windows 8</summary>
        <version major="1" minor="30"/>
        <date day="27" month="11" year="2012"/>
        <author login="saubrecht"/>
        <compatibility
            addition="yes"
            binary="compatible" deletion="no" deprecation="no"
            modification="no" semantic="compatible" source="compatible"
        />
        <description>
            <p>New look and feel customizations for Windows 8
            </p>
        </description>
        <!--<class package="org.netbeans.swing.plaf.windows8" name="Windows8LFCustoms"/>-->
    </change>
    <change id="lfcustoms-color-functions">
        <api name="plaf"/>
        <summary>New functions for getting foreground text color and color shifting</summary>
        <version major="1" minor="27"/>
        <date day="26" month="6" year="2012"/>
        <author login="wbrana"/>
        <compatibility
            addition="yes"
            binary="compatible" deletion="no" deprecation="no"
            modification="no" semantic="compatible" source="compatible"
        />
        <description>
            <p>
                new functions:<br/>
                <code>
                    static String getHexString(int color)<br/>
                    static String getTextFgColorHTML()<br/>
                    static Color getTextFgColor()<br/>
                    static Color shiftColor(Color color)<br/>
                    static Color getForeground(AttributeSet a)<br/>
                </code>
            </p>
        </description>
        <class package="org.netbeans.swing.plaf" name="LFCustoms"/>
    </change>
    <change id="branding.of.lfcustoms">
        <api name="plaf"/>
        <summary>It is now possible to customize application-specific UIManager keys and values.</summary>
        <version major="1" minor="22"/>
        <date day="30" month="6" year="2011"/>
        <author login="saubrecht"/>
        <compatibility
            addition="yes"
            binary="compatible" deletion="no" deprecation="no"
            modification="no" semantic="compatible" source="compatible"
        />
        <description>
            <p>
            Read more about the
            <a href="architecture-summary.html#property-LookAndFeelCustomsClassName">look and feel Customs branding property</a>.
            </p>
        </description>
        <class package="org.netbeans.swing.plaf" name="Startup"/>
    </change>
    <change id="branding.of.laf">
        <api name="plaf"/>
        <summary>It is now possible to brand name of Look And Feel</summary>
        <version major="1" minor="16"/>
        <date day="6" month="5" year="2010"/>
        <author login="jtulach"/>
        <compatibility
            addition="yes"
            binary="compatible" deletion="no" deprecation="no"
            modification="no" semantic="compatible" source="compatible"
        />
        <description>
            <p>
            Read more about the
            <a href="architecture-summary.html#property-LookAndFeelClassName">Look And Feel branding property</a>.
            </p>
        </description>
        <class package="org.netbeans.swing.plaf" name="Startup"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the Look And Feel Customization API</title>
<link rel="stylesheet" href="prose.css" type="text/css"/>
</head>
<body>
<p class="overviewlink">
<a href="overview-summary.html">Overview</a>
</p>
<h1>Introduction</h1>
<h2>What do the Dates Mean?</h2>
<p>The supplied dates indicate when the API change was made, on the CVS
trunk. From this you can generally tell whether the change should be
present in a given build or not; for trunk builds, simply whether it
was made before or after the change; for builds on a stabilization
branch, whether the branch was made before or after the given date. In
some cases corresponding API changes have been made both in the trunk
and in an in-progress stabilization branch, if they were needed for a
bug fix; this ought to be marked in this list.</p>
<ul>
<li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
Specification versions: 6.0 begins after this point.</li>
<li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
Specification versions: 5.0 begins after this point.</li>
</ul>
<hr/>
<standard-changelists module-code-name="$codebase"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
