Fix resize issues. 76/13976/2
Vincent COUVERT [Tue, 11 Mar 2014 14:49:58 +0000 (15:49 +0100)]
To test : test_run gui uicontrol_save_load_v5

Change-Id: I3e64850d896099adae9544f0d6368b84db86ccea

scilab/modules/gui/src/java/org/scilab/modules/gui/SwingViewWidget.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/frame/SwingScilabFrame.java
scilab/modules/gui/src/java/org/scilab/modules/gui/utils/UnitsConverter.java
scilab/modules/gui/tests/unit_tests/uicontrol_save_load_v5.dia.ref
scilab/modules/gui/tests/unit_tests/uicontrol_save_load_v5.tst

index 4644ddf..093c821 100644 (file)
@@ -219,6 +219,12 @@ public final class SwingViewWidget {
                 updatePosition(uiControl, uid, value);
                 break;
             }
+            case __GO_UI_UNITS__: {
+                /* Convert value according to units */
+                Double[] p = (Double[]) GraphicController.getController().getProperty(uid, __GO_POSITION__);
+                updatePosition(uiControl, uid, p);
+                break;
+            }
             case __GO_UI_RELIEF__: {
                 uiControl.setRelief((String) value);
                 break;
index 52f4ddb..7bcb72e 100644 (file)
@@ -90,6 +90,8 @@ import org.scilab.modules.gui.utils.Position;
 import org.scilab.modules.gui.utils.PositionConverter;
 import org.scilab.modules.gui.utils.ScilabRelief;
 import org.scilab.modules.gui.utils.Size;
+import org.scilab.modules.gui.utils.UnitsConverter;
+import org.scilab.modules.gui.utils.UnitsConverter.UicontrolUnits;
 
 /**
  * Swing implementation for Scilab frames in GUI
@@ -120,12 +122,17 @@ public class SwingScilabFrame extends JPanel implements SwingViewObject, SimpleF
 
                     Double[] newPosition = new Double[4];
                     Double[] positions = (Double[]) GraphicController.getController().getProperty(getId(), GraphicObjectProperties.__GO_POSITION__);
-                    newPosition[0] = positions[0];
-                    newPosition[1] = positions[1];
-                    newPosition[2] = getSize().getWidth();
-                    newPosition[3] = getSize().getHeight();
-                    positions[2] = getSize().getWidth();
-                    positions[3] = getSize().getHeight();
+                    if (positions == null) {
+                        // Position property not yet set
+                        return;
+                    }
+                    UicontrolUnits unitsProperty = UnitsConverter.stringToUnitsEnum((String) GraphicController.getController().getProperty(uid, GraphicObjectProperties.__GO_UI_UNITS__));
+                    newPosition[0] = UnitsConverter.convertFromPixel(getPosition().getX(), unitsProperty, (SwingScilabFrame) SwingView.getFromId(uid), true);
+                    newPosition[1] = UnitsConverter.convertFromPixel(getPosition().getY(), unitsProperty, (SwingScilabFrame) SwingView.getFromId(uid), true);
+                    newPosition[2] = UnitsConverter.convertFromPixel(getWidth(), unitsProperty, (SwingScilabFrame) SwingView.getFromId(uid), true);
+                    newPosition[3] = UnitsConverter.convertFromPixel(getHeight(), unitsProperty, (SwingScilabFrame) SwingView.getFromId(uid), true);
+                    positions[2] = newPosition[2];
+                    positions[3] = newPosition[3];
                     invalidate();
                     if (getParent() != null && getParent().getLayout() == null) {
                         GraphicController.getController().setProperty(getId(), GraphicObjectProperties.__GO_POSITION__, newPosition);
index 1d094ff..a4191fb 100644 (file)
@@ -119,7 +119,7 @@ public final class UnitsConverter {
             case CENTIMETERS:
                 return value * CM_PER_INCH / POINT_PER_INCH;
             case PIXELS:
-                return value * CallScilabBridge.getScreenResolution() / POINT_PER_INCH;
+                return value * CallScilabBridge.getScreenResolution() / POINT_PER_INCH + 1;
             default:
                 return 0.0;
         }
@@ -172,13 +172,13 @@ public final class UnitsConverter {
                         refSize = parentSize[3].intValue();
                     }
                 }
-                return (int) (value * refSize * POINT_PER_INCH / CallScilabBridge.getScreenResolution());
+                return (value * refSize * POINT_PER_INCH / CallScilabBridge.getScreenResolution());
             case INCHES:
-                return (int) (value * POINT_PER_INCH);
+                return (value * POINT_PER_INCH);
             case CENTIMETERS:
-                return (int) (value * POINT_PER_INCH / CM_PER_INCH);
+                return (value * POINT_PER_INCH / CM_PER_INCH);
             case PIXELS:
-                return (int) (value * POINT_PER_INCH / CallScilabBridge.getScreenResolution());
+                return Math.round((value * POINT_PER_INCH / CallScilabBridge.getScreenResolution()));
             default:
                 return 0;
         }
index 5338dc1..17eb053 100644 (file)
@@ -1,10 +1,10 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - INRIA - Vincent COUVERT 
-// 
+// Copyright (C) 2008 - INRIA - Vincent COUVERT
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 // This test check save and load functions used with uicontrols
 // The following functions are tested:
@@ -44,6 +44,7 @@ h.tag = "My uimenu tag"; // Default is ""
 save(TMPDIR + "/uicontrol.scg", h);
 hsaved = h;
 clear h;
+scf(1);
 // Load saved handle
 load(TMPDIR + "/uicontrol.scg");
 // Check if properties are equal
@@ -52,7 +53,7 @@ if or(h.backgroundcolor<>hsaved.backgroundcolor) then bugmes();quit;end
 if or(h.enable<>hsaved.enable) then bugmes();quit;end
 if or(h.fontangle<>hsaved.fontangle) then bugmes();quit;end
 if or(h.fontname<>hsaved.fontname) then bugmes();quit;end
-//if or(h.fontsize<>hsaved.fontsize) then bugmes();quit;end // TODO FIX ME !!
+if or(h.fontsize<>hsaved.fontsize) then bugmes();quit;end
 if or(h.fontunits<>hsaved.fontunits) then bugmes();quit;end
 if or(h.fontweight<>hsaved.fontweight) then bugmes();quit;end
 if or(h.foregroundcolor<>hsaved.foregroundcolor) then bugmes();quit;end
@@ -60,7 +61,7 @@ if or(h.horizontalalignment<>hsaved.horizontalalignment) then bugmes();quit;end
 if or(h.listboxtop<>hsaved.listboxtop) then bugmes();quit;end
 if or(h.max<>hsaved.max) then bugmes();quit;end
 if or(h.min<>hsaved.min) then bugmes();quit;end
-if abs(sum(h.position-hsaved.position)) > 4 then bugmes();quit;end // TODO FIX ME !! Can have a difference of 1 (point or pixel) when getting position
+if or(h.position<>hsaved.position) then bugmes();quit;end
 if or(h.relief<>hsaved.relief) then bugmes();quit;end
 if or(h.sliderstep<>hsaved.sliderstep) then bugmes();quit;end
 if or(h.string<>hsaved.string) then bugmes();quit;end
index f339d3a..7b5c00a 100644 (file)
@@ -1,10 +1,10 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - INRIA - Vincent COUVERT 
-// 
+// Copyright (C) 2008 - INRIA - Vincent COUVERT
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
 // This test check save and load functions used with uicontrols
@@ -50,6 +50,7 @@ save(TMPDIR + "/uicontrol.scg", h);
 hsaved = h;
 clear h;
 
+scf(1);
 // Load saved handle
 load(TMPDIR + "/uicontrol.scg");
 
@@ -59,7 +60,7 @@ if or(h.backgroundcolor<>hsaved.backgroundcolor) then pause; end
 if or(h.enable<>hsaved.enable) then pause; end
 if or(h.fontangle<>hsaved.fontangle) then pause; end
 if or(h.fontname<>hsaved.fontname) then pause; end
-//if or(h.fontsize<>hsaved.fontsize) then pause; end // TODO FIX ME !!
+if or(h.fontsize<>hsaved.fontsize) then pause; end
 if or(h.fontunits<>hsaved.fontunits) then pause; end
 if or(h.fontweight<>hsaved.fontweight) then pause; end
 if or(h.foregroundcolor<>hsaved.foregroundcolor) then pause; end
@@ -67,7 +68,7 @@ if or(h.horizontalalignment<>hsaved.horizontalalignment) then pause; end
 if or(h.listboxtop<>hsaved.listboxtop) then pause; end
 if or(h.max<>hsaved.max) then pause; end
 if or(h.min<>hsaved.min) then pause; end
-if abs(sum(h.position-hsaved.position)) > 4 then pause; end // TODO FIX ME !! Can have a difference of 1 (point or pixel) when getting position
+if or(h.position<>hsaved.position) then pause; end
 if or(h.relief<>hsaved.relief) then pause; end
 if or(h.sliderstep<>hsaved.sliderstep) then pause; end
 if or(h.string<>hsaved.string) then pause; end