001 /*
002 * Copyright 2007 - 2007 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 /* $Id: GraphicsSupport.java,v 86b5e673f9b8 2008/06/24 08:01:00 maxberger $ */
018
019 package net.sourceforge.jeuclid.elements.support;
020
021 import net.sourceforge.jeuclid.Constants;
022 import net.sourceforge.jeuclid.LayoutContext;
023 import net.sourceforge.jeuclid.context.Parameter;
024
025 /**
026 * This class contains helper functions for graphical calculations.
027 *
028 * @version $Revision: 86b5e673f9b8 $
029 */
030 public final class GraphicsSupport {
031
032 /** Minimum line width. */
033 public static final float MIN_LINEWIDTH = 1.0f;
034
035 private GraphicsSupport() {
036 // Empty on purpose.
037 }
038
039 /**
040 * Gets the size of the actual font used (including scriptsizemultiplier).
041 *
042 * @param context
043 * Layout context to use.
044 * @return size of the current font.
045 */
046 public static float getFontsizeInPoint(final LayoutContext context) {
047 final float scriptMultiplier = (float) Math.pow((Float) context
048 .getParameter(Parameter.SCRIPTSIZEMULTIPLIER),
049 (Integer) context.getParameter(Parameter.SCRIPTLEVEL));
050 final float mathsize = (Float) context
051 .getParameter(Parameter.MATHSIZE);
052 final float scriptminsize = (Float) context
053 .getParameter(Parameter.SCRIPTMINSIZE);
054
055 final float scriptsize = mathsize * scriptMultiplier;
056
057 return Math.max(Math.min(scriptminsize, mathsize), scriptsize);
058 }
059
060 /**
061 * Retrieve the width of a line that would be 1pt if unscaled.
062 *
063 * @param context
064 * Layout context to use.
065 * @return line width as float, at least {@link #MIN_LINEWIDTH}
066 */
067 public static float lineWidth(final LayoutContext context) {
068 float lineSize = GraphicsSupport.getFontsizeInPoint(context)
069 / Constants.DEFAULT_FONTSIZE;
070 if (lineSize < GraphicsSupport.MIN_LINEWIDTH) {
071 lineSize = GraphicsSupport.MIN_LINEWIDTH;
072 }
073 return lineSize;
074 }
075
076 }