PainterConf.java
- package swingtree.style;
- import com.google.errorprone.annotations.Immutable;
- import swingtree.UI;
- import swingtree.api.Painter;
- import java.util.Objects;
- /**
- * An immutable config API for specifying a painter
- * style for custom {@link Painter} implementations that are used to paint
- * the inner area of a component on a specific layer.
- * The following properties with their respective purpose are available:
- * <br>
- * <ol>
- * <li><h3>Painter</h3>
- * <p>
- * The painter is a function that takes a {@link java.awt.Graphics2D} instance
- * which is used to paint onto the inner area of a component.
- * </p>
- * </li>
- * <li><h3>Clip Area</h3>
- * <p>
- * The clip area specifies the area of the component that the painter
- * should be clipped to, which means that the things painted
- * will only be visible within the specified area.
- * </p>
- * </li>*
- * </ol>
- * <p>
- * Note that you can use the {@link #none()} method to specify that no painter should be used,
- * as the instance returned by that method is a painter with a {@link Painter#none()} painter,
- * effectively making it a representation of the absence of a painter.
- * <p>
- */
- @Immutable
- @SuppressWarnings("Immutable")
- final class PainterConf
- {
- private static final PainterConf _NONE = new PainterConf(Painter.none(), UI.ComponentArea.BODY);
- static PainterConf none() { return _NONE; }
- static PainterConf of( Painter painter, UI.ComponentArea area ) {
- if ( painter == Painter.none() )
- return none();
- else
- return new PainterConf(painter, area);
- }
- private final Painter _painter;
- private final UI.ComponentArea _clipArea;
- private PainterConf(Painter painter, UI.ComponentArea area )
- {
- _painter = Objects.requireNonNull(painter);
- _clipArea = Objects.requireNonNull(area);
- }
- public Painter painter() { return _painter; }
- public UI.ComponentArea clipArea() {
- return _clipArea;
- }
- @Override
- public String toString() {
- if ( _painter == Painter.none() )
- return this.getClass().getSimpleName() + "[NONE]";
- else
- return this.getClass().getSimpleName() + "[" +
- "painter=" + StyleUtil.toString(_painter) + ", " +
- "clipArea=" + _clipArea +
- ']';
- }
- @Override
- public boolean equals(Object o) {
- if ( this == o )
- return true;
- if ( !(o instanceof PainterConf) )
- return false;
- PainterConf that = (PainterConf) o;
- return _painter.equals(that._painter) &&
- _clipArea == that._clipArea;
- }
- @Override
- public int hashCode() {
- return Objects.hash(_painter, _clipArea);
- }
- }