From f4923f3e6fdaed9fdee05e0e0e47766ec056edee Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Mon, 31 Jan 2011 16:57:15 +0300 Subject: [PATCH] IDEA-64648 Soft wraps:Throwable at CaretModelImpl.moveToOffset() and visual defects on resizing editor after font has been changed via Ctrl+Scroll Dropping cached mappings like 'font type -> space size' on editor font size change --- .../openapi/editor/impl/SoftWrapModelImpl.java | 13 ++++++++++++- .../softwrap/mapping/SoftWrapApplianceManager.java | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java index 42363fda68c5..9b364c8c0367 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java @@ -32,6 +32,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -48,7 +50,7 @@ import java.util.List; * @author Denis Zhdanov * @since Jun 8, 2010 12:47:32 PM */ -public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentListener, FoldingListener { +public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentListener, FoldingListener, PropertyChangeListener { /** * Holds name of JVM property which presence should trigger debug-aware soft wraps processing. @@ -155,6 +157,8 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi EditorSettings settings = myEditor.getSettings(); myAdditionalColumnsCount = settings.getAdditionalColumnsCount(); myUseSoftWraps = settings.isUseSoftWraps(); + + editor.addPropertyChangeListener(this); } /** @@ -582,6 +586,13 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi executeSafely(myFoldProcessingEndTask); } + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (EditorEx.PROP_FONT_SIZE.equals(evt.getPropertyName())) { + myDirty = true; + } + } + @Override public void release() { myDataMapper.release(); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java index 9579adba8dac..679cb221a65e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java @@ -34,6 +34,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -834,6 +835,12 @@ public class SoftWrapApplianceManager implements FoldingListener, DocumentListen indentInColumns = 0; indentInPixels = 0; } + + public void reset() { + indentInColumns = 0; + indentInPixels = 0; + endLineOffset = 0; + } } public void setWidthProvider(VisibleAreaWidthProvider widthProvider) { @@ -993,6 +1000,8 @@ public class SoftWrapApplianceManager implements FoldingListener, DocumentListen fontType = 0; notifyListenersOnLineStartPosition = false; skipToLineEnd = false; + fontType2spaceWidth.reset(); + logicalLineData.reset(); } public int getSpaceWidth() { @@ -1149,5 +1158,10 @@ public class SoftWrapApplianceManager implements FoldingListener, DocumentListen } myData[index] = value; } + + public void reset() { + myShift = 0; + Arrays.fill(myData, 0); + } } }