Skip to content

Commit c8ab622

Browse files
committed
Improve move hover for CodeLens. See
#181
1 parent 6d83d1d commit c8ab622

File tree

1 file changed

+14
-111
lines changed

1 file changed

+14
-111
lines changed

eclipse/codelens/org.eclipse.codelens/src/org/eclipse/jface/text/provisional/viewzones/ViewZoneChangeAccessor.java

Lines changed: 14 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.eclipse.swt.custom.provisional.ILineSpacingProvider;
1616
import org.eclipse.swt.events.MouseEvent;
1717
import org.eclipse.swt.events.MouseListener;
18-
import org.eclipse.swt.events.MouseTrackListener;
18+
import org.eclipse.swt.events.MouseMoveListener;
1919
import org.eclipse.swt.events.PaintEvent;
2020
import org.eclipse.swt.events.PaintListener;
2121
import org.eclipse.swt.graphics.Color;
@@ -33,16 +33,12 @@ public class ViewZoneChangeAccessor implements IViewZoneChangeAccessor, ILineSpa
3333
private int originalTopMargin;
3434
private ViewZoneMouseListener mouseListener;
3535

36-
private class ViewZoneMouseListener implements MouseListener, MouseTrackListener {
36+
private class ViewZoneMouseListener implements MouseListener, MouseMoveListener {
3737

3838
private IViewZone hoveredZone;
3939

4040
@Override
41-
public void mouseUp(MouseEvent arg0) {
42-
//System.err.println("mouseUp");
43-
if (hoveredZone != null) {
44-
45-
}
41+
public void mouseUp(MouseEvent event) {
4642
}
4743

4844
@Override
@@ -53,20 +49,23 @@ public void mouseDown(MouseEvent event) {
5349
}
5450

5551
@Override
56-
public void mouseDoubleClick(MouseEvent arg0) {
57-
// System.err.println("mouseDoubleClick");
52+
public void mouseDoubleClick(MouseEvent event) {
5853

5954
}
6055

6156
@Override
62-
public void mouseHover(MouseEvent event) {
57+
public void mouseMove(MouseEvent event) {
6358
int lineIndex = fTextWidget.getLineIndex(event.y);
6459
int lineNumber = lineIndex + 1;
6560
IViewZone zone = getViewZone(lineNumber);
6661
if (zone != null) {
62+
// The line which have a zone at end of this line is
63+
// hovered.
64+
// Check if it's the zone which is hovered or the view zone.
6765
int offset = fTextWidget.getOffsetAtLine(lineIndex + 1);
6866
Point p = fTextWidget.getLocationAtOffset(offset);
6967
if (p.y - zone.getHeightInPx() < event.y) {
68+
// Zone is hovered
7069
if (zone.equals(hoveredZone)) {
7170
hoveredZone.mouseHover(event);
7271
layoutZone(hoveredZone);
@@ -92,24 +91,6 @@ public void mouseHover(MouseEvent event) {
9291
hoveredZone = null;
9392
}
9493
}
95-
96-
@Override
97-
public void mouseExit(MouseEvent event) {
98-
if (hoveredZone != null) {
99-
hoveredZone.mouseExit(event);
100-
layoutZone(hoveredZone);
101-
hoveredZone = null;
102-
}
103-
}
104-
105-
@Override
106-
public void mouseEnter(MouseEvent event) {
107-
if (hoveredZone != null) {
108-
hoveredZone.mouseExit(event);
109-
layoutZone(hoveredZone);
110-
hoveredZone = null;
111-
}
112-
}
11394
}
11495

11596
public ViewZoneChangeAccessor(ITextViewer textViewer) {
@@ -125,16 +106,7 @@ public ViewZoneChangeAccessor(ITextViewer textViewer) {
125106
} catch (Exception e) {
126107
e.printStackTrace();
127108
}
128-
// try {
129-
// Field fixedLineHeight =
130-
// fTextWidget.getClass().getDeclaredField("fixedLineHeight");
131-
// fixedLineHeight.setAccessible(true);
132-
// fixedLineHeight.set(fTextWidget, false);
133-
// } catch (Exception e) {
134-
// // TODO Auto-generated catch block
135-
// e.printStackTrace();
136-
// }
137-
synch(fTextWidget);
109+
// synch(fTextWidget);
138110

139111
textViewer.getDocument().addDocumentListener(new IDocumentListener() {
140112

@@ -175,10 +147,9 @@ public void documentAboutToBeChanged(DocumentEvent e) {
175147
}
176148
});
177149

178-
this.mouseListener = new ViewZoneMouseListener();
150+
mouseListener = new ViewZoneMouseListener();
151+
textViewer.getTextWidget().addMouseMoveListener(mouseListener);
179152
textViewer.getTextWidget().addMouseListener(mouseListener);
180-
textViewer.getTextWidget().addMouseTrackListener(mouseListener);
181-
182153
((ITextViewerExtension2) textViewer).addPainter(this);
183154
}
184155

@@ -224,74 +195,6 @@ public IViewZone getViewZone(int lineNumber) {
224195
return null;
225196
}
226197

227-
private void synch(StyledText text) {
228-
// use a verify listener to keep the offsets up to date
229-
// text.addVerifyListener(new VerifyListener() {
230-
// public void verifyText(VerifyEvent e) {
231-
// int start = e.start;
232-
// int replaceCharCount = e.end - e.start;
233-
// int newCharCount = e.text.length();
234-
// synchronized (viewZones) {
235-
// List<IViewZone> toRemove = new ArrayList<>();
236-
// for (IViewZone viewZone : viewZones) {
237-
// System.err.println("before:" + viewZone.getAfterLineNumber());
238-
// int offset = viewZone.getOffsetAtLine();
239-
// if (start <= offset && offset < start + replaceCharCount) {
240-
// // this zone is being deleted from the text
241-
// toRemove.add(viewZone);
242-
// offset = -1;
243-
// }
244-
// if (offset != -1 && offset >= start) {
245-
// offset += newCharCount - replaceCharCount;
246-
// }
247-
// viewZone.setOffsetAtLine(offset);
248-
// if (e.text.length() == 0) {
249-
// int lineIndex = fTextWidget.getLineAtOffset(e.start);
250-
// //int lineOffset = fTextWidget.getOffsetAtLine(lineIndex + 1);
251-
// //viewZone.setOffsetAtLine(lineOffset);
252-
// }
253-
// System.err.println("after:" + viewZone.getAfterLineNumber());
254-
// }
255-
//
256-
// for (IViewZone viewZone : toRemove) {
257-
// removeZone(viewZone);
258-
// }
259-
// }
260-
// }
261-
// });
262-
//
263-
// text.addExtendedModifyListener(new ExtendedModifyListener() {
264-
//
265-
// @Override
266-
// public void modifyText(ExtendedModifyEvent e) {
267-
// int start = e.start;
268-
// int replaceCharCount = e.replacedText.length();
269-
// int newCharCount = e.length;
270-
// synchronized (viewZones) {
271-
// List<IViewZone> toRemove = new ArrayList<>();
272-
// for (IViewZone viewZone : viewZones) {
273-
// System.err.println("before:" + viewZone.getAfterLineNumber());
274-
// int offset = viewZone.getOffsetAtLine();
275-
// if (start <= offset && offset < start + replaceCharCount) {
276-
// // this zone is being deleted from the text
277-
// toRemove.add(viewZone);
278-
// offset = -1;
279-
// }
280-
// if (offset != -1 && offset >= start) {
281-
// offset += newCharCount - replaceCharCount;
282-
// }
283-
// viewZone.setOffsetAtLine(offset);
284-
// System.err.println("after:" + viewZone.getAfterLineNumber());
285-
// }
286-
//
287-
// for (IViewZone viewZone : toRemove) {
288-
// removeZone(viewZone);
289-
// }
290-
// }
291-
// }
292-
// });
293-
}
294-
295198
@Override
296199
public int getSize() {
297200
return viewZones.size();
@@ -311,8 +214,8 @@ public Integer getLineSpacing(int lineIndex) {
311214

312215
@Override
313216
public void dispose() {
314-
textViewer.getTextWidget().removeMouseTrackListener(mouseListener);
315-
textViewer.getTextWidget().removeMouseListener(mouseListener);
217+
fTextWidget.removeMouseMoveListener(mouseListener);
218+
fTextWidget.removeMouseListener(mouseListener);
316219
fTextWidget = null;
317220
}
318221

0 commit comments

Comments
 (0)