Bug 13685 fixed: LaTeX was not detected when specified in ticks_format 22/16222/3
Calixte DENIZET [Mon, 23 Mar 2015 17:01:07 +0000 (18:01 +0100)]
Change-Id: Ia6d4078d743ad3a65d81d3290a16a233b9cbb32e

scilab/CHANGES_5.5.X
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/axes/TicksProperty.java
scilab/modules/graphics/tests/nonreg_tests/bug_13685.tst [new file with mode: 0644]
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/ruler/AxesRulerSpriteFactory.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/util/FormattedTextSpriteDrawer.java
scilab/modules/scirenderer/src/org/scilab/forge/scirenderer/ruler/graduations/UserDefinedFormat.java

index d7e92bc..cfc6a22 100644 (file)
@@ -90,6 +90,8 @@ Scilab Bug Fixes
 
 * Bug #13681 fixed - Calling cdfnor to get the X vector sometimes produced a vector with some NaN values.
 
+* Bug #13685 fixed - LaTeX was not detected when specified in ticks_format.
+
 * Bug #13689 fixed - There were errors in reading enum from hdf5 files.
 
 * Bug #13690 fixed - tight_limits property can now manage X, Y and Z axis separately.
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13685.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_13685.tst
new file mode 100644 (file)
index 0000000..5c11db9
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- INTERACTIVE TEST -->
+
+// <-- Non-regression test for bug 13685 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13685
+//
+// <-- Short Description -->
+// LaTeX was not detected when specified in ticks_format.
+
+clf();
+plot2d();
+
+// ticks don't use LaTeX
+a = gca();
+
+// ticks now use LaTeX
+a.ticks_format=["$%.1f$","$%.1f$",""];
index a86f4dd..60de957 100644 (file)
@@ -194,6 +194,16 @@ public class AxesRulerSpriteFactory implements RulerSpriteFactory {
      * @return a simple texture representing the given value with the adapted format.
      */
     private Texture createSimpleSprite(String text, TextureManager textureManager) {
+        if (FormattedTextSpriteDrawer.isLatex(text) || FormattedTextSpriteDrawer.isMathML(text)) {
+            FormattedTextSpriteDrawer textObjectSpriteDrawer = new FormattedTextSpriteDrawer(colorMap, text, axisProperty.getTicks().getDefaultFont());
+            Texture texture = textureManager.createTexture();
+            texture.setMagnificationFilter(Texture.Filter.LINEAR);
+            texture.setMinifyingFilter(Texture.Filter.LINEAR);
+            texture.setDrawer(textObjectSpriteDrawer);
+
+            return texture;
+        }
+
         Font font = FontManager.getSciFontManager().getFontFromIndex(axisProperty.getFontStyle(), axisProperty.getFontSize());
         final TextEntity textEntity = new TextEntity(text);
         textEntity.setTextAntiAliased(true);
index 7eee0b1..5b2c533 100644 (file)
@@ -12,6 +12,7 @@ package org.scilab.modules.renderer.JoGLView.util;
 
 import org.scilab.forge.jlatexmath.TeXConstants;
 import org.scilab.forge.jlatexmath.TeXFormula;
+import org.scilab.forge.jlatexmath.TeXIcon;
 import org.scilab.forge.scirenderer.texture.TextEntity;
 import org.scilab.forge.scirenderer.texture.TextureDrawer;
 import org.scilab.forge.scirenderer.texture.TextureDrawingTools;
@@ -31,32 +32,34 @@ import java.awt.Dimension;
 public class FormattedTextSpriteDrawer implements TextureDrawer {
     private final TextEntity textEntity;
     private final Dimension dimension;
+    private final int descent;
     private final Icon icon;
 
-    public FormattedTextSpriteDrawer(ColorMap colorMap, FormattedText formattedText) {
-        if (formattedText != null) {
-            String text = formattedText.getText();
-            Font font = formattedText.getFont();
+    public FormattedTextSpriteDrawer(ColorMap colorMap, String text, Font font) {
+        if (text != null && font != null) {
             if (isLatex(text)) {
                 LoadClassPath.loadOnUse("graphics_latex_textrendering");
                 TeXFormula formula = new TeXFormula(text.substring(1, text.length() - 1));
                 formula.setColor(ColorFactory.createColor(colorMap, font.getColor()));
                 icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, FontManager.scilabSizeToAwtSize(font.getSize()));
+                descent = ((TeXIcon) icon).getIconDepth();
             } else if (isMathML(text)) {
                 LoadClassPath.loadOnUse("graphics_mathml_textrendering");
                 icon = ScilabSpecialTextUtilities.compileMathMLExpression(text, ((int) FontManager.scilabSizeToAwtSize(font.getSize() + .5)), ColorFactory.createColor(colorMap, font.getColor()));
+                descent = 0;
             } else {
                 icon = null;
+                descent = 0;
             }
 
             if (icon != null) {
                 textEntity = null;
-                dimension = new Dimension(icon.getIconWidth(), icon.getIconHeight());
+                dimension = new Dimension(icon.getIconWidth(), icon.getIconHeight() + descent);
             } else {
-                textEntity = new TextEntity(formattedText.getText());
+                textEntity = new TextEntity(text);
 
                 textEntity.setFont(FontManager.getSciFontManager().getFontFromIndex(font.getStyle(), font.getSize()));
-                textEntity.setText(formattedText.getText());
+                textEntity.setText(text);
                 textEntity.setTextColor(ColorFactory.createColor(colorMap, font.getColor()));
                 textEntity.setTextUseFractionalMetrics(font.getFractional());
                 textEntity.setTextAntiAliased(true);
@@ -67,15 +70,20 @@ public class FormattedTextSpriteDrawer implements TextureDrawer {
             icon = null;
             textEntity = null;
             dimension = new Dimension();
+            descent = 0;
         }
     }
 
+    public FormattedTextSpriteDrawer(ColorMap colorMap, FormattedText formattedText) {
+        this(colorMap, formattedText != null ? formattedText.getText() : null, formattedText != null ? formattedText.getFont() : null);
+    }
+
     @Override
     public void draw(TextureDrawingTools drawingTools) {
         if (textEntity != null) {
             drawingTools.draw(textEntity, 0, 0);
         } else if (icon != null) {
-            drawingTools.draw(icon, 0, 0);
+            drawingTools.draw(icon, 0, descent);
         }
     }
 
@@ -98,7 +106,7 @@ public class FormattedTextSpriteDrawer implements TextureDrawer {
      * @param string the given string.
      * @return true if the given string represent a latex entity.
      */
-    private boolean isLatex(String string) {
+    public static boolean isLatex(String string) {
         return (string.length() >= 2) && string.endsWith("$") && string.startsWith("$");
     }
 
@@ -107,7 +115,7 @@ public class FormattedTextSpriteDrawer implements TextureDrawer {
      * @param string the given string.
      * @return true if the given string represent a MathML entity.
      */
-    private boolean isMathML(String string) {
+    public static boolean isMathML(String string) {
         return (string.length() >= 2) && string.endsWith(">") && string.startsWith("<");
     }
 }
index 311ee6b..6a63ab8 100644 (file)
@@ -43,6 +43,10 @@ public class UserDefinedFormat extends DecimalFormat {
         this.fallback = fallback;
     }
 
+    public String getFormat() {
+        return format;
+    }
+
     /**
      * {@inheritDoc}
      */