mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
let markup model listeners know when font style has changed for a highlighter
This commit is contained in:
+3
-7
@@ -671,7 +671,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase {
|
||||
|
||||
final int[] count = {0};
|
||||
MarkupModelEx modelEx = (MarkupModelEx)DocumentMarkupModel.forDocument(getDocument(getFile()), getProject(), true);
|
||||
modelEx.addMarkupModelListener(getTestRootDisposable(), new MarkupModelListener() {
|
||||
modelEx.addMarkupModelListener(getTestRootDisposable(), new MarkupModelListener.Adapter() {
|
||||
@Override
|
||||
public void afterAdded(@NotNull RangeHighlighterEx highlighter) {
|
||||
count[0]++;
|
||||
@@ -681,10 +681,6 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase {
|
||||
public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) {
|
||||
count[0]++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) {
|
||||
}
|
||||
});
|
||||
|
||||
type(' ');
|
||||
@@ -718,7 +714,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) {
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("changed")));
|
||||
}
|
||||
|
||||
@@ -769,7 +765,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) {
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("changed")));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -151,7 +151,7 @@ public class MarkupModelWindow extends UserDataHolderBase implements MarkupModel
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) {
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -35,7 +35,7 @@ public interface MarkupModelEx extends MarkupModel {
|
||||
@Nullable
|
||||
RangeHighlighterEx addPersistentLineHighlighter(int lineNumber, int layer, TextAttributes textAttributes);
|
||||
|
||||
void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged);
|
||||
void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged);
|
||||
|
||||
void fireAfterAdded(@NotNull RangeHighlighterEx segmentHighlighter);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -144,7 +144,7 @@ public class EmptyMarkupModel implements MarkupModelEx {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) {
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -144,9 +144,11 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx
|
||||
public void changeAttributesInBatch(@NotNull RangeHighlighterEx highlighter,
|
||||
@NotNull Consumer<RangeHighlighterEx> changeAttributesAction) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
RangeHighlighterImpl.ChangeResult changed = ((RangeHighlighterImpl)highlighter).changeAttributesNoEvents(changeAttributesAction);
|
||||
if (changed != RangeHighlighterImpl.ChangeResult.NOT_CHANGED) {
|
||||
fireAttributesChanged(highlighter, changed == RangeHighlighterImpl.ChangeResult.RENDERERS_CHANGED);
|
||||
byte changeStatus = ((RangeHighlighterImpl)highlighter).changeAttributesNoEvents(changeAttributesAction);
|
||||
if ((changeStatus & RangeHighlighterImpl.CHANGED_MASK) != 0) {
|
||||
fireAttributesChanged(highlighter,
|
||||
(changeStatus & RangeHighlighterImpl.RENDERERS_CHANGED_MASK) != 0,
|
||||
(changeStatus & RangeHighlighterImpl.FONT_STYLE_CHANGED_MASK) != 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,9 +227,9 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) {
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
for (MarkupModelListener listener : myListeners) {
|
||||
listener.attributesChanged(segmentHighlighter, renderersChanged);
|
||||
listener.attributesChanged(segmentHighlighter, renderersChanged, fontStyleChanged);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+39
-28
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -57,12 +57,17 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
private static final byte ERROR_STRIPE_IS_THIN_MASK = 2;
|
||||
private static final byte TARGET_AREA_IS_EXACT_MASK = 4;
|
||||
private static final byte IN_BATCH_CHANGE_MASK = 8;
|
||||
private static final byte CHANGED_MASK = 16;
|
||||
private static final byte RENDERERS_CHANGED_MASK = 32;
|
||||
static final byte CHANGED_MASK = 16;
|
||||
static final byte RENDERERS_CHANGED_MASK = 32;
|
||||
static final byte FONT_STYLE_CHANGED_MASK = 64;
|
||||
|
||||
@MagicConstant(intValues = {AFTER_END_OF_LINE_MASK, ERROR_STRIPE_IS_THIN_MASK, TARGET_AREA_IS_EXACT_MASK, IN_BATCH_CHANGE_MASK, CHANGED_MASK, RENDERERS_CHANGED_MASK})
|
||||
@MagicConstant(intValues = {AFTER_END_OF_LINE_MASK, ERROR_STRIPE_IS_THIN_MASK, TARGET_AREA_IS_EXACT_MASK, IN_BATCH_CHANGE_MASK,
|
||||
CHANGED_MASK, RENDERERS_CHANGED_MASK, FONT_STYLE_CHANGED_MASK})
|
||||
private @interface FlagConstant {}
|
||||
|
||||
@MagicConstant(flags = {CHANGED_MASK, RENDERERS_CHANGED_MASK, FONT_STYLE_CHANGED_MASK})
|
||||
private @interface ChangeStatus {}
|
||||
|
||||
RangeHighlighterImpl(@NotNull MarkupModel model,
|
||||
int start,
|
||||
int end,
|
||||
@@ -98,9 +103,13 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
TextAttributes old = myTextAttributes;
|
||||
myTextAttributes = textAttributes;
|
||||
if (!Comparing.equal(old, textAttributes)) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, getFontStyle(old) != getFontStyle(textAttributes));
|
||||
}
|
||||
}
|
||||
|
||||
private static int getFontStyle(TextAttributes textAttributes) {
|
||||
return textAttributes == null ? Font.PLAIN : textAttributes.getFontType();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
@@ -118,7 +127,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
LineMarkerRenderer old = myLineMarkerRenderer;
|
||||
myLineMarkerRenderer = renderer;
|
||||
if (!Comparing.equal(old, renderer)) {
|
||||
fireChanged(true);
|
||||
fireChanged(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +141,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
CustomHighlighterRenderer old = myCustomRenderer;
|
||||
myCustomRenderer = renderer;
|
||||
if (!Comparing.equal(old, renderer)) {
|
||||
fireChanged(true);
|
||||
fireChanged(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +155,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
GutterMark old = myGutterIconRenderer;
|
||||
myGutterIconRenderer = renderer;
|
||||
if (!Comparing.equal(old, renderer)) {
|
||||
fireChanged(true);
|
||||
fireChanged(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,7 +173,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
Color old = myErrorStripeColor;
|
||||
myErrorStripeColor = color;
|
||||
if (!Comparing.equal(old, color)) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +188,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
Object old = myErrorStripeTooltip;
|
||||
myErrorStripeTooltip = tooltipObject;
|
||||
if (!Comparing.equal(old, tooltipObject)) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +203,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
boolean old = isThinErrorStripeMark();
|
||||
setFlag(ERROR_STRIPE_IS_THIN_MASK, value);
|
||||
if (old != value) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +217,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
Color old = myLineSeparatorColor;
|
||||
myLineSeparatorColor = color;
|
||||
if (!Comparing.equal(old, color)) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,14 +231,14 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
SeparatorPlacement old = mySeparatorPlacement;
|
||||
mySeparatorPlacement = placement;
|
||||
if (!Comparing.equal(old, placement)) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEditorFilter(@NotNull MarkupEditorFilter filter) {
|
||||
myFilter = filter;
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -248,20 +257,19 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
boolean old = isAfterEndOfLine();
|
||||
setFlag(AFTER_END_OF_LINE_MASK, afterEndOfLine);
|
||||
if (old != afterEndOfLine) {
|
||||
fireChanged(false);
|
||||
fireChanged(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void fireChanged(boolean renderersChanged) {
|
||||
private void fireChanged(boolean renderersChanged, boolean fontStyleChanged) {
|
||||
if (myModel instanceof MarkupModelEx) {
|
||||
if (isFlagSet(IN_BATCH_CHANGE_MASK)) {
|
||||
setFlag(CHANGED_MASK, true);
|
||||
if (renderersChanged) {
|
||||
setFlag(RENDERERS_CHANGED_MASK, true);
|
||||
}
|
||||
if (renderersChanged) setFlag(RENDERERS_CHANGED_MASK, true);
|
||||
if (fontStyleChanged) setFlag(FONT_STYLE_CHANGED_MASK, true);
|
||||
}
|
||||
else {
|
||||
((MarkupModelEx)myModel).fireAttributesChanged(this, renderersChanged);
|
||||
((MarkupModelEx)myModel).fireAttributesChanged(this, renderersChanged, fontStyleChanged);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -299,24 +307,27 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
|
||||
}
|
||||
|
||||
enum ChangeResult { NOT_CHANGED, MINOR_CHANGE, RENDERERS_CHANGED }
|
||||
@NotNull
|
||||
ChangeResult changeAttributesNoEvents(@NotNull Consumer<RangeHighlighterEx> change) {
|
||||
@ChangeStatus
|
||||
byte changeAttributesNoEvents(@NotNull Consumer<RangeHighlighterEx> change) {
|
||||
assert !isFlagSet(IN_BATCH_CHANGE_MASK);
|
||||
assert !isFlagSet(CHANGED_MASK);
|
||||
setFlag(IN_BATCH_CHANGE_MASK, true);
|
||||
setFlag(RENDERERS_CHANGED_MASK, false);
|
||||
ChangeResult result;
|
||||
setFlag(FONT_STYLE_CHANGED_MASK, false);
|
||||
byte result = 0;
|
||||
try {
|
||||
change.consume(this);
|
||||
}
|
||||
finally {
|
||||
setFlag(IN_BATCH_CHANGE_MASK, false);
|
||||
boolean changed = isFlagSet(CHANGED_MASK);
|
||||
boolean renderersChanged = isFlagSet(RENDERERS_CHANGED_MASK);
|
||||
result = changed ? renderersChanged ? ChangeResult.RENDERERS_CHANGED : ChangeResult.MINOR_CHANGE : ChangeResult.NOT_CHANGED;
|
||||
if (isFlagSet(CHANGED_MASK)) {
|
||||
result |= CHANGED_MASK;
|
||||
if (isFlagSet(RENDERERS_CHANGED_MASK)) result |= RENDERERS_CHANGED_MASK;
|
||||
if (isFlagSet(FONT_STYLE_CHANGED_MASK)) result |= FONT_STYLE_CHANGED_MASK;
|
||||
}
|
||||
setFlag(CHANGED_MASK, false);
|
||||
setFlag(RENDERERS_CHANGED_MASK, false);
|
||||
setFlag(FONT_STYLE_CHANGED_MASK, false);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -330,7 +341,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx
|
||||
LineSeparatorRenderer old = myLineSeparatorRenderer;
|
||||
myLineSeparatorRenderer = renderer;
|
||||
if (!Comparing.equal(old, renderer)) {
|
||||
fireChanged(true);
|
||||
fireChanged(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,7 @@ public interface MarkupModelListener extends EventListener {
|
||||
|
||||
void beforeRemoved(@NotNull RangeHighlighterEx highlighter);
|
||||
|
||||
void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged);
|
||||
void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged);
|
||||
|
||||
abstract class Adapter implements MarkupModelListener {
|
||||
@Override
|
||||
@@ -39,7 +39,7 @@ public interface MarkupModelListener extends EventListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) {
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -128,8 +128,8 @@ public class EditorFilteringMarkupModelEx implements MarkupModelEx {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) {
|
||||
myDelegate.fireAttributesChanged(segmentHighlighter, renderersChanged);
|
||||
public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
myDelegate.fireAttributesChanged(segmentHighlighter, renderersChanged, fontStyleChanged);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -374,16 +374,16 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
}
|
||||
@Override
|
||||
public void afterAdded(@NotNull RangeHighlighterEx highlighter) {
|
||||
attributesChanged(highlighter, areRenderersInvolved(highlighter));
|
||||
attributesChanged(highlighter, areRenderersInvolved(highlighter), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) {
|
||||
attributesChanged(highlighter, areRenderersInvolved(highlighter));
|
||||
attributesChanged(highlighter, areRenderersInvolved(highlighter), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) {
|
||||
public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) {
|
||||
if (myDocument.isInBulkUpdate()) return; // bulkUpdateFinished() will repaint anything
|
||||
|
||||
if (myUseNewRendering && renderersChanged) {
|
||||
@@ -5497,7 +5497,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
for (RangeHighlighter highlighter : myDocumentMarkupModel.getDelegate().getAllHighlighters()) {
|
||||
boolean oldAvailable = oldFilter == null || oldFilter.value(highlighter);
|
||||
boolean newAvailable = filter == null || filter.value(highlighter);
|
||||
if (oldAvailable != newAvailable) myMarkupModelListener.attributesChanged((RangeHighlighterEx)highlighter, true);
|
||||
if (oldAvailable != newAvailable) myMarkupModelListener.attributesChanged((RangeHighlighterEx)highlighter, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2015 JetBrains s.r.o.
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -134,7 +134,7 @@ public class XLineBreakpointImpl<P extends XBreakpointProperties> extends XBreak
|
||||
markupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(document, getProject(), false);
|
||||
if (markupModel != null) {
|
||||
// renderersChanged false - we don't change gutter size
|
||||
markupModel.fireAttributesChanged((RangeHighlighterEx)highlighter, false);
|
||||
markupModel.fireAttributesChanged((RangeHighlighterEx)highlighter, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user