Bug 13676 fixed: An invisible figure could not be exported 29/15629/3
Calixte DENIZET [Tue, 2 Dec 2014 13:17:14 +0000 (14:17 +0100)]
Change-Id: Ibfe3c43f4bfa9b77099197e964f7ad9e588c2f2a

scilab/CHANGES_5.5.X
scilab/modules/graphic_export/src/java/org/scilab/modules/graphic_export/Export.java
scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.dia.ref [new file with mode: 0644]
scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.tst [new file with mode: 0644]

index 735bbac..8f86ae2 100644 (file)
@@ -27,6 +27,8 @@ Scilab Bug Fixes
 
 * Bug #13674 fixed - User .wgetrc configuration file is now by-passed when ATOMS does not use a proxy.
 
+* Bug #13676 fixed - An invisible figure could not be exported.
+
 * Bug #13677 fixed - Indentation of examples in assert_checkerror help page was wrong.
 
 
index a7c92ec..95873ec 100644 (file)
@@ -153,7 +153,7 @@ public class Export {
         DrawerVisitor visitor = DrawerVisitor.getVisitor(uid);
         if (visitor != null) {
             Canvas canvas = visitor.getCanvas();
-            if (canvas instanceof JoGLCanvas && isBitmapFormat(types[type])) {
+            if (canvas instanceof JoGLCanvas && isBitmapFormat(types[type]) && visitor.getFigure().getVisible()) {
                 try {
                     return exportBitmap(uid, type, extendedFilename, true, params);
                 } catch (OutOfMemoryError e) {
@@ -226,6 +226,17 @@ public class Export {
                 public void updateObject(Integer id, int property) {
                     // Don't update during the export
                 }
+
+                @Override
+                public void visit(Figure figure) {
+                    // Fix for bug 13676: allow vectorial export even if the figure is invisible
+                    synchronized (figure) {
+                        super.visit(figure);
+                        if (!figure.getVisible()) {
+                            askAcceptVisitor(figure.getChildren());
+                        }
+                    }
+                }
             };
 
             try {
diff --git a/scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.dia.ref b/scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.dia.ref
new file mode 100644 (file)
index 0000000..f59b432
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 13676 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13676
+//
+// <-- Short Description -->
+// An invisible figure could not be exported.
+f = gcf();
+f.visible = "off";
+plot2d();
+path = TMPDIR + "/bug_13676.png";
+xs2png(f, path);
+jimport javax.imageio.ImageIO;
+jimport java.net.URL;
+url = URL.new("file:////" + path);
+bi = ImageIO.read(url);
+w = bi.getWidth(jvoid);
+h = bi.getHeight(jvoid);
+data = uint32(bi.getRGB(0, 0, w, h, [], 0, w));
+jremove ImageIO URL url bi
+// Check if the image is not fully white
+assert_checkfalse(and(data == (uint32(2^32 - 1))))
+ ans  =
+  T  
diff --git a/scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.tst b/scilab/modules/graphic_export/tests/nonreg_tests/bug_13676.tst
new file mode 100644 (file)
index 0000000..92a0f55
--- /dev/null
@@ -0,0 +1,34 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 13676 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13676
+//
+// <-- Short Description -->
+// An invisible figure could not be exported.
+
+f = gcf();
+f.visible = "off";
+plot2d();
+
+path = TMPDIR + "/bug_13676.png";
+xs2png(f, path);
+
+jimport javax.imageio.ImageIO;
+jimport java.net.URL;
+
+url = URL.new("file:////" + path);
+bi = ImageIO.read(url);
+w = bi.getWidth(jvoid);
+h = bi.getHeight(jvoid);
+data = uint32(bi.getRGB(0, 0, w, h, [], 0, w));
+jremove ImageIO URL url bi
+
+// Check if the image is not fully white
+assert_checkfalse(and(data == (uint32(2^32 - 1))))