Package com.ardor3d.extension.ui.event

Source Code of com.ardor3d.extension.ui.event.FrameResizeListener

/**
* Copyright (c) 2008-2012 Ardor Labs, Inc.
*
* This file is part of Ardor3D.
*
* Ardor3D is free software: you can redistribute it and/or modify it
* under the terms of its license which may be found in the accompanying
* LICENSE file or at <http://www.ardor3d.com/LICENSE>.
*/

package com.ardor3d.extension.ui.event;

import com.ardor3d.extension.ui.UIComponent;
import com.ardor3d.extension.ui.UIFrame;
import com.ardor3d.extension.ui.UIFrameStatusBar;
import com.ardor3d.math.Transform;
import com.ardor3d.math.Vector3;

public final class FrameResizeListener implements DragListener {
    private int _initialX;
    private int _initialY;
    private int _initialLocalComponentWidth;
    private int _initialLocalComponentHeight;
    private final Transform _initFrameTransform = new Transform();
    private final UIFrameStatusBar _uiFrameStatusBar;

    public FrameResizeListener(final UIFrameStatusBar uiFrameStatusBar) {
        _uiFrameStatusBar = uiFrameStatusBar;
    }

    public void startDrag(final int mouseX, final int mouseY) {
        final Vector3 vec = Vector3.fetchTempInstance();
        vec.set(mouseX, mouseY, 0);
        _uiFrameStatusBar.getWorldTransform().applyInverseVector(vec);

        _initialX = Math.round(vec.getXf());
        _initialY = Math.round(vec.getYf());
        Vector3.releaseTempInstance(vec);

        final UIFrame frame = UIFrame.findParentFrame(_uiFrameStatusBar);
        _initialLocalComponentWidth = frame.getLocalComponentWidth();
        _initialLocalComponentHeight = frame.getLocalComponentHeight();

        _initFrameTransform.set(frame.getWorldTransform());
    }

    public void drag(final int mouseX, final int mouseY) {
        resizeFrameByPosition(mouseX, mouseY);
    }

    public void endDrag(final UIComponent component, final int mouseX, final int mouseY) {
        resizeFrameByPosition(mouseX, mouseY);
    }

    private void resizeFrameByPosition(final int mouseX, final int mouseY) {

        final Vector3 vec = Vector3.fetchTempInstance();
        vec.set(mouseX, mouseY, 0);
        _uiFrameStatusBar.getWorldTransform().applyInverseVector(vec);

        final int x = Math.round(vec.getXf());
        final int y = Math.round(vec.getYf());

        final UIFrame frame = UIFrame.findParentFrame(_uiFrameStatusBar);

        // Set the new width to the initial width + the change in mouse x position.
        int newWidth = _initialLocalComponentWidth + x - _initialX;
        if (newWidth < UIFrame.MIN_FRAME_WIDTH) {
            // don't let us get smaller than min size
            newWidth = UIFrame.MIN_FRAME_WIDTH;
        }
        if (newWidth < frame.getMinimumLocalComponentWidth()) {
            // don't let us get smaller than frame min size
            newWidth = frame.getMinimumLocalComponentWidth();
        }
        if (newWidth > frame.getMaximumLocalComponentWidth()) {
            // don't let us get bigger than frame max size
            newWidth = frame.getMaximumLocalComponentWidth();
        }

        // Set the new height to the initial height + the change in mouse y position.
        int newHeight = _initialLocalComponentHeight - (y - _initialY);
        if (newHeight < UIFrame.MIN_FRAME_HEIGHT) {
            // don't let us get smaller than absolute min size
            newHeight = UIFrame.MIN_FRAME_HEIGHT;
        }
        if (newHeight < frame.getMinimumLocalComponentHeight()) {
            // don't let us get smaller than frame min size
            newHeight = frame.getMinimumLocalComponentHeight();
        }
        if (newHeight > frame.getMaximumLocalComponentHeight()) {
            // don't let us get bigger than frame max size
            newHeight = frame.getMaximumLocalComponentHeight();
        }

        frame.setLocalComponentSize(newWidth, newHeight);

        vec.set(0, _initialLocalComponentHeight - newHeight, 0);
        _initFrameTransform.applyForwardVector(vec);
        frame.setTransform(_initFrameTransform);
        frame.addTranslation(vec);
        Vector3.releaseTempInstance(vec);

        frame.layout();
    }

    public boolean isDragHandle(final UIComponent component, final int mouseX, final int mouseY) {
        return component == _uiFrameStatusBar.getResizeButton();
    }
}
TOP

Related Classes of com.ardor3d.extension.ui.event.FrameResizeListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.