您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
59 行
3.1 KiB
59 行
3.1 KiB
diff --git a/src/core/SkRRect.cpp b/src/core/SkRRect.cpp
|
|
index 3527cd1f77..a5323b4bad 100644
|
|
--- a/src/core/SkRRect.cpp
|
|
+++ b/src/core/SkRRect.cpp
|
|
@@ -288,6 +288,17 @@ bool SkRRect::checkCornerContainment(SkScalar x, SkScalar y) const {
|
|
return dist <= SkScalarSquare(fRadii[index].fX * fRadii[index].fY);
|
|
}
|
|
|
|
+bool SkRRectPriv::IsNearlySimpleCircular(const SkRRect& rr, SkScalar tolerance) {
|
|
+ SkScalar simpleRadius = rr.fRadii[0].fX;
|
|
+ return SkScalarNearlyEqual(simpleRadius, rr.fRadii[0].fY, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[1].fX, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[1].fY, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[2].fX, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[2].fY, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[3].fX, tolerance) &&
|
|
+ SkScalarNearlyEqual(simpleRadius, rr.fRadii[3].fY, tolerance);
|
|
+}
|
|
+
|
|
bool SkRRectPriv::AllCornersCircular(const SkRRect& rr, SkScalar tolerance) {
|
|
return SkScalarNearlyEqual(rr.fRadii[0].fX, rr.fRadii[0].fY, tolerance) &&
|
|
SkScalarNearlyEqual(rr.fRadii[1].fX, rr.fRadii[1].fY, tolerance) &&
|
|
diff --git a/src/core/SkRRectPriv.h b/src/core/SkRRectPriv.h
|
|
index 4cf529569b..6a20791cb3 100644
|
|
--- a/src/core/SkRRectPriv.h
|
|
+++ b/src/core/SkRRectPriv.h
|
|
@@ -34,6 +34,8 @@ public:
|
|
|
|
static const SkVector* GetRadiiArray(const SkRRect& rr) { return rr.fRadii; }
|
|
|
|
+ static bool IsNearlySimpleCircular(const SkRRect& rr, SkScalar tolerance = SK_ScalarNearlyZero);
|
|
+
|
|
static bool AllCornersCircular(const SkRRect& rr, SkScalar tolerance = SK_ScalarNearlyZero);
|
|
|
|
static bool ReadFromBuffer(SkRBuffer* buffer, SkRRect* rr);
|
|
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
|
|
index 2eadfccac4..c556833191 100644
|
|
--- a/src/gpu/GrRenderTargetContext.cpp
|
|
+++ b/src/gpu/GrRenderTargetContext.cpp
|
|
@@ -1201,8 +1201,8 @@ bool GrRenderTargetContext::drawFastShadow(const GrClip& clip,
|
|
SkRRect rrect;
|
|
SkRect rect;
|
|
// we can only handle rects, circles, and rrects with circular corners
|
|
- bool isRRect = path.isRRect(&rrect) && SkRRectPriv::IsSimpleCircular(rrect) &&
|
|
- rrect.radii(SkRRect::kUpperLeft_Corner).fX > SK_ScalarNearlyZero;
|
|
+ bool isRRect = path.isRRect(&rrect) && SkRRectPriv::IsNearlySimpleCircular(rrect) &&
|
|
+ rrect.getSimpleRadii().fX > SK_ScalarNearlyZero;
|
|
if (!isRRect &&
|
|
path.isOval(&rect) && SkScalarNearlyEqual(rect.width(), rect.height()) &&
|
|
rect.width() > SK_ScalarNearlyZero) {
|
|
@@ -1299,7 +1299,7 @@ bool GrRenderTargetContext::drawFastShadow(const GrClip& clip,
|
|
SkMatrix shadowTransform;
|
|
shadowTransform.setScaleTranslate(spotScale, spotScale, spotOffset.fX, spotOffset.fY);
|
|
rrect.transform(shadowTransform, &spotShadowRRect);
|
|
- SkScalar spotRadius = SkRRectPriv::GetSimpleRadii(spotShadowRRect).fX;
|
|
+ SkScalar spotRadius = spotShadowRRect.getSimpleRadii().fX;
|
|
|
|
// Compute the insetWidth
|
|
SkScalar blurOutset = srcSpaceSpotBlur;
|