package de.lessvoid.nifty.effects.impl;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.effects.EffectImpl;
import de.lessvoid.nifty.effects.EffectProperties;
import de.lessvoid.nifty.effects.Falloff;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.loaderv2.types.helper.PaddingAttributeParser;
import de.lessvoid.nifty.render.NiftyRenderEngine;
import de.lessvoid.nifty.tools.Color;
import de.lessvoid.nifty.tools.SizeValue;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.logging.Logger;
/**
* Color - color overlay.
*
* @author void
*/
public class ColorBar implements EffectImpl {
@Nonnull
private static final Logger log = Logger.getLogger(ColorBar.class.getName());
@Nullable
private Color color;
@Nonnull
private final Color tempColor = new Color("#000f");
@Nonnull
private SizeValue width = SizeValue.def();
@Nonnull
private SizeValue insetLeft = SizeValue.px(0);
@Nonnull
private SizeValue insetRight = SizeValue.px(0);
@Nonnull
private SizeValue insetTop = SizeValue.px(0);
@Nonnull
private SizeValue insetBottom = SizeValue.px(0);
@Override
public void activate(
@Nonnull final Nifty nifty,
@Nonnull final Element element,
@Nonnull final EffectProperties parameter) {
color = new Color(parameter.getProperty("color", "#ffffffff"));
width = new SizeValue(parameter.getProperty("width"));
try {
PaddingAttributeParser parser = new PaddingAttributeParser(parameter.getProperty("inset", "0px"));
insetLeft = new SizeValue(parser.getLeft());
insetRight = new SizeValue(parser.getRight());
insetTop = new SizeValue(parser.getTop());
insetBottom = new SizeValue(parser.getBottom());
} catch (Exception e) {
log.warning(e.getMessage());
}
}
@Override
public void execute(
@Nonnull final Element element,
final float normalizedTime,
@Nullable final Falloff falloff,
@Nonnull final NiftyRenderEngine r) {
r.saveStates();
if (color != null) {
if (r.isColorAlphaChanged()) {
if (falloff == null) {
r.setColorIgnoreAlpha(color);
} else {
tempColor.multiply(color, falloff.getFalloffValue());
r.setColorIgnoreAlpha(tempColor);
}
} else {
if (falloff == null) {
r.setColor(color);
} else {
tempColor.multiply(color, falloff.getFalloffValue());
r.setColor(tempColor);
}
}
}
int insetOffsetLeft = insetLeft.getValueAsInt(element.getWidth());
int insetOffsetRight = insetRight.getValueAsInt(element.getWidth());
int insetOffsetTop = insetTop.getValueAsInt(element.getHeight());
int insetOffsetBottom = insetBottom.getValueAsInt(element.getHeight());
final int size;
if (!element.hasParent()) {
size = -1;
} else {
size = width.getValueAsInt(element.getParent().getWidth());
}
if (size == -1) {
r.renderQuad(
element.getX() + insetOffsetLeft,
element.getY() + insetOffsetTop,
element.getWidth() - insetOffsetLeft - insetOffsetRight,
element.getHeight() - insetOffsetTop - insetOffsetBottom);
} else {
r.renderQuad(
(element.getX() + element.getWidth() / 2) - size / 2 + insetOffsetLeft,
element.getY() + insetOffsetTop,
size - insetOffsetLeft - insetOffsetRight,
element.getHeight() - insetOffsetTop - insetOffsetBottom);
}
r.restoreStates();
}
@Override
public void deactivate() {
}
}