jadam
September 11, 2014, 8:38am
1
Hey,
I’m trying to create an effect which resizes all elements on the screen so they expand/shrink to their target size. When I set the width and height of a scroll panel or any control that has a scroll panel within it, nothing changes in the look like. Same issue with buttons, but for example panels resize properly.
What can be the cause of it?
Thanks,
Adam
relucri
September 11, 2014, 11:44am
2
Are you using nifty-gui ? In this case you need to call layoutElements on the parent of the element you are resizing.
jadam
September 11, 2014, 2:58pm
4
Actually I tried it and layoutElements() does not work, the elements do not get resized, but the animation/effect becomes a whole lot laggier…
Any other idea?
relucri
September 11, 2014, 3:51pm
5
Could you post the code of your resizing effect? yes calling layoutElements() it’s a bit heavy …
jadam
September 11, 2014, 3:54pm
6
Yeah, here it is and thanks for your help:
[java]public class ExpandShrink implements EffectImpl {
private Nifty nifty;
private float sizePercentage = 0.5f;
private Element element;
private boolean inherit;
private boolean expand;
private List<Element> targetElements;
private Map<Element, Integer> widthsMap;
private Map<Element, Integer> heightsMap;
@Override
public void activate(Nifty nifty, Element element, EffectProperties parameter) {
this.nifty = nifty;
sizePercentage = Float.parseFloat(parameter.getProperty("sizePercentage"));
inherit = parameter.getProperty("inherit")==null?false:Boolean.parseBoolean(parameter.getProperty("inherit"));
expand = parameter.getProperty("expand")==null?true:Boolean.parseBoolean(parameter.getProperty("expand"));
this.element = element;
targetElements = new LinkedList<>();
if (inherit)
{
addAllChildrenOfElement(element,targetElements);
}
else
{
targetElements.add(element);
}
widthsMap = new HashMap<>();
heightsMap = new HashMap<>();
targetElements.stream().forEach(currentElement->{
widthsMap.put(currentElement,currentElement.getWidth());
heightsMap.put(currentElement,currentElement.getHeight());
});
}
private void addAllChildrenOfElement(Element element,List elementsList)
{
if (element.getElements().isEmpty())
{
elementsList.add(element);
}
else
{
element.getElements().stream().forEach(currentChildElement->addAllChildrenOfElement(currentChildElement,elementsList));
}
}
@Override
public void execute(Element element, float effectTime, Falloff falloff, NiftyRenderEngine r) {
targetElements.stream().forEach(targetElement -> {
int currentElementWidth = widthsMap.get(targetElement);
int currentElementHeight = heightsMap.get(targetElement);
if (expand) {
targetElement.setWidth((int) ((1 - sizePercentage) * effectTime * currentElementWidth + sizePercentage * currentElementWidth));
targetElement.setHeight((int) ((1 - sizePercentage) * effectTime * currentElementHeight + sizePercentage * currentElementHeight));
r.setRenderTextSize((1 - sizePercentage) * effectTime * 1 + sizePercentage * 1);
//targetElement.setConstraintWidth(new SizeValue(targetElement.getWidth()+"px"));
//targetElement.setConstraintHeight(new SizeValue(targetElement.getHeight() + "px"));
} else {
targetElement.setWidth((int) ((sizePercentage - 1) * effectTime * currentElementWidth + currentElementWidth));
targetElement.setHeight((int) ((sizePercentage - 1) * effectTime * currentElementHeight + currentElementHeight));
r.setRenderTextSize((sizePercentage - 1) * effectTime * 1 + 1);
//targetElement.setConstraintWidth(new SizeValue(targetElement.getWidth()+"px"));
//targetElement.setConstraintHeight(new SizeValue(targetElement.getHeight()+"px"));
}
targetElement.getParent().layoutElements();
});
}
@Override
public void deactivate() {
}
}[/java]