Skip to content

Commit a8c1d26

Browse files
Ink Open Sourcecopybara-github
authored andcommitted
Add remaining methods for MutableAffineTransform
This adds populateFrom(), populateFromIdentity(), populateFromTranslate(), populateFromScale(scaleFactor: Float), populateFromScale(xScaleFactor: Float, yScaleFactor: Float), populateFromScaleX(), populateFromScaleY(), populateFromShearX(), populateFromShearY(), populateFromRotate() PiperOrigin-RevId: 684094541
1 parent fcac605 commit a8c1d26

File tree

7 files changed

+106
-13
lines changed

7 files changed

+106
-13
lines changed

ink/geometry/internal/jni/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ cc_library(
250250
":vec_jni_helper",
251251
"//ink/geometry:angle",
252252
"//ink/geometry:envelope",
253+
"//ink/geometry:point",
253254
"//ink/geometry:quad",
254255
"//ink/geometry:vec",
255256
"//ink/jni/internal:jni_defines",
@@ -268,8 +269,10 @@ cc_library(
268269
srcs = ["parallelogram_jni_helper.cc"],
269270
hdrs = ["parallelogram_jni_helper.h"],
270271
deps = [
272+
":vec_jni_helper",
271273
"//ink/geometry:point",
272274
"//ink/geometry:quad",
275+
"//ink/jni/internal:jni_defines",
273276
"@com_google_absl//absl/log:absl_check",
274277
] + select({
275278
"@platforms//os:android": [],

ink/geometry/internal/jni/affine_transform_jni.cc

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,28 @@ using ::ink::Quad;
3030

3131
extern "C" {
3232

33-
JNI_METHOD(geometry, AffineTransformHelper, void, nativeApplyParallelogram)
33+
JNI_METHOD(geometry_internal, AffineTransformNative, jobject,
34+
createFromApplyParallelogram)
35+
(JNIEnv* env, jclass clazz, jfloat affine_transform_A,
36+
jfloat affine_transform_B, jfloat affine_transform_C,
37+
jfloat affine_transform_D, jfloat affine_transform_E,
38+
jfloat affine_transform_F, jfloat quad_center_x, jfloat quad_center_y,
39+
jfloat quad_width, jfloat quad_height, jfloat quad_rotation,
40+
jfloat quad_shear_factor, jclass immutable_parallelogram_class,
41+
jclass immutable_vec_class) {
42+
return ink::CreateJImmutableParallelogram(
43+
env,
44+
AffineTransform(affine_transform_A, affine_transform_B,
45+
affine_transform_C, affine_transform_D,
46+
affine_transform_E, affine_transform_F)
47+
.Apply(Quad::FromCenterDimensionsRotationAndShear(
48+
{.x = quad_center_x, .y = quad_center_y}, quad_width, quad_height,
49+
Angle::Radians(quad_rotation), quad_shear_factor)),
50+
immutable_parallelogram_class, immutable_vec_class);
51+
}
52+
53+
JNI_METHOD(geometry_internal, AffineTransformNative, void,
54+
populateFromApplyParallelogram)
3455
(JNIEnv* env, jclass clazz, jfloat affine_transform_A,
3556
jfloat affine_transform_B, jfloat affine_transform_C,
3657
jfloat affine_transform_D, jfloat affine_transform_E,

ink/geometry/internal/jni/parallelogram_jni.cc

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
#include <jni.h>
1616

17+
#include <array>
1718
#include <utility>
1819

1920
#include "ink/geometry/angle.h"
2021
#include "ink/geometry/envelope.h"
2122
#include "ink/geometry/internal/jni/rect_jni_helper.h"
2223
#include "ink/geometry/internal/jni/vec_jni_helper.h"
24+
#include "ink/geometry/point.h"
2325
#include "ink/geometry/quad.h"
2426
#include "ink/geometry/vec.h"
2527
#include "ink/jni/internal/jni_defines.h"
@@ -28,14 +30,15 @@ namespace {
2830

2931
using ::ink::Angle;
3032
using ::ink::Envelope;
33+
using ::ink::Point;
3134
using ::ink::Quad;
3235
using ::ink::Vec;
3336

3437
} // namespace
3538

3639
extern "C" {
3740

38-
JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
41+
JNI_METHOD(geometry_internal, ParallelogramNative, jobject, createBoundingBox)
3942
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
4043
jfloat height, jfloat rotation, jfloat shear_factor,
4144
jclass immutable_box_class, jclass immutable_vec_class) {
@@ -48,7 +51,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
4851
immutable_vec_class);
4952
}
5053

51-
JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
54+
JNI_METHOD(geometry_internal, ParallelogramNative, void, populateBoundingBox)
5255
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
5356
jfloat height, jfloat rotation, jfloat shear_factor, jobject mutable_box) {
5457
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
@@ -59,7 +62,7 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
5962
Envelope(quad).AsRect().value());
6063
}
6164

62-
JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
65+
JNI_METHOD(geometry_internal, ParallelogramNative, jobjectArray, createSemiAxes)
6366
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
6467
jfloat height, jfloat rotation, jfloat shear_factor,
6568
jclass immutable_vec_class) {
@@ -78,7 +81,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
7881
return vector_array;
7982
}
8083

81-
JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
84+
JNI_METHOD(geometry_internal, ParallelogramNative, void, populateSemiAxes)
8285
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
8386
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_axis1,
8487
jobject out_axis2) {
@@ -90,4 +93,46 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
9093
ink::FillJMutableVecFromVec(env, out_axis2, axes.second);
9194
}
9295

96+
JNI_METHOD(geometry_internal, ParallelogramNative, jobjectArray, createCorners)
97+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
98+
jfloat height, jfloat rotation, jfloat shear_factor,
99+
jclass immutable_vec_class) {
100+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
101+
{center_x, center_y}, width, height, Angle::Radians(rotation),
102+
shear_factor);
103+
std::array<Point, 4> corners = quad.Corners();
104+
jobjectArray vector_array =
105+
env->NewObjectArray(4, immutable_vec_class, nullptr);
106+
for (int i = 0; i < 4; ++i) {
107+
env->SetObjectArrayElement(vector_array, i,
108+
ink::CreateJImmutableVecFromPoint(
109+
env, corners[i], immutable_vec_class));
110+
}
111+
return vector_array;
112+
}
113+
114+
JNI_METHOD(geometry_internal, ParallelogramNative, void, populateCorners)
115+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
116+
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_corner1,
117+
jobject out_corner2, jobject out_corner3, jobject out_corner4) {
118+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
119+
{center_x, center_y}, width, height, Angle::Radians(rotation),
120+
shear_factor);
121+
std::array<Point, 4> corners = quad.Corners();
122+
ink::FillJMutableVecFromPoint(env, out_corner1, corners[0]);
123+
ink::FillJMutableVecFromPoint(env, out_corner2, corners[1]);
124+
ink::FillJMutableVecFromPoint(env, out_corner3, corners[2]);
125+
ink::FillJMutableVecFromPoint(env, out_corner4, corners[3]);
126+
}
127+
128+
JNI_METHOD(geometry_internal, ParallelogramNative, jboolean, contains)
129+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
130+
jfloat height, jfloat rotation, jfloat shear_factor, jfloat point_x,
131+
jfloat point_y) {
132+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
133+
{center_x, center_y}, width, height, Angle::Radians(rotation),
134+
shear_factor);
135+
return quad.Contains({point_x, point_y});
136+
}
137+
93138
} // extern "C"

