
de.lessvoid.nifty.controls.scrollbar.UpdateScrollpanelPositionToDisplayElement Maven / Gradle / Ivy
package de.lessvoid.nifty.controls.scrollbar;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.controls.Scrollbar;
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.render.NiftyRenderEngine;
import de.lessvoid.nifty.screen.Screen;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.logging.Logger;
public class UpdateScrollpanelPositionToDisplayElement implements EffectImpl {
@Nonnull
private final Logger log = Logger.getLogger(UpdateScrollpanelPositionToDisplayElement.class.getName());
@Nullable
private Element targetElement;
@Override
public void activate(
@Nonnull final Nifty nifty,
@Nonnull final Element elementParameter,
@Nonnull final EffectProperties parameter) {
String target = parameter.getProperty("target");
if (target != null) {
Screen screen = nifty.getCurrentScreen();
if (screen == null) {
log.severe("Can't activate the effect while there is no screen selected as current.");
} else {
targetElement = screen.findElementById(target);
}
}
}
@Override
public void execute(
@Nonnull final Element element,
final float normalizedTime,
@Nullable final Falloff falloff,
@Nonnull final NiftyRenderEngine r) {
if (targetElement != null) {
Scrollbar verticalScrollbar = targetElement.findNiftyControl("#nifty-internal-vertical-scrollbar",
Scrollbar.class);
if (verticalScrollbar == null) {
log.warning("Failed to locate required internal scrollbar.");
return;
}
int minY = (int) verticalScrollbar.getValue();
int maxY = (int) verticalScrollbar.getValue() + (int) verticalScrollbar.getWorldPageSize();
int currentMinY = element.getY() - targetElement.getY() + (int) verticalScrollbar.getValue();
int currentMaxY = element.getY() - targetElement.getY() + element.getHeight() + (int) verticalScrollbar
.getValue();
// below?
int delta = -1;
if (currentMinY >= maxY || (currentMinY <= maxY && currentMaxY >= maxY)) {
// scroll down
delta = currentMaxY - maxY;
verticalScrollbar.setValue(minY + delta);
} else if (currentMaxY <= minY || (currentMinY <= minY && currentMaxY >= minY)) {
// scroll up
delta = minY - currentMinY;
verticalScrollbar.setValue(minY - delta);
}
log.fine(minY + ":" + maxY + " - " + currentMinY + ":" + currentMaxY + " - " + delta);
}
}
@Override
public void deactivate() {
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy