blob: 7cc9d98e4ffd376341bf61fa55aafee087c41f69 (
plain)
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
|
package com.artifex.mupdf.fitz;
public class RectI
{
public int x0;
public int y0;
public int x1;
public int y1;
public RectI()
{
x0 = y0 = x1 = y1 = 0;
}
public RectI(int x0, int y0, int x1, int y1) {
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
}
public RectI(RectI r) {
this(r.x0, r.y0, r.x1, r.y1);
}
public RectI(Rect r) {
this.x0 = (int)Math.floor(r.x0);
this.y0 = (int)Math.ceil(r.y0);
this.x1 = (int)Math.floor(r.x1);
this.y1 = (int)Math.ceil(r.y1);
}
public String toString() {
return "[" + x0 + " " + y0 + " " + x1 + " " + y1 + "]";
}
public RectI transform(Matrix tm) {
float ax0 = x0 * tm.a;
float ax1 = x1 * tm.a;
if (ax0 > ax1) {
float t = ax0;
ax0 = ax1;
ax1 = t;
}
float cy0 = y0 * tm.c;
float cy1 = y1 * tm.c;
if (cy0 > cy1) {
float t = cy0;
cy0 = cy1;
cy1 = t;
}
ax0 += cy0 + tm.e;
ax1 += cy1 + tm.e;
float bx0 = x0 * tm.b;
float bx1 = x1 * tm.b;
if (bx0 > bx1) {
float t = bx0;
bx0 = bx1;
bx1 = t;
}
float dy0 = y0 * tm.d;
float dy1 = y1 * tm.d;
if (dy0 > dy1) {
float t = dy0;
dy0 = dy1;
dy1 = t;
}
bx0 += dy0 + tm.f;
bx1 += dy1 + tm.f;
x0 = (int)Math.floor(ax0);
x1 = (int)Math.ceil(ax1);
y0 = (int)Math.floor(bx0);
y1 = (int)Math.ceil(bx1);
return this;
}
public boolean contains(int x, int y)
{
if (isEmpty())
return false;
return (x >= x0 && x < x1 && y >= y0 && y < y1);
}
public boolean contains(Rect r)
{
if (isEmpty() || r.isEmpty())
return false;
return (r.x0 >= x0 && r.x1 <= x1 && r.y0 >= y0 && r.y1 <= y1);
}
public boolean isEmpty()
{
return (x0 == x1 || y0 == y1);
}
public void union(RectI r)
{
if (isEmpty())
{
x0 = r.x0;
y0 = r.y0;
x1 = r.x1;
y1 = r.y1;
}
else
{
if (r.x0 < x0)
x0 = r.x0;
if (r.y0 < y0)
y0 = r.y0;
if (r.x1 > x1)
x1 = r.x1;
if (r.y1 > y1)
y1 = r.y1;
}
}
}
|