ink/geometry/internal/jni/parallelogram_jni_helper.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,31 @@
1717
#include <jni.h>
1818

1919
#include "absl/log/absl_check.h"
20+
#include "ink/geometry/internal/jni/vec_jni_helper.h"
2021
#include "ink/geometry/point.h"
2122
#include "ink/geometry/quad.h"
23+
#include "ink/jni/internal/jni_defines.h"
2224

2325
namespace ink {
26+
27+
jobject CreateJImmutableParallelogram(JNIEnv* env, const Quad& quad,
28+
jclass immutable_parallelogram_class,
29+
jclass immutable_vec_class) {
30+
ABSL_CHECK(immutable_parallelogram_class);
31+
32+
jmethodID from_center_dim_rot_shear_method = env->GetStaticMethodID(
33+
immutable_parallelogram_class, "fromCenterDimensionsRotationAndShear",
34+
"(L" INK_PACKAGE "/geometry/ImmutableVec;FFFF)L" INK_PACKAGE
35+
"/geometry/ImmutableParallelogram;");
36+
ABSL_CHECK(from_center_dim_rot_shear_method);
37+
return env->CallStaticObjectMethod(
38+
immutable_parallelogram_class, from_center_dim_rot_shear_method,
39+
ink::CreateJImmutableVecFromPoint(env, {quad.Center().x, quad.Center().y},
40+
immutable_vec_class),
41+
quad.Width(), quad.Height(), quad.Rotation().ValueInRadians(),
42+
quad.ShearFactor());
43+
}
44+
2445
void FillJMutableParallelogram(JNIEnv* env, const Quad& quad,
2546
jobject mutable_parallelogram) {
2647
jclass mutable_parallelogram_class =

ink/geometry/internal/jni/parallelogram_jni_helper.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include "ink/geometry/quad.h"
2121

2222
namespace ink {
23+
jobject CreateJImmutableParallelogram(JNIEnv* env, const Quad& quad,
24+
jclass immutable_parallelogram_class,
25+
jclass immutable_vec_class);
2326

2427
void FillJMutableParallelogram(JNIEnv* env, const Quad& quad,
2528
jobject mutable_parallelogram);

ink/geometry/internal/jni/rect_jni.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ using ::ink::Rect;
2828

2929
extern "C" {
3030

31-
JNI_METHOD(geometry, BoxHelper, jobject, nativeCreateCenter)
31+
JNI_METHOD(geometry_internal, BoxNative, jobject, createCenter)
3232
(JNIEnv* env, jclass clazz, float rect_x_min, jfloat rect_y_min,
3333
jfloat rect_x_max, jfloat rect_y_max, jclass immutable_vec_class) {
3434
Rect rect =
@@ -38,7 +38,7 @@ JNI_METHOD(geometry, BoxHelper, jobject, nativeCreateCenter)
3838
return ink::CreateJImmutableVecFromPoint(env, point, immutable_vec_class);
3939
}
4040

41-
JNI_METHOD(geometry, BoxHelper, void, nativePopulateCenter)
41+
JNI_METHOD(geometry_internal, BoxNative, void, populateCenter)
4242
(JNIEnv* env, jclass clazz, float rect_x_min, jfloat rect_y_min,
4343
jfloat rect_x_max, jfloat rect_y_max, jobject mutable_vec) {
4444
Rect rect =
@@ -48,15 +48,15 @@ JNI_METHOD(geometry, BoxHelper, void, nativePopulateCenter)
4848
ink::FillJMutableVecFromPoint(env, mutable_vec, point);
4949
}
5050

51-
JNI_METHOD(geometry, BoxHelper, jboolean, nativeContainsPoint)
51+
JNI_METHOD(geometry_internal, BoxNative, jboolean, containsPoint)
5252
(JNIEnv* env, jclass clazz, jfloat rect_x_min, jfloat rect_y_min,
5353
jfloat rect_x_max, jfloat rect_y_max, jfloat point_x, jfloat point_y) {
5454
Rect rect =
5555
Rect::FromTwoPoints({rect_x_min, rect_y_min}, {rect_x_max, rect_y_max});
5656
return rect.Contains(Point{point_x, point_y});
5757
}
5858

59-
JNI_METHOD(geometry, BoxHelper, jboolean, nativeContainsBox)
59+
JNI_METHOD(geometry_internal, BoxNative, jboolean, containsBox)
6060
(JNIEnv* env, jclass clazz, jfloat rect_x_min, jfloat rect_y_min,
6161
jfloat rect_x_max, jfloat rect_y_max, jfloat other_x_min, jfloat other_y_min,
6262
jfloat other_x_max, jfloat other_y_max) {

ink/geometry/internal/jni/vec_jni.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,29 @@ using ::ink::Vec;
2626

2727
extern "C" {
2828

29-
JNI_METHOD(geometry, VecNative, jobject, unitVec)
29+
JNI_METHOD(geometry_internal, VecNative, jobject, unitVec)
3030
(JNIEnv* env, jclass clazz, jfloat vec_X, jfloat vec_Y,
3131
jclass immutable_vec_class) {
3232
return CreateJImmutableVecFromVec(env, Vec{vec_X, vec_Y}.AsUnitVec(),
3333
immutable_vec_class);
3434
}
3535

36-
JNI_METHOD(geometry, VecNative, void, populateUnitVec)
36+
JNI_METHOD(geometry_internal, VecNative, void, populateUnitVec)
3737
(JNIEnv* env, jclass clazz, jfloat vec_X, jfloat vec_Y,
3838
jobject output_mutable_vec) {
3939
FillJMutableVecFromVec(env, output_mutable_vec,
4040
Vec{vec_X, vec_Y}.AsUnitVec());
4141
}
4242

43-
JNI_METHOD(geometry, VecNative, jfloat, absoluteAngleBetween)
43+
JNI_METHOD(geometry_internal, VecNative, jfloat, absoluteAngleBetween)
4444
(JNIEnv* env, jclass clazz, jfloat first_vec_X, jfloat first_vec_Y,
4545
jfloat second_vec_X, jfloat second_vec_Y) {
4646
return Vec::AbsoluteAngleBetween(Vec{first_vec_X, first_vec_Y},
4747
Vec{second_vec_X, second_vec_Y})
4848
.ValueInRadians();
4949
}
5050

51-
JNI_METHOD(geometry, VecNative, jfloat, signedAngleBetween)
51+
JNI_METHOD(geometry_internal, VecNative, jfloat, signedAngleBetween)
5252
(JNIEnv* env, jclass clazz, jfloat first_vec_X, jfloat first_vec_Y,
5353
jfloat second_vec_X, jfloat second_vec_Y) {
5454
return Vec::SignedAngleBetween(Vec{first_vec_X, first_vec_Y},

0 commit comments

Comments
 (0)