diff --git a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index d9689c13940..bb4e0236c24 100644 --- a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -2737,7 +2737,8 @@ private MergeSourceViewer createPart(Composite parent) { createSourceViewer(parent, getDirection()), getResourceBundle(), getCompareConfiguration().getContainer()); final StyledText te= viewer.getSourceViewer().getTextWidget(); - + // Clear cached line heights upon zoom changes, as they are no longer valid + te.addListener(SWT.ZoomChanged, e -> resetCachedLineHeights(viewer)); if (!fConfirmSave) { viewer.hideSaveAction(); } @@ -4398,13 +4399,7 @@ private int getHeightBetweenLines(MergeSourceViewer tp, int fromLine, int toLine lineHeights = new ArrayList<>(); lineHeights.addAll(Collections.nCopies(w.getLineCount(), null)); this.lineHeightsByViewer.put(tp, lineHeights); - tp.getSourceViewer().addTextListener(event -> { - List lineHeightsList = lineHeightsByViewer.get(tp); - if (lineHeightsList != null) { - lineHeightsList.clear(); - lineHeightsList.addAll(Collections.nCopies(w.getLineCount(), null)); - } - }); + tp.getSourceViewer().addTextListener(event -> resetCachedLineHeights(tp)); } int lineSpacing = w.getLineSpacing(); @@ -4429,6 +4424,15 @@ private int getHeightBetweenLines(MergeSourceViewer tp, int fromLine, int toLine return height; } + private void resetCachedLineHeights(MergeSourceViewer mergeViewer) { + StyledText styledText = mergeViewer.getSourceViewer().getTextWidget(); + List lineHeightsList = lineHeightsByViewer.get(mergeViewer); + if (lineHeightsList != null) { + lineHeightsList.clear(); + lineHeightsList.addAll(Collections.nCopies(styledText.getLineCount(), null)); + } + } + private void invalidateLines() { if (isThreeWay() && isAncestorVisible()) { if (Utilities.okToUse(fAncestorCanvas)) {