Bug 581248 - CellVisualUpdateEvent incorrect for header regions when
scrolled

Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>

Change-Id: I866d868d36eb105fd8f8d4fe6deb99758276841f
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
index e078f4f..255bcb3 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/event/CellVisualUpdateEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2020 Dirk Fauth and others.
+ * Copyright (c) 2013, 2022 Dirk Fauth and others.
  *
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
 import org.eclipse.nebula.widgets.nattable.grid.layer.DimensionallyDependentLayer;
 import org.eclipse.nebula.widgets.nattable.layer.ILayer;
 import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
+import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
 
 /**
  * Specialization of the CellVisualChangeEvent. The only difference is the
@@ -66,6 +67,17 @@
         if (!(localLayer instanceof DimensionallyDependentLayer)) {
             columnPos = localLayer.underlyingToLocalColumnPosition(getLayer(), this.columnPosition);
             rowPos = localLayer.underlyingToLocalRowPosition(getLayer(), this.rowPosition);
+        } else {
+            DimensionallyDependentLayer ddl = (DimensionallyDependentLayer) localLayer;
+
+            if (ddl.getHorizontalLayerDependency() instanceof ViewportLayer) {
+                int columnIndex = this.layer.getColumnIndexByPosition(this.columnPosition);
+                columnPos = ((ViewportLayer) ddl.getHorizontalLayerDependency()).getColumnPositionByIndex(columnIndex);
+            }
+            if (ddl.getVerticalLayerDependency() instanceof ViewportLayer) {
+                int rowIndex = this.layer.getRowIndexByPosition(this.rowPosition);
+                rowPos = ((ViewportLayer) ddl.getVerticalLayerDependency()).getRowPositionByIndex(rowIndex);
+            }
         }
 
         if (columnPos < 0 || rowPos < 0) {