14
14
15
15
#include < jni.h>
16
16
17
+ #include < array>
17
18
#include < utility>
18
19
19
20
#include " ink/geometry/angle.h"
20
21
#include " ink/geometry/envelope.h"
21
22
#include " ink/geometry/internal/jni/rect_jni_helper.h"
22
23
#include " ink/geometry/internal/jni/vec_jni_helper.h"
24
+ #include " ink/geometry/point.h"
23
25
#include " ink/geometry/quad.h"
24
26
#include " ink/geometry/vec.h"
25
27
#include " ink/jni/internal/jni_defines.h"
@@ -28,14 +30,16 @@ namespace {
28
30
29
31
using ::ink::Angle;
30
32
using ::ink::Envelope;
33
+ using ::ink::Point;
31
34
using ::ink::Quad;
32
35
using ::ink::Vec;
33
36
34
37
} // namespace
35
38
36
39
extern " C" {
37
40
38
- JNI_METHOD (geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
41
+ JNI_METHOD (geometry_internal, ParallelogramNative, jobject,
42
+ nativeCreateBoundingBox)
39
43
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
40
44
jfloat height, jfloat rotation, jfloat shear_factor,
41
45
jclass immutable_box_class, jclass immutable_vec_class) {
@@ -48,7 +52,8 @@ JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
48
52
immutable_vec_class);
49
53
}
50
54
51
- JNI_METHOD (geometry, ParallelogramNative, void , nativePopulateBoundingBox)
55
+ JNI_METHOD (geometry_internal, ParallelogramNative, void ,
56
+ nativePopulateBoundingBox)
52
57
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
53
58
jfloat height, jfloat rotation, jfloat shear_factor, jobject mutable_box) {
54
59
Quad quad = Quad::FromCenterDimensionsRotationAndShear (
@@ -59,7 +64,8 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
59
64
Envelope (quad).AsRect ().value ());
60
65
}
61
66
62
- JNI_METHOD (geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
67
+ JNI_METHOD (geometry_internal, ParallelogramNative, jobjectArray,
68
+ nativeCreateSemiAxes)
63
69
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
64
70
jfloat height, jfloat rotation, jfloat shear_factor,
65
71
jclass immutable_vec_class) {
@@ -78,7 +84,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
78
84
return vector_array;
79
85
}
80
86
81
- JNI_METHOD (geometry , ParallelogramNative, void , nativePopulateSemiAxes)
87
+ JNI_METHOD (geometry_internal , ParallelogramNative, void , nativePopulateSemiAxes)
82
88
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
83
89
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_axis1,
84
90
jobject out_axis2) {
@@ -90,4 +96,47 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
90
96
ink::FillJMutableVecFromVec (env, out_axis2, axes.second );
91
97
}
92
98
99
+ JNI_METHOD (geometry_internal, ParallelogramNative, jobjectArray,
100
+ nativeCreateCorners)
101
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
102
+ jfloat height, jfloat rotation, jfloat shear_factor,
103
+ jclass immutable_vec_class) {
104
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
105
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
106
+ shear_factor);
107
+ std::array<Point, 4 > corners = quad.Corners ();
108
+ jobjectArray vector_array =
109
+ env->NewObjectArray (4 , immutable_vec_class, nullptr );
110
+ for (int i = 0 ; i < 4 ; ++i) {
111
+ env->SetObjectArrayElement (vector_array, i,
112
+ ink::CreateJImmutableVecFromPoint (
113
+ env, corners[i], immutable_vec_class));
114
+ }
115
+ return vector_array;
116
+ }
117
+
118
+ JNI_METHOD (geometry_internal, ParallelogramNative, void , nativePopulateCorners)
119
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
120
+ jfloat height, jfloat rotation, jfloat shear_factor, jobject out_corner1,
121
+ jobject out_corner2, jobject out_corner3, jobject out_corner4) {
122
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
123
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
124
+ shear_factor);
125
+ std::array<Point, 4 > corners = quad.Corners ();
126
+ ink::FillJMutableVecFromPoint (env, out_corner1, corners[0 ]);
127
+ ink::FillJMutableVecFromPoint (env, out_corner2, corners[1 ]);
128
+ ink::FillJMutableVecFromPoint (env, out_corner3, corners[2 ]);
129
+ ink::FillJMutableVecFromPoint (env, out_corner4, corners[3 ]);
130
+ }
131
+
132
+ JNI_METHOD (geometry_internal, ParallelogramNative, jboolean, nativeContains)
133
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
134
+ jfloat height, jfloat rotation, jfloat shear_factor, jfloat point_x,
135
+ jfloat point_y) {
136
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
137
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
138
+ shear_factor);
139
+ return quad.Contains ({point_x, point_y});
140
+ }
141
+
93
142
} // extern "C"
0 commit comments