ComponentConf.java
- package swingtree.style;
- import com.google.errorprone.annotations.Immutable;
- import swingtree.UI;
- import swingtree.layout.Bounds;
- import swingtree.layout.Size;
- import java.util.Objects;
- /**
- * An immutable snapshot of all the essential component state needed for rendering
- * and configuring the component state.
- */
- @Immutable
- @SuppressWarnings("Immutable")
- final class ComponentConf
- {
- public static ComponentConf none() {
- return new ComponentConf(
- StyleConf.none(),
- Bounds.none(),
- Outline.none()
- );
- }
- private final StyleConf _styleConf;
- private final Bounds _currentBounds;
- private final Outline _marginCorrection;
- private boolean _wasAlreadyHashed = false;
- private int _hashCode = 0; // cached hash code
- ComponentConf(
- StyleConf styleConf,
- Bounds currentBounds,
- Outline marginCorrection
- ) {
- _styleConf = Objects.requireNonNull(styleConf);
- _currentBounds = Objects.requireNonNull(currentBounds);
- _marginCorrection = Objects.requireNonNull(marginCorrection);
- }
- StyleConf style() { return _styleConf; }
- Bounds currentBounds() { return _currentBounds; }
- Outline areaMarginCorrection() { return _marginCorrection; }
- ComponentConf withSize( int width, int height ) {
- return new ComponentConf(
- _styleConf,
- Bounds.of(_currentBounds.location(), Size.of(width, height)),
- _marginCorrection
- );
- }
- /**
- * Returns a new {@link ComponentConf} instance which only contains style information relevant
- * to the provided {@link UI.Layer}. Style information on other layers is discarded.
- * @param layer The layer to retain.
- * @return A new {@link ComponentConf} instance which only contains style information relevant to the provided {@link UI.Layer}.
- */
- LayerRenderConf toRenderConfFor(UI.Layer layer ) {
- return LayerRenderConf.of(layer,this);
- }
- @Override
- public String toString() {
- return this.getClass().getSimpleName()+"[" +
- "style=" + _styleConf + ", "+
- "bounds=" + _currentBounds + ", "+
- "areaMarginCorrection=" + _marginCorrection + ", "+
- "]";
- }
- @Override
- public boolean equals( Object o ) {
- if ( o == this ) return true;
- if ( o == null ) return false;
- if ( o.getClass() != this.getClass() ) return false;
- ComponentConf other = (ComponentConf) o;
- return Objects.equals(_styleConf, other._styleConf)
- && Objects.equals(_currentBounds, other._currentBounds)
- && Objects.equals(_marginCorrection, other._marginCorrection);
- }
- @Override
- public int hashCode() {
- if ( _wasAlreadyHashed )
- return _hashCode;
- _hashCode = Objects.hash(_styleConf, _currentBounds, _marginCorrection);
- _wasAlreadyHashed = true;
- return _hashCode;
- }
- }