
org.pushingpixels.lafwidget.contrib.blogofbug.swing.layout.OffsetCaroselLayout Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of laf-widget Show documentation
Show all versions of laf-widget Show documentation
Laf-Widget provides support for common "feel" widgets in look-and-feel libraries
The newest version!
/*
* OffsetCaroselLayout.java
*
* Created on January 12, 2007, 6:11 AM
*
* Copyright 2006-2007 Nigel Hughes
*
* 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.pushingpixels.lafwidget.contrib.blogofbug.swing.layout;
import java.awt.*;
import org.pushingpixels.lafwidget.contrib.blogofbug.swing.components.RichComponent;
/**
* Offsets a normal carousel layout be a fixed amount allowing it be "moved" around the screen.
* @author nigel
*/
public class OffsetCaroselLayout extends CaroselLayout{
/**
* Creates a new instance of OffsetCaroselLayout
* @param forContainer The container to associate the layout with.
*/
public OffsetCaroselLayout(Container forContainer) {
super(forContainer);
}
//Checks to see if the component should be hidden
/**
* Overrides the normal layout method to determine if the object is offscreen and can therefore
* be ignored (giving a performance gain). In addition, it will adjust the alpha of the component
* based on its distance from 3'oclock (or 15:00 if you use a 24-hour compass)
* @param comp The component to consider
* @param angle Its position on the carousel.
* @param scale The scale (applied to size) of the image, that is, how far from the observer is it
* @return True if it should be hidden, false if it should not
*/
protected boolean shouldHide(Component comp, double angle, double scale){
//Quick test where it's visible
double cos = Math.cos(angle);
double sin = Math.sin(angle);
if ((sin>-0.5) && (sin<1) && (cos< 0.3)){
//We are not going to hide it, but we will set the alpha
if (scale>1.00){
scale = Math.abs(scale-1.0);
scale *= 3.0;
scale = 1.0-scale;
} else {
scale = 1.0;
}
if (comp instanceof RichComponent){
((RichComponent) comp).setAlpha((float)scale);
}
return false;
}
return true;
}
/**
* Determines how "wide" the carousel should be drawn based on the side of the container the layout is laying out
* @param target The container the radius should be calculated for
* @param insets Any insets of the container
* @param width The width of the container
* @param height The height of the container
* @param widestComponent The widest component
* @return The size (in a bounding box) of the carousel
*/
protected Dimension getCarouselRadius(Container target, Insets insets, int width, int height, int widestComponent){
width = target.getSize().width - (insets.left + insets.right+(widestComponent/2));;
height = (int) (height/2.5);
return new Dimension(width,height);
}
/**
* Determines the center of the carousel based on the dimensions of the container
* @param insets The container insets
* @param width Width of the container
* @param height The height of the container
* @param widest width of the container
* @return A point representing the new center
*/
protected Point calculateCenter(Insets insets, int width, int height, int widest) {
return new Point(0,((height-insets.bottom)/2)+widest/3);
}
/**
* Over-rides the normal setFrontMostComponent to move the selected component to 3 o'clock instead of 6 o'clock
* @param component The component to move to the 'front'
*/
public void setFrontMostComponent(Component component) {
setTarget(-getPosition(component).getTargetAngle()+ (Math.PI /2));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy