/*
* Copyright 2014 MovingBlocks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.terasology.rendering.nui.layouts.miglayout;
import net.miginfocom.layout.ComponentWrapper;
import net.miginfocom.layout.ContainerWrapper;
import org.terasology.math.geom.Vector2i;
import org.terasology.rendering.nui.Canvas;
import org.terasology.rendering.nui.UIWidget;
public class MigComponent implements ComponentWrapper {
private Vector2i pos = new Vector2i();
private Vector2i size = new Vector2i();
private Vector2i screenPos = new Vector2i();
private Vector2i minimumSize = new Vector2i();
private Vector2i preferredSize = new Vector2i();
private UIWidget widget;
private MigLayout parent;
public MigComponent(MigLayout parent, UIWidget widget) {
this.widget = widget;
this.parent = parent;
}
public void calculatePreferredSize(Canvas canvas, Vector2i sizeHint) {
minimumSize = canvas.calculatePreferredSize(widget);
minimumSize.x = Math.min(sizeHint.x, minimumSize.x);
minimumSize.y = Math.min(sizeHint.y, minimumSize.y);
preferredSize = new Vector2i(Math.max(sizeHint.x, minimumSize.x), Math.max(sizeHint.y, minimumSize.y));
}
@Override
public UIWidget getComponent() {
return widget;
}
@Override
public int getX() {
return pos.x;
}
@Override
public int getY() {
return pos.y;
}
@Override
public int getWidth() {
return size.x;
}
@Override
public int getHeight() {
return size.y;
}
@Override
public int getScreenLocationX() {
return screenPos.x;
}
@Override
public int getScreenLocationY() {
return screenPos.y;
}
@Override
public int getMinimumWidth(int hHint) {
return minimumSize.x;
}
@Override
public int getMinimumHeight(int wHint) {
return minimumSize.y;
}
@Override
public int getPreferredWidth(int hHint) {
return preferredSize.x;
}
@Override
public int getPreferredHeight(int wHint) {
return preferredSize.y;
}
@Override
public int getMaximumWidth(int hHint) {
return Short.MAX_VALUE;
}
@Override
public int getMaximumHeight(int wHint) {
return Short.MAX_VALUE;
}
public void setPreferredSize(Vector2i preferredSize) {
this.preferredSize = preferredSize;
}
@Override
public void setBounds(int x, int y, int width, int height) {
pos.x = x;
pos.y = y;
size.x = width;
size.y = height;
}
@Override
public boolean isVisible() {
return true;
}
@Override
public int getBaseline(int width, int height) {
return -1;
}
@Override
public boolean hasBaseline() {
return false;
}
@Override
public ContainerWrapper getParent() {
return parent;
}
@Override
public float getPixelUnitFactor(boolean isHor) {
return 1;
}
@Override
public int getHorizontalScreenDPI() {
return 72;
}
@Override
public int getVerticalScreenDPI() {
return 72;
}
@Override
public int getScreenWidth() {
throw new IllegalAccessError("Not supported!");
}
@Override
public int getScreenHeight() {
throw new IllegalAccessError("Not supported!");
}
@Override
public String getLinkId() {
return null;
}
public void setParent(MigLayout parent) {
this.parent = parent;
}
@Override
public int getLayoutHashCode() {
int h = 43;
h += (size.x) + (size.y << 5);
h += (preferredSize.x << 10) + (preferredSize.y << 15);
return h;
}
@Override
public int[] getVisualPadding() {
return null;
}
@Override
public void paintDebugOutline(boolean showVisualPadding) {
}
@Override
public int getComponentType(boolean disregardScrollPane) {
return TYPE_UNKNOWN;
}
@Override
public int getContentBias() {
return -1;
}
@Override
public final int hashCode() {
return widget.hashCode();
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MigComponent)) {
return false;
}
return widget.equals(((MigComponent) obj).getComponent());
}
}