8 package isabelle.jedit |
8 package isabelle.jedit |
9 |
9 |
10 |
10 |
11 import isabelle._ |
11 import isabelle._ |
12 |
12 |
13 import java.awt.{Graphics2D, Shape, Color, Point, Toolkit, Cursor} |
13 import java.awt.{Graphics2D, Shape, Color, Point, Toolkit, Cursor, MouseInfo} |
14 import java.awt.event.{MouseMotionAdapter, MouseAdapter, MouseEvent, |
14 import java.awt.event.{MouseMotionAdapter, MouseAdapter, MouseEvent, |
15 FocusAdapter, FocusEvent, WindowEvent, WindowAdapter} |
15 FocusAdapter, FocusEvent, WindowEvent, WindowAdapter} |
16 import java.awt.font.TextAttribute |
16 import java.awt.font.TextAttribute |
|
17 import javax.swing.SwingUtilities |
17 import java.text.AttributedString |
18 import java.text.AttributedString |
18 import java.util.ArrayList |
19 import java.util.ArrayList |
19 |
20 |
20 import org.gjt.sp.util.Log |
21 import org.gjt.sp.util.Log |
21 import org.gjt.sp.jedit.{OperatingSystem, Debug, View} |
22 import org.gjt.sp.jedit.{OperatingSystem, Debug, View} |
177 case None => |
178 case None => |
178 } |
179 } |
179 } |
180 } |
180 } |
181 } |
181 } |
182 } |
|
183 |
|
184 private def mouse_inside_painter(): Boolean = |
|
185 MouseInfo.getPointerInfo match { |
|
186 case null => false |
|
187 case info => |
|
188 val point = info.getLocation |
|
189 val painter = text_area.getPainter |
|
190 SwingUtilities.convertPointFromScreen(point, painter) |
|
191 painter.contains(point) |
|
192 } |
182 |
193 |
183 private val mouse_motion_listener = new MouseMotionAdapter { |
194 private val mouse_motion_listener = new MouseMotionAdapter { |
184 override def mouseDragged(evt: MouseEvent) { |
195 override def mouseDragged(evt: MouseEvent) { |
185 robust_body(()) { |
196 robust_body(()) { |
186 PIDE.dismissed_popups(view) |
197 PIDE.dismissed_popups(view) |
211 else active_reset() |
222 else active_reset() |
212 |
223 |
213 if (evt.getSource == text_area.getPainter) { |
224 if (evt.getSource == text_area.getPainter) { |
214 Pretty_Tooltip.invoke(() => |
225 Pretty_Tooltip.invoke(() => |
215 robust_body(()) { |
226 robust_body(()) { |
216 val rendering = get_rendering() |
227 if (mouse_inside_painter()) { |
217 val snapshot = rendering.snapshot |
228 val rendering = get_rendering() |
218 if (!snapshot.is_outdated) { |
229 val snapshot = rendering.snapshot |
219 JEdit_Lib.pixel_range(text_area, x, y) match { |
230 if (!snapshot.is_outdated) { |
220 case None => |
231 JEdit_Lib.pixel_range(text_area, x, y) match { |
221 case Some(range) => |
232 case None => |
222 val result = |
233 case Some(range) => |
223 if (control) rendering.tooltip(range) |
234 val result = |
224 else rendering.tooltip_message(range) |
235 if (control) rendering.tooltip(range) |
225 result match { |
236 else rendering.tooltip_message(range) |
226 case None => |
237 result match { |
227 case Some(tip) => |
238 case None => |
228 val painter = text_area.getPainter |
239 case Some(tip) => |
229 val loc = new Point(x, y + painter.getFontMetrics.getHeight / 2) |
240 val painter = text_area.getPainter |
230 val results = rendering.command_results(range) |
241 val loc = new Point(x, y + painter.getFontMetrics.getHeight / 2) |
231 Pretty_Tooltip(view, painter, loc, rendering, results, tip) |
242 val results = rendering.command_results(range) |
232 } |
243 Pretty_Tooltip(view, painter, loc, rendering, results, tip) |
|
244 } |
|
245 } |
233 } |
246 } |
234 } |
247 } |
235 }) |
248 }) |
236 } |
249 } |
237 } |
250 } |