Back to index

wims  3.65+svn20090927
SymbolDisplay.java
Go to the documentation of this file.
00001 /*
00002 $Id: SymbolDisplay.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.Displayable;
00034 import fr.ove.openmath.jome.ctrlview.bidim.SymbolLayout;
00035 
00042 public class SymbolDisplay extends BidimDisplay {
00046     private Displayable symbol;
00047     
00053     public SymbolDisplay(GraphicContext graphicContext, Displayable symbol) {
00054         this(graphicContext);
00055         this.symbol = symbol;
00056         symbol.setGraphicContext(graphicContext);
00057     }
00058     
00065     public SymbolDisplay(GraphicContext graphicContext) {
00066         super(graphicContext);
00067         SymbolLayout layout = new SymbolLayout();
00068         layout.initDisplay(this);
00069         setLayout(layout);
00070     }
00071     
00076     public void setSymbol(Displayable symbol) {
00077         this.symbol = symbol;
00078         symbol.setGraphicContext(getGraphicContext());
00079     }
00080     
00084     public Displayable getSymbol() {
00085         return symbol;
00086     }
00087 
00092     public void paint(Graphics g) {
00093         super.paint(g);
00094         Color old = g.getColor();
00095         Rectangle bounds = getBounds();
00096         
00097         if (isSelected()) {
00098             g.setColor(getSelectionColor());
00099             g.fillRect(0, 0, bounds.width - 1, bounds.height - 1);
00100         }
00101         
00102         g.setColor(getForegroundColor());
00103         
00104         if (weDrawBounds())
00105             g.drawRect(0, 0, bounds.width - 1, bounds.height - 1);
00106             
00107         symbol.paint(g);
00108         
00109         g.setColor(old);
00110     }
00111     
00115     public void scaleDisplay() {
00116         setTheFont(getGraphicContext().scaleFont(getLevel()));
00117         // Il faut que le layout manager recalcule les attributs du display.
00118         setComputeAttributes(true);
00119         // Ceci est nécessaire pour que ce soit le layout manager qui retourne
00120         // la preferredSize du display, et donc qu'il y ait recalcul des attributs.
00121         // Sinon, le container considère qu'il a une taille valide, et donc retourne
00122         // comme preferredSize, la précédente, sans qu'il demande le recalcul au LM.
00123         invalidate();
00124         
00125         // On affecte au symbol le nouveau contexte graphique du display, en fait la réduction de font
00126         // effectuée.
00127         // On fait ce test à cause de la construction. Quand on construit le display, on fait un scaleDisplay.
00128         // (au niveau de Display) Or, scaleDisplay (de l'instance donc), est applelé avant que le symbole ne soit
00129         // affecté dans leconstructeur.
00130         if (symbol != null)
00131             symbol.setGraphicContext(getGraphicContext());
00132     }
00133     
00141     public void setAttributes(int ascent, int descent, int shiftX, int shiftY) {
00142         super.setAttributes(ascent, descent, shiftX, shiftY);
00143         symbol.setAscent(ascent);
00144         symbol.setDescent(descent);
00145         symbol.setShiftX(shiftX);
00146         symbol.setShiftY(shiftY);
00147     }
00148     
00153     public void setGraphicContext(GraphicContext graphicContext) {
00154         super.setGraphicContext(graphicContext);
00155         symbol.setGraphicContext(graphicContext);
00156     }
00157 }
00158