15
15
import org .eclipse .swt .custom .provisional .ILineSpacingProvider ;
16
16
import org .eclipse .swt .events .MouseEvent ;
17
17
import org .eclipse .swt .events .MouseListener ;
18
- import org .eclipse .swt .events .MouseTrackListener ;
18
+ import org .eclipse .swt .events .MouseMoveListener ;
19
19
import org .eclipse .swt .events .PaintEvent ;
20
20
import org .eclipse .swt .events .PaintListener ;
21
21
import org .eclipse .swt .graphics .Color ;
@@ -33,16 +33,12 @@ public class ViewZoneChangeAccessor implements IViewZoneChangeAccessor, ILineSpa
33
33
private int originalTopMargin ;
34
34
private ViewZoneMouseListener mouseListener ;
35
35
36
- private class ViewZoneMouseListener implements MouseListener , MouseTrackListener {
36
+ private class ViewZoneMouseListener implements MouseListener , MouseMoveListener {
37
37
38
38
private IViewZone hoveredZone ;
39
39
40
40
@ Override
41
- public void mouseUp (MouseEvent arg0 ) {
42
- //System.err.println("mouseUp");
43
- if (hoveredZone != null ) {
44
-
45
- }
41
+ public void mouseUp (MouseEvent event ) {
46
42
}
47
43
48
44
@ Override
@@ -53,20 +49,23 @@ public void mouseDown(MouseEvent event) {
53
49
}
54
50
55
51
@ Override
56
- public void mouseDoubleClick (MouseEvent arg0 ) {
57
- // System.err.println("mouseDoubleClick");
52
+ public void mouseDoubleClick (MouseEvent event ) {
58
53
59
54
}
60
55
61
56
@ Override
62
- public void mouseHover (MouseEvent event ) {
57
+ public void mouseMove (MouseEvent event ) {
63
58
int lineIndex = fTextWidget .getLineIndex (event .y );
64
59
int lineNumber = lineIndex + 1 ;
65
60
IViewZone zone = getViewZone (lineNumber );
66
61
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.
67
65
int offset = fTextWidget .getOffsetAtLine (lineIndex + 1 );
68
66
Point p = fTextWidget .getLocationAtOffset (offset );
69
67
if (p .y - zone .getHeightInPx () < event .y ) {
68
+ // Zone is hovered
70
69
if (zone .equals (hoveredZone )) {
71
70
hoveredZone .mouseHover (event );
72
71
layoutZone (hoveredZone );
@@ -92,24 +91,6 @@ public void mouseHover(MouseEvent event) {
92
91
hoveredZone = null ;
93
92
}
94
93
}
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
- }
113
94
}
114
95
115
96
public ViewZoneChangeAccessor (ITextViewer textViewer ) {
@@ -125,16 +106,7 @@ public ViewZoneChangeAccessor(ITextViewer textViewer) {
125
106
} catch (Exception e ) {
126
107
e .printStackTrace ();
127
108
}
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);
138
110
139
111
textViewer .getDocument ().addDocumentListener (new IDocumentListener () {
140
112
@@ -175,10 +147,9 @@ public void documentAboutToBeChanged(DocumentEvent e) {
175
147
}
176
148
});
177
149
178
- this .mouseListener = new ViewZoneMouseListener ();
150
+ mouseListener = new ViewZoneMouseListener ();
151
+ textViewer .getTextWidget ().addMouseMoveListener (mouseListener );
179
152
textViewer .getTextWidget ().addMouseListener (mouseListener );
180
- textViewer .getTextWidget ().addMouseTrackListener (mouseListener );
181
-
182
153
((ITextViewerExtension2 ) textViewer ).addPainter (this );
183
154
}
184
155
@@ -224,74 +195,6 @@ public IViewZone getViewZone(int lineNumber) {
224
195
return null ;
225
196
}
226
197
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
-
295
198
@ Override
296
199
public int getSize () {
297
200
return viewZones .size ();
@@ -311,8 +214,8 @@ public Integer getLineSpacing(int lineIndex) {
311
214
312
215
@ Override
313
216
public void dispose () {
314
- textViewer . getTextWidget (). removeMouseTrackListener (mouseListener );
315
- textViewer . getTextWidget () .removeMouseListener (mouseListener );
217
+ fTextWidget . removeMouseMoveListener (mouseListener );
218
+ fTextWidget .removeMouseListener (mouseListener );
316
219
fTextWidget = null ;
317
220
}
318
221
0 commit comments