From 44e465682f692ae8af50a230bf60ef529bbc1a10 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Fri, 26 Feb 2016 11:26:36 +0300 Subject: [PATCH] WEB-20496 regression - bold text in injected regions --- .../editor/impl/RangeHighlighterImpl.java | 5 ++- .../openapi/editor/ex/util/EditorUtil.java | 5 +++ .../openapi/editor/impl/EditorImpl.java | 9 ++-- .../editor/impl/view/IterationState.java | 4 +- .../testData/editor/painting/_fontBold.png | Bin 0 -> 835 bytes .../testData/editor/painting/eraseMarker.png | Bin 0 -> 144 bytes .../openapi/editor/EditorPaintingTest.java | 40 ++++++++++++------ 7 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 platform/platform-tests/testData/editor/painting/_fontBold.png create mode 100644 platform/platform-tests/testData/editor/painting/eraseMarker.png diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java index c54c9e36756c..be9708f1ca91 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java @@ -102,7 +102,10 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx public void setTextAttributes(@NotNull TextAttributes textAttributes) { TextAttributes old = myTextAttributes; myTextAttributes = textAttributes; - if (!Comparing.equal(old, textAttributes)) { + if (old != textAttributes && (old == TextAttributes.ERASE_MARKER || textAttributes == TextAttributes.ERASE_MARKER)) { + fireChanged(false, true); + } + else if (!Comparing.equal(old, textAttributes)) { fireChanged(false, getFontStyle(old) != getFontStyle(textAttributes)); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java index b61f936d7d09..7ca257da3030 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/util/EditorUtil.java @@ -29,6 +29,7 @@ import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry; import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.impl.FontInfo; import com.intellij.openapi.editor.impl.IterationState; +import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.editor.textarea.TextComponentEditor; import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; @@ -887,6 +888,10 @@ public final class EditorUtil { int endOffset = editor.logicalPositionToOffset(position); return editor.getSoftWrapModel().getSoftWrapsForRange(startOffset, endOffset).size(); } + + public static boolean attributesImpactFontStyle(@Nullable TextAttributes attributes) { + return attributes == TextAttributes.ERASE_MARKER || (attributes != null && attributes.getFontType() != Font.PLAIN); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 5502668ecc8c..d56a23d4e629 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -376,12 +376,14 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } @Override public void afterAdded(@NotNull RangeHighlighterEx highlighter) { - attributesChanged(highlighter, areRenderersInvolved(highlighter), false); + attributesChanged(highlighter, areRenderersInvolved(highlighter), + EditorUtil.attributesImpactFontStyle(highlighter.getTextAttributes())); } @Override public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) { - attributesChanged(highlighter, areRenderersInvolved(highlighter), false); + attributesChanged(highlighter, areRenderersInvolved(highlighter), + EditorUtil.attributesImpactFontStyle(highlighter.getTextAttributes())); } @Override @@ -409,8 +411,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi int startLine = start == -1 ? 0 : myDocument.getLineNumber(start); int endLine = end == -1 ? myDocument.getLineCount() : myDocument.getLineNumber(end); - TextAttributes attributes = highlighter.getTextAttributes(); - if (myUseNewRendering && start != end && (fontStyleChanged || attributes != null && attributes.getFontType() != Font.PLAIN)) { + if (myUseNewRendering && start != end && fontStyleChanged) { myView.invalidateRange(start, end); } repaintLines(Math.max(0, startLine - 1), Math.min(endLine + 1, getDocument().getLineCount())); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/IterationState.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/IterationState.java index 139fc74e54e9..d8bc746e2b99 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/IterationState.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/IterationState.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.HighlighterLayer; @@ -211,8 +212,7 @@ public class IterationState { return (!onlyFullLine || ex.getTargetArea() == HighlighterTargetArea.LINES_IN_RANGE) && (!onlyFontAffecting || - ex.getTextAttributes() != null && - ex.getTextAttributes().getFontType() != Font.PLAIN); + EditorUtil.attributesImpactFontStyle(ex.getTextAttributes())); } }); highlighters = list.isEmpty() ? RangeHighlighterEx.EMPTY_ARRAY : list.toArray(new RangeHighlighterEx[list.size()]); diff --git a/platform/platform-tests/testData/editor/painting/_fontBold.png b/platform/platform-tests/testData/editor/painting/_fontBold.png new file mode 100644 index 0000000000000000000000000000000000000000..bcac79bb09b238c900cc5cd3a711482c0aa34a61 GIT binary patch literal 835 zcmV-J1HAl+P)BjE6ae5r295p))~LT=L(vT#JbLJ!3>h>RFESWiO$TErbF&FC@0||dKehOg;|?A@qmWIHrvp0Kq}v|O zg(7yD2d6_l zql_?#z_|wg1_{6b6y>{hcK;X``vSWkSK>;)N0~V#Bru-hbBqfEY@h;uAw<**5lCy` zvh~vovwlPo7`<2&l#p1;D|847Ya!w6lK~dWY>}`XkZ`#l5ai)#iBrc?9M`~84P2}Q zjjuIuo&;q6t`HI30c`{xp|>3oo(-bTtN;zH@cqPR*0}IpXS|Vahp$@98ZP}~XPEWB zoQ<=Vjlin07f^L)LSptv=~|FbUL>r+42<7SZ7 zue@z*ATvNR#(?sn28MdBG#OBMpKO7>ItO_hOF8RnVBk6nOgd5;V7(Cuwi%~^Cm2EC z2ACFd?;ONK!6NypfufEe358T%nfY5_g=GSW!LzD?!tEe1@=PBBse?6s2k0QM&ehKD zh`o6hJnJl~>M2DM&sKf|O!ae60iB7e*(h^K$PBMGgPu&|7CC&K^uY=fKR6lcdywVg zt;KT{c;}*O5Mh9cPpoM^z;QWsPljt8H_Uxy-Q+=ld0E-}M{s*br8N+A(C#+&(B|$m zt4u&0?vBONXR)2(@00@IDL~WAmt=mw-+mx_>A&;F!rZtIoZfy({s3h{Oylli_&NXp N002ovPDHLkV1nh(f6V{@ literal 0 HcmV?d00001 diff --git a/platform/platform-tests/testData/editor/painting/eraseMarker.png b/platform/platform-tests/testData/editor/painting/eraseMarker.png new file mode 100644 index 0000000000000000000000000000000000000000..f18656fd53e318dab05e01858368d8adea0e8c7a GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj$!3HD+4*&NBQsJI1jv*Ddl7IYv{qg_79!Za& zGY1S_IjpjnFpn>_A+m!vxmaP7@<+=l5}!}-Io9y0sGYj_HTY=bkv0WOz9ms2m$g{f t*D`ndt`9k{awNjzvX4CVQ$OT%#;OXk;vd$@?2>@;VG