1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
package io.github.moulberry.notenoughupdates.util;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
public class LargeHTMLEditorKit extends HTMLEditorKit {
ViewFactory factory = new MyViewFactory();
@Override
public ViewFactory getViewFactory() {
return factory;
}
public Document createDefaultDocument() {
HTMLDocument doc = (HTMLDocument)super.createDefaultDocument();
doc.setAsynchronousLoadPriority(-1);
return doc;
}
class MyViewFactory extends HTMLFactory {
@Override
public View create(Element elem) {
AttributeSet attrs = elem.getAttributes();
Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
if (o instanceof HTML.Tag) {
HTML.Tag kind = (HTML.Tag) o;
if (kind == HTML.Tag.HTML) {
return new HTMLBlockView(elem);
}
}
View view = super.create(elem);
if(view instanceof ImageView) {
//((ImageView)view).setLoadsSynchronously(true);
}
return view;
}
}
private class HTMLBlockView extends BlockView {
public HTMLBlockView(Element elem) {
super(elem, View.Y_AXIS);
}
@Override
protected void layout(int width, int height) {
if (width<Integer.MAX_VALUE) {
super.layout(new Double(width / getZoomFactor()).intValue(),
new Double(height *
getZoomFactor()).intValue());
}
}
public double getZoomFactor() {
Double scale = (Double) getDocument().getProperty("ZOOM_FACTOR");
if (scale != null) {
return scale.doubleValue();
}
return 1;
}
@Override
public void paint(Graphics g, Shape allocation) {
Graphics2D g2d = (Graphics2D) g;
double zoomFactor = getZoomFactor();
AffineTransform old = g2d.getTransform();
g2d.scale(zoomFactor, zoomFactor);
super.paint(g2d, allocation);
g2d.setTransform(old);
}
@Override
public float getMinimumSpan(int axis) {
float f = super.getMinimumSpan(axis);
f *= getZoomFactor();
return f;
}
@Override
public float getMaximumSpan(int axis) {
float f = super.getMaximumSpan(axis);
f *= getZoomFactor();
return f;
}
@Override
public float getPreferredSpan(int axis) {
float f = super.getPreferredSpan(axis);
f *= getZoomFactor();
return f;
}
@Override
public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException {
double zoomFactor = getZoomFactor();
Rectangle alloc;
alloc = a.getBounds();
Shape s = super.modelToView(pos, alloc, b);
alloc = s.getBounds();
alloc.x *= zoomFactor;
alloc.y *= zoomFactor;
alloc.width *= zoomFactor;
alloc.height *= zoomFactor;
return alloc;
}
@Override
public int viewToModel(float x, float y, Shape a,
Position.Bias[] bias) {
double zoomFactor = getZoomFactor();
Rectangle alloc = a.getBounds();
x /= zoomFactor;
y /= zoomFactor;
alloc.x /= zoomFactor;
alloc.y /= zoomFactor;
alloc.width /= zoomFactor;
alloc.height /= zoomFactor;
return super.viewToModel(x, y, alloc, bias);
}
}
}
|