in platform/cc/interop.cc [658:699]
jobject fromSkRRect(JNIEnv* env, const SkRRect& rr) {
const SkRect& r = rr.rect();
switch (rr.getType()) {
case SkRRect::Type::kEmpty_Type:
case SkRRect::Type::kRect_Type:
return env->CallStaticObjectMethod(cls, makeLTRB1, r.fLeft, r.fTop, r.fRight, r.fBottom, 0);
case SkRRect::Type::kOval_Type:
case SkRRect::Type::kSimple_Type: {
float rx = rr.getSimpleRadii().fX;
float ry = rr.getSimpleRadii().fY;
if (SkScalarNearlyEqual(rx, ry))
return env->CallStaticObjectMethod(cls, makeLTRB1, r.fLeft, r.fTop, r.fRight, r.fBottom, rx);
else
return env->CallStaticObjectMethod(cls, makeLTRB2, r.fLeft, r.fTop, r.fRight, r.fBottom, rx, ry);
}
case SkRRect::Type::kNinePatch_Type:
return env->CallStaticObjectMethod(cls, makeNinePatchLTRB,
r.fLeft, r.fTop, r.fRight, r.fBottom,
rr.radii(SkRRect::Corner::kUpperLeft_Corner).fX,
rr.radii(SkRRect::Corner::kUpperLeft_Corner).fY,
rr.radii(SkRRect::Corner::kLowerRight_Corner).fX,
rr.radii(SkRRect::Corner::kLowerRight_Corner).fY);
case SkRRect::Type::kComplex_Type:
std::vector<float> radii = {
rr.radii(SkRRect::Corner::kUpperLeft_Corner).fX,
rr.radii(SkRRect::Corner::kUpperLeft_Corner).fY,
rr.radii(SkRRect::Corner::kUpperRight_Corner).fX,
rr.radii(SkRRect::Corner::kUpperRight_Corner).fY,
rr.radii(SkRRect::Corner::kLowerRight_Corner).fX,
rr.radii(SkRRect::Corner::kLowerRight_Corner).fY,
rr.radii(SkRRect::Corner::kLowerLeft_Corner).fX,
rr.radii(SkRRect::Corner::kLowerLeft_Corner).fY
};
return env->CallStaticObjectMethod(cls, makeComplexLTRB, r.fLeft, r.fTop, r.fRight, r.fBottom, javaFloatArray(env, radii));
}
return nullptr;
}