Bug 568002 - Column resize in mixed percentage/pixel width configuration
incorrect with display scaling
Change-Id: I093dfc13daedb6661f34a5961153f6a39f9ba78e
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfigPercentageTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfigPercentageTest.java
index 4e3d0d4..b51255a 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfigPercentageTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfigPercentageTest.java
@@ -1407,4 +1407,91 @@
assertEquals(187, scaledSizeConfig.getSize(2));
assertEquals(563, scaledSizeConfig.getAggregateSize(3));
}
+
+ @Test
+ public void setSizeMixedScaled() {
+ // use dpi of 144 which will result in a dpi factor of 1.5
+ this.sizeConfigMixedMode.setDpiConverter(new FixedScalingDpiConverter(144));
+ this.sizeConfigMixedMode.calculatePercentages(750, 3);
+
+ assertEquals(150, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(150, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(450, this.sizeConfigMixedMode.getSize(2));
+
+ // resize position 0 to 200
+ this.sizeConfigMixedMode.setSize(0, 200);
+
+ // the position itself needs to be 200
+ assertEquals(300, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(150, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(300, this.sizeConfigMixedMode.getSize(2));
+
+ // as we're in percentage mode, the aggregate size shouldn't have
+ // changed
+ assertEquals(750, this.sizeConfigMixedMode.getAggregateSize(3));
+
+ // resize position 1 to 200
+ this.sizeConfigMixedMode.setSize(1, 200);
+
+ // the position itself needs to be 200
+ assertEquals(300, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(300, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(150, this.sizeConfigMixedMode.getSize(2));
+
+ // as we're in percentage mode, the aggregate size shouldn't have
+ // changed
+ assertEquals(750, this.sizeConfigMixedMode.getAggregateSize(3));
+
+ // resize position 2
+ this.sizeConfigMixedMode.setSize(2, 500);
+
+ // no changes as last column should take remaining space
+ assertEquals(300, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(300, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(150, this.sizeConfigMixedMode.getSize(2));
+
+ // as we're in percentage mode, the aggregate size shouldn't have
+ // changed
+ assertEquals(750, this.sizeConfigMixedMode.getAggregateSize(3));
+ }
+
+ @Test
+ public void setSizeMixedScaled2() {
+ // use dpi of 144 which will result in a dpi factor of 1.5
+ this.sizeConfigMixedMode.setDpiConverter(new FixedScalingDpiConverter(144));
+ this.sizeConfigMixedMode.calculatePercentages(750, 3);
+
+ assertEquals(150, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(150, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(450, this.sizeConfigMixedMode.getSize(2));
+
+ this.sizeConfigMixedMode.setSize(1, 350);
+
+ assertEquals(150, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(525, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(75, this.sizeConfigMixedMode.getSize(2));
+
+ // as we're in percentage mode, the aggregate size shouldn't have
+ // changed
+ assertEquals(750, this.sizeConfigMixedMode.getAggregateSize(3));
+ }
+
+ @Test
+ public void setSizeMixed2() {
+
+ assertEquals(100, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(100, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(300, this.sizeConfigMixedMode.getSize(2));
+
+ this.sizeConfigMixedMode.setSize(1, 350);
+
+ assertEquals(100, this.sizeConfigMixedMode.getSize(0));
+ assertEquals(350, this.sizeConfigMixedMode.getSize(1));
+ assertEquals(50, this.sizeConfigMixedMode.getSize(2));
+
+ // as we're in percentage mode, the aggregate size shouldn't have
+ // changed
+ assertEquals(500, this.sizeConfigMixedMode.getAggregateSize(3));
+ }
+
}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfig.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfig.java
index 66bbdba..3592512 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfig.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/SizeConfig.java
@@ -586,7 +586,7 @@
fixPercentageValues(percentageSpace);
// now update the adjacent positions
- double diffPercentage = ((double) diff * 100) / percentageSpace;
+ double diffPercentage = ((double) upScale(diff) * 100) / percentageSpace;
updateAdjacent(position, diffPercentage, percentageSpace);
}
} else if (this.availableSpace > 0) {
@@ -1230,7 +1230,7 @@
toModify.put(i, this.realSizeMap.get(i));
modifySum += positionPercentageValue;
} else if (!isPercentageSizing(i) && positionValue != -1) {
- fixedSum += positionValue;
+ fixedSum += upScale(positionValue);
}
}