Bug 9031 fixed: Misalignment when using xstring with a matrix
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / text / TextSpriteDrawer.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2010 - DIGITEO - Pierre Lando
4  * Copyright (C) 2012 - Scilab Enterprises - Bruno JOFRET
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  */
12
13 package org.scilab.modules.renderer.JoGLView.text;
14
15 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
16 import org.scilab.forge.scirenderer.shapes.appearance.Color;
17 import org.scilab.forge.scirenderer.texture.TextureDrawer;
18 import org.scilab.modules.graphic_objects.figure.ColorMap;
19 import org.scilab.modules.graphic_objects.textObject.Text;
20 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
21 import org.scilab.modules.renderer.JoGLView.util.TextObjectSpriteDrawer;
22
23 /**
24  * A {@see TextureDrawer} that draw a Scilab {@see Text} object.
25  * @author Pierre Lando
26  */
27 class TextSpriteDrawer extends TextObjectSpriteDrawer implements TextureDrawer {
28
29     /** The scale factor. */
30     private double scaleFactor = 1.0;
31
32     /**
33      * Default constructor.
34      * @param colorMap the color map to use.
35      * @param textObject the scilab {@see Text} to draw.
36      */
37     TextSpriteDrawer(final ColorMap colorMap, final Text textObject) {
38         super(colorMap, textObject);
39         setAlignmentFactor(computeAlignmentFactor(textObject));
40         Appearance appearance = computeAppearance(colorMap, textObject);
41
42         setAppearance(appearance);
43         setThickness((int) Math.ceil(appearance.getLineWidth()));
44     }
45
46     /**
47      * Constructor.
48      * Specifies a scale factor used to scale the text matrix.
49      * @param colorMap the color map to use.
50      * @param textObject the Scilab {@link Text} to draw.
51      * @param scaleFactor the scale factor to apply.
52      */
53     TextSpriteDrawer(final ColorMap colorMap, final Text textObject, double scaleFactor) {
54         super(colorMap, textObject, scaleFactor);
55         setAlignmentFactor(computeAlignmentFactor(textObject));
56         Appearance appearance = computeAppearance(colorMap, textObject);
57
58         setAppearance(appearance);
59         setThickness((int) Math.ceil(appearance.getLineWidth()));
60
61         this.scaleFactor = scaleFactor;
62     }
63
64     /**
65      * Compute and return an {@see Appearance} adapted to the given scilab text.
66      * @param colorMap the current scilab color map.
67      * @param text the given text.
68      * @return an appearance adapted to the given scilab text.
69      */
70     private Appearance computeAppearance(final ColorMap colorMap, final Text text) {
71         Appearance a = new Appearance();
72
73         if (text.getBox() && text.getFillMode()) {
74             Color fillColor = ColorFactory.createColor(colorMap, text.getBackground());
75             a.setFillColor(fillColor);
76         } else {
77             a.setFillColor(new Color(0, 0, 0, 0));
78         }
79
80         if (text.getBox() && text.getLineMode()) {
81             Color lineColor = ColorFactory.createColor(colorMap, text.getLineColor());
82             a.setLineColor(lineColor);
83             a.setLineWidth(1);
84         } else {
85             a.setLineWidth(0);
86         }
87
88         return a;
89     }
90
91     /**
92      * Returns the margin modified by the scale factor.
93      */
94     public int getHMargin() {
95         return (int)(scaleFactor * (double) super.getHMargin());
96     }
97
98     /**
99      * Returns the margin modified by the scale factor.
100      */
101     public int getVMargin() {
102         return (int)(scaleFactor * (double) super.getVMargin());
103     }
104
105     /**
106      * Returns the space width modified by the scale factor.
107      */
108     public int getSpaceWidth() {
109         return (int)(scaleFactor * (double) super.getSpaceWidth());
110     }
111
112 }