author | wenzelm |
Thu, 13 Feb 2025 16:19:48 +0100 (2 months ago) | |
changeset 82156 | 5d2ed7e56a49 |
parent 82142 | 508a673c87ac |
child 82403 | 6e80327eb30a |
permissions | -rw-r--r-- |
55827 | 1 |
/* Title: Tools/jEdit/src/font_info.scala |
55825 | 2 |
Author: Makarius |
3 |
||
55827 | 4 |
Font information, derived from main jEdit view font. |
55825 | 5 |
*/ |
6 |
||
7 |
package isabelle.jedit |
|
8 |
||
9 |
||
10 |
import isabelle._ |
|
11 |
||
12 |
||
13 |
import java.awt.Font |
|
14 |
||
82142 | 15 |
import org.gjt.sp.jedit.jEdit |
55825 | 16 |
|
17 |
||
75393 | 18 |
object Font_Info { |
55825 | 19 |
/* size range */ |
20 |
||
21 |
val min_size = 5 |
|
22 |
val max_size = 250 |
|
23 |
||
73343
d0378baf7d06
tuned --- avoid deprecated conversions between certain number type;
wenzelm
parents:
73340
diff
changeset
|
24 |
def restrict_size(size: Float): Float = size max min_size.toFloat min max_size.toFloat |
55825 | 25 |
|
26 |
||
55827 | 27 |
/* main jEdit font */ |
55825 | 28 |
|
29 |
def main_family(): String = jEdit.getProperty("view.font") |
|
30 |
||
31 |
def main_size(scale: Double = 1.0): Float = |
|
32 |
restrict_size(jEdit.getIntegerProperty("view.fontsize", 16).toFloat * scale.toFloat) |
|
33 |
||
81389 | 34 |
def main(scale: Double = 1.0, zoom: Zoom = null): Font_Info = |
81383 | 35 |
Font_Info(main_family(), main_size(if (zoom == null) scale else scale * zoom.scale)) |
55825 | 36 |
|
81389 | 37 |
class Zoom extends GUI.Zoom { tooltip = "Zoom factor for output font size" } |
38 |
||
55827 | 39 |
|
40 |
/* incremental size change */ |
|
41 |
||
75393 | 42 |
object main_change { |
43 |
private def change_size(change: Float => Float): Unit = { |
|
57612
990ffb84489b
clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents:
57044
diff
changeset
|
44 |
GUI_Thread.require {} |
55827 | 45 |
|
46 |
val size0 = main_size() |
|
47 |
val size = restrict_size(change(size0)).round |
|
48 |
if (size != size0) { |
|
49 |
jEdit.setIntegerProperty("view.fontsize", size) |
|
50 |
jEdit.propertiesChanged() |
|
51 |
jEdit.saveSettings() |
|
52 |
jEdit.getActiveView().getStatus.setMessageAndClear("Text font size: " + size) |
|
53 |
} |
|
54 |
} |
|
55 |
||
57612
990ffb84489b
clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents:
57044
diff
changeset
|
56 |
// owned by GUI thread |
55827 | 57 |
private var steps = 0 |
76610 | 58 |
private val delay = Delay.last(PIDE.session.input_delay, gui = true) { |
75394 | 59 |
change_size { size => |
75393 | 60 |
var i = size.round |
61 |
while (steps != 0 && i > 0) { |
|
62 |
if (steps > 0) { i += (i / 10) max 1; steps -= 1 } |
|
63 |
else { i -= (i / 10) max 1; steps += 1 } |
|
64 |
} |
|
65 |
steps = 0 |
|
66 |
i.toFloat |
|
75394 | 67 |
} |
55827 | 68 |
} |
69 |
||
75393 | 70 |
def step(i: Int): Unit = { |
55827 | 71 |
steps += i |
72 |
delay.invoke() |
|
73 |
} |
|
74 |
||
75393 | 75 |
def reset(size: Float): Unit = { |
55827 | 76 |
delay.revoke() |
77 |
steps = 0 |
|
78 |
change_size(_ => size) |
|
55825 | 79 |
} |
80 |
} |
|
81 |
} |
|
82 |
||
75393 | 83 |
sealed case class Font_Info(family: String, size: Float) { |
55825 | 84 |
def font: Font = new Font(family, Font.PLAIN, size.round) |
85 |
} |