clarified modules;
authorwenzelm
Mon, 21 Dec 2020 21:56:20 +0100
changeset 72974 3afd293347cc
parent 72973 fc69884a6e5a
child 72975 315f9b4f9e7a
clarified modules;
src/Pure/GUI/gui.scala
src/Tools/jEdit/src/completion_popup.scala
src/Tools/jEdit/src/jedit_lib.scala
src/Tools/jEdit/src/pretty_tooltip.scala
--- a/src/Pure/GUI/gui.scala	Mon Dec 21 21:53:12 2020 +0100
+++ b/src/Pure/GUI/gui.scala	Mon Dec 21 21:56:20 2020 +0100
@@ -6,16 +6,13 @@
 
 package isabelle
 
-import java.lang.{ClassLoader, ClassNotFoundException, NoSuchMethodException}
-import java.awt.{Image, Component, Container, Toolkit, Window, Font, KeyboardFocusManager}
-import java.awt.font.{TextAttribute, TransformAttribute, FontRenderContext, LineMetrics}
+import java.awt.{Component, Container, Font, Image, KeyboardFocusManager, Window, Point,
+  Rectangle, Dimension, GraphicsEnvironment, MouseInfo}
+import java.awt.font.{FontRenderContext, LineMetrics, TextAttribute, TransformAttribute}
 import java.awt.geom.AffineTransform
-import javax.swing.{ImageIcon, JOptionPane, UIManager, JLayeredPane, JFrame, JWindow, JDialog,
-  JButton, JTextField, JLabel}
-
-
-import scala.collection.JavaConverters
-import scala.swing.{ComboBox, TextArea, ScrollPane}
+import javax.swing.{ImageIcon, JButton, JDialog, JFrame, JLabel, JLayeredPane, JOptionPane,
+  JTextField, JWindow, LookAndFeel, UIManager, SwingUtilities}
+import scala.swing.{ComboBox, ScrollPane, TextArea}
 import scala.swing.event.SelectionChanged
 
 
@@ -161,6 +158,48 @@
   def isabelle_image(): Image = isabelle_icon().getImage
 
 
+  /* location within multi-screen environment */
+
+  final case class Screen_Location(point: Point, bounds: Rectangle)
+  {
+    def relative(parent: Component, size: Dimension): Point =
+    {
+      val w = size.width
+      val h = size.height
+
+      val x0 = parent.getLocationOnScreen.x
+      val y0 = parent.getLocationOnScreen.y
+      val x1 = x0 + parent.getWidth - w
+      val y1 = y0 + parent.getHeight - h
+      val x2 = point.x min (bounds.x + bounds.width - w)
+      val y2 = point.y min (bounds.y + bounds.height - h)
+
+      val location = new Point((x2 min x1) max x0, (y2 min y1) max y0)
+      SwingUtilities.convertPointFromScreen(location, parent)
+      location
+    }
+  }
+
+  def screen_location(component: Component, point: Point): Screen_Location =
+  {
+    val screen_point = new Point(point.x, point.y)
+    if (component != null) SwingUtilities.convertPointToScreen(screen_point, component)
+
+    val ge = GraphicsEnvironment.getLocalGraphicsEnvironment
+    val screen_bounds =
+      (for {
+        device <- ge.getScreenDevices.iterator
+        config <- device.getConfigurations.iterator
+        bounds = config.getBounds
+      } yield bounds).find(_.contains(screen_point)) getOrElse ge.getMaximumWindowBounds
+
+    Screen_Location(screen_point, screen_bounds)
+  }
+
+  def mouse_location(): Screen_Location =
+    screen_location(null, MouseInfo.getPointerInfo.getLocation)
+
+
   /* component hierachy */
 
   def get_parent(component: Component): Option[Container] =
--- a/src/Tools/jEdit/src/completion_popup.scala	Mon Dec 21 21:53:12 2020 +0100
+++ b/src/Tools/jEdit/src/completion_popup.scala	Mon Dec 21 21:56:20 2020 +0100
@@ -685,7 +685,7 @@
 
   private val popup =
   {
-    val screen = JEdit_Lib.screen_location(layered, location)
+    val screen = GUI.screen_location(layered, location)
     val size =
     {
       val geometry = JEdit_Lib.window_geometry(completion, completion)
--- a/src/Tools/jEdit/src/jedit_lib.scala	Mon Dec 21 21:53:12 2020 +0100
+++ b/src/Tools/jEdit/src/jedit_lib.scala	Mon Dec 21 21:56:20 2020 +0100
@@ -31,45 +31,6 @@
     (Option(jEdit.getSettingsDirectory).toList ::: List(jEdit.getJEditHome)).map(new JFile(_))
 
 
-  /* location within multi-screen environment */
-
-  final case class Screen_Location(point: Point, bounds: Rectangle)
-  {
-    def relative(parent: Component, size: Dimension): Point =
-    {
-      val w = size.width
-      val h = size.height
-
-      val x0 = parent.getLocationOnScreen.x
-      val y0 = parent.getLocationOnScreen.y
-      val x1 = x0 + parent.getWidth - w
-      val y1 = y0 + parent.getHeight - h
-      val x2 = point.x min (bounds.x + bounds.width - w)
-      val y2 = point.y min (bounds.y + bounds.height - h)
-
-      val location = new Point((x2 min x1) max x0, (y2 min y1) max y0)
-      SwingUtilities.convertPointFromScreen(location, parent)
-      location
-    }
-  }
-
-  def screen_location(component: Component, point: Point): Screen_Location =
-  {
-    val screen_point = new Point(point.x, point.y)
-    SwingUtilities.convertPointToScreen(screen_point, component)
-
-    val ge = GraphicsEnvironment.getLocalGraphicsEnvironment
-    val screen_bounds =
-      (for {
-        device <- ge.getScreenDevices.iterator
-        config <- device.getConfigurations.iterator
-        bounds = config.getBounds
-      } yield bounds).find(_.contains(screen_point)) getOrElse ge.getMaximumWindowBounds
-
-    Screen_Location(screen_point, screen_bounds)
-  }
-
-
   /* window geometry measurement */
 
   private lazy val dummy_window = new JWindow
--- a/src/Tools/jEdit/src/pretty_tooltip.scala	Mon Dec 21 21:53:12 2020 +0100
+++ b/src/Tools/jEdit/src/pretty_tooltip.scala	Mon Dec 21 21:56:20 2020 +0100
@@ -243,7 +243,7 @@
 
   private val popup =
   {
-    val screen = JEdit_Lib.screen_location(layered, location)
+    val screen = GUI.screen_location(layered, location)
     val size =
     {
       val bounds = JEdit_Rendering.popup_bounds