Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(584)

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp

Issue 2630783002: Remove |success| parameter from GeometryMapper's public methods (Closed)
Patch Set: Rebase Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp b/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
index 75006d20ad12f04a17251be818fa5a95a6e1d1ac..433ddc68319146bd00bd77f03f4d477b481866a9 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
+++ b/third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.cpp
@@ -12,73 +12,79 @@ namespace blink {
FloatRect GeometryMapper::sourceToDestinationVisualRect(
const FloatRect& rect,
const PropertyTreeState& sourceState,
- const PropertyTreeState& destinationState,
- bool& success) {
- FloatRect result =
- localToAncestorVisualRect(rect, sourceState, destinationState, success);
- if (success)
- return result;
- return slowSourceToDestinationVisualRect(rect, sourceState, destinationState,
- success);
+ const PropertyTreeState& destinationState) {
+ bool success = false;
+ FloatRect result = sourceToDestinationVisualRectInternal(
+ rect, sourceState, destinationState, success);
+ DCHECK(success);
+ return result;
}
-FloatRect GeometryMapper::sourceToDestinationRect(
+FloatRect GeometryMapper::sourceToDestinationVisualRectInternal(
const FloatRect& rect,
- const TransformPaintPropertyNode* sourceTransformNode,
- const TransformPaintPropertyNode* destinationTransformNode,
+ const PropertyTreeState& sourceState,
+ const PropertyTreeState& destinationState,
bool& success) {
- FloatRect result = localToAncestorRect(rect, sourceTransformNode,
- destinationTransformNode, success);
+ FloatRect result = localToAncestorVisualRectInternal(
+ rect, sourceState, destinationState, success);
+ // Success if destinationState is an ancestor state.
if (success)
return result;
- return slowSourceToDestinationRect(rect, sourceTransformNode,
- destinationTransformNode, success);
-}
-FloatRect GeometryMapper::slowSourceToDestinationVisualRect(
- const FloatRect& rect,
- const PropertyTreeState& sourceState,
- const PropertyTreeState& destinationState,
- bool& success) {
+ // Otherwise first map to the least common ancestor, then map to destination.
const TransformPaintPropertyNode* lcaTransform = leastCommonAncestor(
sourceState.transform(), destinationState.transform());
DCHECK(lcaTransform);
// Assume that the clip of destinationState is an ancestor of the clip of
// sourceState and is under the space of lcaTransform. Otherwise
- // localToAncestorClipRect() will fail.
+ // localToAncestorVisualRect() will fail.
PropertyTreeState lcaState = destinationState;
lcaState.setTransform(lcaTransform);
- FloatRect result =
- localToAncestorVisualRect(rect, sourceState, lcaState, success);
+ FloatRect lcaVisualRect =
+ localToAncestorVisualRectInternal(rect, sourceState, lcaState, success);
if (!success)
- return result;
-
- return ancestorToLocalRect(result, lcaTransform, destinationState.transform(),
- success);
+ return lcaVisualRect;
+ return ancestorToLocalRect(lcaVisualRect, lcaTransform,
+ destinationState.transform());
}
-FloatRect GeometryMapper::slowSourceToDestinationRect(
+FloatRect GeometryMapper::sourceToDestinationRect(
const FloatRect& rect,
const TransformPaintPropertyNode* sourceTransformNode,
- const TransformPaintPropertyNode* destinationTransformNode,
- bool& success) {
+ const TransformPaintPropertyNode* destinationTransformNode) {
+ bool success = false;
+ FloatRect result = localToAncestorRectInternal(
+ rect, sourceTransformNode, destinationTransformNode, success);
+ // Success if destinationTransformNode is an ancestor of sourceTransformNode.
+ if (success)
+ return result;
+
+ // Otherwise first map to the least common ancestor, then map to destination.
const TransformPaintPropertyNode* lcaTransform =
leastCommonAncestor(sourceTransformNode, destinationTransformNode);
DCHECK(lcaTransform);
- FloatRect result =
- localToAncestorRect(rect, sourceTransformNode, lcaTransform, success);
- DCHECK(success);
-
- return ancestorToLocalRect(result, lcaTransform, destinationTransformNode,
- success);
+ FloatRect lcaRect =
+ localToAncestorRect(rect, sourceTransformNode, lcaTransform);
+ return ancestorToLocalRect(lcaRect, lcaTransform, destinationTransformNode);
}
FloatRect GeometryMapper::localToAncestorVisualRect(
const FloatRect& rect,
const PropertyTreeState& localState,
+ const PropertyTreeState& ancestorState) {
+ bool success = false;
+ FloatRect result = localToAncestorVisualRectInternal(rect, localState,
+ ancestorState, success);
+ DCHECK(success);
+ return result;
+}
+
+FloatRect GeometryMapper::localToAncestorVisualRectInternal(
+ const FloatRect& rect,
+ const PropertyTreeState& localState,
const PropertyTreeState& ancestorState,
bool& success) {
if (localState == ancestorState) {
@@ -86,7 +92,7 @@ FloatRect GeometryMapper::localToAncestorVisualRect(
return rect;
}
- const auto& transformMatrix = localToAncestorMatrix(
+ const auto& transformMatrix = localToAncestorMatrixInternal(
localState.transform(), ancestorState.transform(), success);
if (!success)
return rect;
@@ -94,7 +100,7 @@ FloatRect GeometryMapper::localToAncestorVisualRect(
FloatRect mappedRect = transformMatrix.mapRect(rect);
const auto clipRect =
- localToAncestorClipRect(localState, ancestorState, success);
+ localToAncestorClipRectInternal(localState, ancestorState, success);
if (success) {
mappedRect.intersect(clipRect);
@@ -114,6 +120,17 @@ FloatRect GeometryMapper::localToAncestorVisualRect(
FloatRect GeometryMapper::localToAncestorRect(
const FloatRect& rect,
const TransformPaintPropertyNode* localTransformNode,
+ const TransformPaintPropertyNode* ancestorTransformNode) {
+ bool success = false;
+ FloatRect result = localToAncestorRectInternal(
+ rect, localTransformNode, ancestorTransformNode, success);
+ DCHECK(success);
+ return result;
+}
+
+FloatRect GeometryMapper::localToAncestorRectInternal(
+ const FloatRect& rect,
+ const TransformPaintPropertyNode* localTransformNode,
const TransformPaintPropertyNode* ancestorTransformNode,
bool& success) {
if (localTransformNode == ancestorTransformNode) {
@@ -121,8 +138,8 @@ FloatRect GeometryMapper::localToAncestorRect(
return rect;
}
- const auto& transformMatrix =
- localToAncestorMatrix(localTransformNode, ancestorTransformNode, success);
+ const auto& transformMatrix = localToAncestorMatrixInternal(
+ localTransformNode, ancestorTransformNode, success);
if (!success)
return rect;
return transformMatrix.mapRect(rect);
@@ -131,23 +148,13 @@ FloatRect GeometryMapper::localToAncestorRect(
FloatRect GeometryMapper::ancestorToLocalRect(
const FloatRect& rect,
const TransformPaintPropertyNode* ancestorTransformNode,
- const TransformPaintPropertyNode* localTransformNode,
- bool& success) {
- if (localTransformNode == ancestorTransformNode) {
- success = true;
+ const TransformPaintPropertyNode* localTransformNode) {
+ if (localTransformNode == ancestorTransformNode)
return rect;
- }
const auto& transformMatrix =
- localToAncestorMatrix(localTransformNode, ancestorTransformNode, success);
- if (!success)
- return rect;
-
- if (!transformMatrix.isInvertible()) {
- success = false;
- return rect;
- }
- success = true;
+ localToAncestorMatrix(localTransformNode, ancestorTransformNode);
+ DCHECK(transformMatrix.isInvertible());
// TODO(chrishtr): Cache the inverse?
return transformMatrix.inverse().mapRect(rect);
@@ -163,6 +170,16 @@ PrecomputedDataForAncestor& GeometryMapper::getPrecomputedDataForAncestor(
FloatRect GeometryMapper::localToAncestorClipRect(
const PropertyTreeState& localState,
+ const PropertyTreeState& ancestorState) {
+ bool success = false;
+ FloatRect result =
+ localToAncestorClipRectInternal(localState, ancestorState, success);
+ DCHECK(success);
+ return result;
+}
+
+FloatRect GeometryMapper::localToAncestorClipRectInternal(
+ const PropertyTreeState& localState,
const PropertyTreeState& ancestorState,
bool& success) {
FloatRect clip(LayoutRect::infiniteIntRect());
@@ -197,7 +214,7 @@ FloatRect GeometryMapper::localToAncestorClipRect(
for (auto it = intermediateNodes.rbegin(); it != intermediateNodes.rend();
++it) {
success = false;
- const TransformationMatrix& transformMatrix = localToAncestorMatrix(
+ const TransformationMatrix& transformMatrix = localToAncestorMatrixInternal(
(*it)->localTransformSpace(), ancestorState.transform(), success);
if (!success)
return clip;
@@ -212,6 +229,16 @@ FloatRect GeometryMapper::localToAncestorClipRect(
const TransformationMatrix& GeometryMapper::localToAncestorMatrix(
const TransformPaintPropertyNode* localTransformNode,
+ const TransformPaintPropertyNode* ancestorTransformNode) {
+ bool success = false;
+ const auto& result = localToAncestorMatrixInternal(
+ localTransformNode, ancestorTransformNode, success);
+ DCHECK(success);
+ return result;
+}
+
+const TransformationMatrix& GeometryMapper::localToAncestorMatrixInternal(
+ const TransformPaintPropertyNode* localTransformNode,
const TransformPaintPropertyNode* ancestorTransformNode,
bool& success) {
if (localTransformNode == ancestorTransformNode) {

Powered by Google App Engine
This is Rietveld 408576698