Back to index

wims  3.65+svn20090927
SuperscriptLayout.java
Go to the documentation of this file.
00001 /*
00002 $Id: SuperscriptLayout.java,v 1.3 2003/02/18 11:48:47 sander Exp $
00003 */
00004 
00005 
00006 /*
00007 Copyright (C) 2001-2002 Mainline Project (I3S - ESSI - CNRS -UNSA)
00008 
00009 This library is free software; you can redistribute it and/or
00010 modify it under the terms of the GNU Lesser General Public
00011 License as published by the Free Software Foundation; either
00012 version 2.1 of the License, or (at your option) any later version.
00013 
00014 This library is distributed in the hope that it will be useful,
00015 but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public
00020 License along with this library; if not, write to the Free Software
00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 
00023 For further information on the GNU Lesser General Public License,
00024 see: http://www.gnu.org/copyleft/lesser.html
00025 For further information on this library, contact: mainline@essi.fr
00026 */
00027 
00028 
00029 package fr.ove.openmath.jome.ctrlview.bidim;
00030 
00031 import java.awt.*;
00032 import fr.ove.openmath.jome.ctrlview.bidim.Display;
00033 import fr.ove.openmath.jome.ctrlview.bidim.DisplayLayout;
00034 import fr.ove.openmath.jome.ctrlview.bidim.HorizontalLayout;
00035 import fr.ove.openmath.jome.ctrlview.bidim.selection.events.SelectionEvent;
00036 import fr.ove.openmath.jome.model.*;
00037 
00045 public class SuperscriptLayout extends ScriptLayout {
00051     public Dimension computeAttributes() {
00052         int ascent = 0;
00053         int descent = 0;
00054         int width = 0;
00055         int height = 0;
00056         
00057         Display base, exponent;
00058         int decalage = 0;
00059         
00060         base = (Display) displayToLay.getComponent(0);
00061         base.setSize(base.getPreferredSize());
00062         width += base.getWidth() + base.getShiftX();
00063         
00064         exponent = (Display) displayToLay.getComponent(1);
00065 
00066         if (base.getLayout() instanceof SuperscriptLayout)
00067             ((DisplayLayout) exponent.getLayout()).updateLevel(((Display) base.getComponent(1)).getLevel()+ 1);
00068         else
00069             ((DisplayLayout) exponent.getLayout()).updateLevel(base.getLevel()+ 1);
00070         
00071         exponent.setSize(exponent.getPreferredSize());
00072         
00073         if (base.getLayout() instanceof SuperscriptLayout) {
00074             Display exp_base = (Display) base.getComponent(1);
00075             decalage = computeExponentShift(exp_base, exponent);
00076         }
00077         else
00078             decalage = computeExponentShift(base, exponent);
00079         
00080         /* ############################# */
00081         base.setShiftY(0); // ATTENTION : rajout !!!!!!
00082         /* ############################# */
00083 
00084         exponent.setShiftY(-decalage);
00085         width += exponent.getWidth() + exponent.getShiftX();
00086                 
00087         displayToLay.setDescent(base.getDescent()); 
00088         displayToLay.setAscent(decalage + exponent.getAscent());
00089         height += displayToLay.getAscent() + displayToLay.getDescent();
00090         displayToLay.setSize(width , height);
00091         
00092         displayToLay.setComputeAttributes(false);
00093         return new Dimension(width, height);
00094     }
00095     
00101     private /*public*/ int computeExponentShift(Display base, Display script) {
00102         if (base instanceof StringDisplay)
00103             return (int) (Math.round(base.getAscent()*0.3)) + script.getDescent() -
00104                                      base.getShiftY();
00105         else 
00106             return (int) (Math.round(base.getAscent()*0.7)) + script.getDescent() -
00107                                      base.getShiftY();
00108     }
00109 }