Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Fauth2021-05-21 12:43:28 +0000
committerDirk Fauth2021-05-21 13:03:31 +0000
commit88beb21649585624d756aa8218a94cbc55b82bf4 (patch)
treecfeb1b9781d4d12f5dd2834b4c8ecc7566837f98
parentb11a12fd71bddad68c236c36aef7ece2358bf23a (diff)
downloadorg.eclipse.nebula.widgets.nattable-88beb21649585624d756aa8218a94cbc55b82bf4.tar.gz
org.eclipse.nebula.widgets.nattable-88beb21649585624d756aa8218a94cbc55b82bf4.tar.xz
org.eclipse.nebula.widgets.nattable-88beb21649585624d756aa8218a94cbc55b82bf4.zip
Bug 573695 - Dynamic scaling in freeze state causes rendering glitches
Change-Id: If51f14715bf35b3c4560ee0b87b4a42177c190d3 Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
-rw-r--r--org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayerHideShowTest.java60
-rw-r--r--org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java46
2 files changed, 105 insertions, 1 deletions
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayerHideShowTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayerHideShowTest.java
index f2301fa8..9d19cea9 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayerHideShowTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayerHideShowTest.java
@@ -33,6 +33,8 @@ import org.eclipse.nebula.widgets.nattable.hideshow.command.RowHideCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ShowAllColumnsCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ShowAllRowsCommand;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
+import org.eclipse.nebula.widgets.nattable.layer.FixedScalingDpiConverter;
+import org.eclipse.nebula.widgets.nattable.layer.command.ConfigureScalingCommand;
import org.eclipse.nebula.widgets.nattable.layer.event.RowDeleteEvent;
import org.eclipse.nebula.widgets.nattable.layer.event.RowInsertEvent;
import org.eclipse.nebula.widgets.nattable.reorder.ColumnReorderLayer;
@@ -101,6 +103,9 @@ public class CompositeFreezeLayerHideShowTest {
}
});
+
+ this.compositeFreezeLayer.doCommand(
+ new ConfigureScalingCommand(new FixedScalingDpiConverter(96)));
}
@Test
@@ -1656,7 +1661,62 @@ public class CompositeFreezeLayerHideShowTest {
reset();
}
+ @Test
+ public void testFreezeColumnDynamicScale() {
+ this.compositeFreezeLayer.doCommand(
+ new FreezeColumnCommand(this.compositeFreezeLayer, 1));
+
+ assertEquals(2, this.freezeLayer.getColumnCount());
+ assertEquals(0, this.freezeLayer.getRowCount());
+ assertEquals(1, this.freezeLayer.getBottomRightPosition().columnPosition);
+ assertEquals(-1, this.freezeLayer.getBottomRightPosition().rowPosition);
+
+ assertEquals(3, this.viewportLayer.getColumnCount());
+ assertEquals(5, this.viewportLayer.getRowCount());
+ assertEquals(2, this.viewportLayer.getMinimumOriginColumnPosition());
+ assertEquals(0, this.viewportLayer.getMinimumOriginRowPosition());
+ assertEquals(200, this.viewportLayer.getMinimumOrigin().getX());
+ assertEquals(0, this.viewportLayer.getMinimumOrigin().getY());
+
+ this.compositeFreezeLayer.doCommand(
+ new ConfigureScalingCommand(new FixedScalingDpiConverter(144)));
+
+ assertEquals(300, this.viewportLayer.getMinimumOrigin().getX());
+ assertEquals(0, this.viewportLayer.getMinimumOrigin().getY());
+
+ reset();
+ }
+
+ @Test
+ public void testFreezeRowDynamicScale() {
+ this.compositeFreezeLayer.doCommand(
+ new FreezeRowCommand(this.compositeFreezeLayer, 1));
+
+ assertEquals(0, this.freezeLayer.getColumnCount());
+ assertEquals(2, this.freezeLayer.getRowCount());
+ assertEquals(-1, this.freezeLayer.getBottomRightPosition().columnPosition);
+ assertEquals(1, this.freezeLayer.getBottomRightPosition().rowPosition);
+
+ assertEquals(5, this.viewportLayer.getColumnCount());
+ assertEquals(3, this.viewportLayer.getRowCount());
+ assertEquals(0, this.viewportLayer.getMinimumOriginColumnPosition());
+ assertEquals(2, this.viewportLayer.getMinimumOriginRowPosition());
+ assertEquals(0, this.viewportLayer.getMinimumOrigin().getX());
+ assertEquals(40, this.viewportLayer.getMinimumOrigin().getY());
+
+ this.compositeFreezeLayer.doCommand(
+ new ConfigureScalingCommand(new FixedScalingDpiConverter(144)));
+
+ assertEquals(0, this.viewportLayer.getMinimumOrigin().getX());
+ assertEquals(60, this.viewportLayer.getMinimumOrigin().getY());
+
+ reset();
+ }
+
private void reset() {
+ this.compositeFreezeLayer.doCommand(
+ new ConfigureScalingCommand(new FixedScalingDpiConverter(96)));
+
this.compositeFreezeLayer.doCommand(new UnFreezeGridCommand());
assertEquals(0, this.freezeLayer.getColumnCount());
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java
index 6406a0bc..03299caa 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2020 Original authors and others.
+ * Copyright (c) 2012, 2021 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -21,6 +21,7 @@ import org.eclipse.nebula.widgets.nattable.grid.command.ClientAreaResizeCommand;
import org.eclipse.nebula.widgets.nattable.group.command.ViewportSelectColumnGroupCommandHandler;
import org.eclipse.nebula.widgets.nattable.group.command.ViewportSelectRowGroupCommandHandler;
import org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform;
+import org.eclipse.nebula.widgets.nattable.layer.IDpiConverter;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;
import org.eclipse.nebula.widgets.nattable.layer.command.ConfigureScalingCommand;
@@ -124,6 +125,9 @@ public class ViewportLayer extends AbstractLayerTransform implements IUniqueInde
private MoveViewportRunnable edgeHoverRunnable;
+ private IDpiConverter horizontalDpiConverter;
+ private IDpiConverter verticalDpiConverter;
+
public ViewportLayer(IUniqueIndexLayer underlyingLayer) {
super(underlyingLayer);
this.scrollableLayer = underlyingLayer;
@@ -1118,6 +1122,46 @@ public class ViewportLayer extends AbstractLayerTransform implements IUniqueInde
} else if (command instanceof ConfigureScalingCommand) {
invalidateHorizontalStructure();
invalidateVerticalStructure();
+
+ int originDpiX = 0;
+ int originDpiY = 0;
+ int minimumDpiX = 0;
+ int minimumDpiY = 0;
+ int savedDpiX = 0;
+ int savedDpiY = 0;
+ if (this.horizontalDpiConverter != null) {
+ originDpiX = this.horizontalDpiConverter.convertDpiToPixel(this.origin.getX());
+ savedDpiX = this.horizontalDpiConverter.convertDpiToPixel(this.savedOrigin.getX());
+
+ if (this.minimumOrigin.getX() > 0) {
+ minimumDpiX = this.horizontalDpiConverter.convertDpiToPixel(this.minimumOrigin.getX());
+ }
+ }
+
+ if (this.verticalDpiConverter != null) {
+ originDpiY = this.verticalDpiConverter.convertDpiToPixel(this.origin.getY());
+ savedDpiY = this.verticalDpiConverter.convertDpiToPixel(this.savedOrigin.getY());
+
+ if (this.minimumOrigin.getY() > 0) {
+ minimumDpiY = this.verticalDpiConverter.convertDpiToPixel(this.minimumOrigin.getY());
+ }
+ }
+
+ this.horizontalDpiConverter = ((ConfigureScalingCommand) command).getHorizontalDpiConverter();
+ this.verticalDpiConverter = ((ConfigureScalingCommand) command).getVerticalDpiConverter();
+
+ this.origin = new PixelCoordinate(
+ this.horizontalDpiConverter.convertPixelToDpi(originDpiX),
+ this.verticalDpiConverter.convertPixelToDpi(originDpiY));
+ this.savedOrigin = new PixelCoordinate(
+ this.horizontalDpiConverter.convertPixelToDpi(savedDpiX),
+ this.verticalDpiConverter.convertPixelToDpi(savedDpiY));
+
+ if (minimumDpiX > 0 || minimumDpiY > 0) {
+ this.minimumOrigin = new PixelCoordinate(
+ this.horizontalDpiConverter.convertPixelToDpi(minimumDpiX),
+ this.verticalDpiConverter.convertPixelToDpi(minimumDpiY));
+ }
}
return super.doCommand(command);
}

Back to the top