/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 com.tom_roush.pdfbox.pdmodel.interactive.pagenavigation;
import com.tom_roush.pdfbox.cos.COSBase;
import com.tom_roush.pdfbox.cos.COSBoolean;
import com.tom_roush.pdfbox.cos.COSDictionary;
import com.tom_roush.pdfbox.cos.COSFloat;
import com.tom_roush.pdfbox.cos.COSInteger;
import com.tom_roush.pdfbox.cos.COSName;
import com.tom_roush.pdfbox.pdmodel.common.PDDictionaryWrapper;
/**
* Represents a page transition as defined in paragraph 12.4.4.1 of PDF 32000-1:2008
*
* @author Andrea Vacondio
*
*/
public final class PDTransition extends PDDictionaryWrapper
{
/**
* creates a new transition with default "replace" style {@link PDTransitionStyle#R}
*/
public PDTransition()
{
this(PDTransitionStyle.R);
}
/**
* creates a new transition with the given style.
*
* @param style
*/
public PDTransition(PDTransitionStyle style)
{
super();
getCOSObject().setName(COSName.TYPE, COSName.TRANS.getName());
getCOSObject().setName(COSName.S, style.name());
}
/**
* creates a new transition for an existing dictionary
*
* @param dictionary
*/
public PDTransition(COSDictionary dictionary)
{
super(dictionary);
}
/**
* @return the style for this transition
* @see PDTransitionStyle#valueOf(String)
*/
public String getStyle()
{
return getCOSObject().getNameAsString(COSName.S, PDTransitionStyle.R.name());
}
/**
* @return The dimension in which the specified transition effect shall occur or the default
* {@link PDTransitionDimension#H} if no dimension is found.
* @see PDTransitionDimension
*/
public String getDimension()
{
return getCOSObject().getNameAsString(COSName.DM, PDTransitionDimension.H.name());
}
/**
* Sets the dimension in which the specified transition effect shall occur. Only for {@link PDTransitionStyle#Split}
* and {@link PDTransitionStyle#Blinds}.
*/
public void setDimension(PDTransitionDimension dimension)
{
getCOSObject().setName(COSName.DM, dimension.name());
}
/**
* @return The direction of motion for the specified transition effect or the default {@link PDTransitionMotion#I}
* if no motion is found.
* @see PDTransitionMotion
*/
public String getMotion()
{
return getCOSObject().getNameAsString(COSName.M, PDTransitionMotion.I.name());
}
/**
* Sets the direction of motion for the specified transition effect. Only for {@link PDTransitionStyle#Split},
* {@link PDTransitionStyle#Blinds} and {@link PDTransitionStyle#Fly}.
*/
public void setMotion(PDTransitionMotion motion)
{
getCOSObject().setName(COSName.M, motion.name());
}
/**
* @return the direction in which the specified transition effect shall moves. It can be either a {@link COSInteger}
* or {@link COSName#NONE}. Default to {@link COSInteger#ZERO}
* @see PDTransitionDirection
*/
public COSBase getDirection()
{
COSBase item = getCOSObject().getItem(COSName.DI);
if (item == null)
{
return COSInteger.ZERO;
}
return item;
}
/**
* Sets the direction in which the specified transition effect shall moves. Only for {@link PDTransitionStyle#Wipe},
* {@link PDTransitionStyle#Glitter}, {@link PDTransitionStyle#Fly}, {@link PDTransitionStyle#Cover},
* {@link PDTransitionStyle#Uncover} and {@link PDTransitionStyle#Push}.
*/
public void setDirection(PDTransitionDirection direction)
{
getCOSObject().setItem(COSName.DI, direction.getCOSBase());
}
/**
* @return The duration in seconds of the transition effect or the default 1 if no duration is found.
*/
public float getDuration()
{
return getCOSObject().getFloat(COSName.D, 1);
}
/**
* @param duration The duration of the transition effect, in seconds.
*/
public void setDuration(float duration)
{
getCOSObject().setItem(COSName.D, new COSFloat(duration));
}
/**
* @return The starting or ending scale at which the changes shall be drawn or the default 1 if no scale is found.
* Only for {@link PDTransitionStyle#Fly}.
*/
public float getFlyScale()
{
return getCOSObject().getFloat(COSName.SS, 1);
}
/**
* @param scale The starting or ending scale at which the changes shall be drawn. Only for
* {@link PDTransitionStyle#Fly}.
*/
public void setFlyScale(float scale)
{
getCOSObject().setItem(COSName.SS, new COSFloat(scale));
}
/**
* @return true if the area that shall be flown in is rectangular and opaque. Default is false. Only for
* {@link PDTransitionStyle#Fly}.
*/
public boolean isFlyAreaOpaque()
{
return getCOSObject().getBoolean(COSName.B, false);
}
/**
* @param opaque If true, the area that shall be flown in is rectangular and opaque. Only for
* {@link PDTransitionStyle#Fly}.
*/
public void setFlyAreaOpaque(boolean opaque)
{
getCOSObject().setItem(COSName.B, COSBoolean.getBoolean(opaque));
}
}