mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
0d21baf604
Summary: Canvas.save by default saves both the matrix (for translations, scaling, etc) and the clip (clipRect) - in most of our cases, we really only care to save and restore the clip, not the matrix. Reviewed By: sriramramani Differential Revision: D3235698
68 lines
2.0 KiB
Java
68 lines
2.0 KiB
Java
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
package com.facebook.react.flat;
|
|
|
|
import android.graphics.Canvas;
|
|
|
|
/* package */ abstract class AbstractClippingDrawCommand implements DrawCommand {
|
|
|
|
protected boolean mNeedsClipping;
|
|
private float mClipLeft;
|
|
private float mClipTop;
|
|
private float mClipRight;
|
|
private float mClipBottom;
|
|
|
|
public final boolean clipBoundsMatch(
|
|
float clipLeft,
|
|
float clipTop,
|
|
float clipRight,
|
|
float clipBottom) {
|
|
return mClipLeft == clipLeft && mClipTop == clipTop
|
|
&& mClipRight == clipRight && mClipBottom == clipBottom;
|
|
}
|
|
|
|
public final void setClipBounds(
|
|
float clipLeft,
|
|
float clipTop,
|
|
float clipRight,
|
|
float clipBottom) {
|
|
mClipLeft = clipLeft;
|
|
mClipTop = clipTop;
|
|
mClipRight = clipRight;
|
|
mClipBottom = clipBottom;
|
|
mNeedsClipping = mClipLeft != Float.NEGATIVE_INFINITY;
|
|
}
|
|
|
|
public final float getClipLeft() {
|
|
return mClipLeft;
|
|
}
|
|
|
|
public final float getClipTop() {
|
|
return mClipTop;
|
|
}
|
|
|
|
public final float getClipRight() {
|
|
return mClipRight;
|
|
}
|
|
|
|
public final float getClipBottom() {
|
|
return mClipBottom;
|
|
}
|
|
|
|
protected final void applyClipping(Canvas canvas) {
|
|
// We put this check here to not clip when we have the default [-infinity, infinity] bounds,
|
|
// since clipRect in those cases is essentially no-op anyway. This is needed to fix a bug that
|
|
// shows up during screenshot testing. Note that checking one side is enough, since if one side
|
|
// is infinite, all sides will be infinite, since we only set infinite for all sides at the
|
|
// same time - conversely, if one side is finite, all sides will be finite.
|
|
canvas.clipRect(mClipLeft, mClipTop, mClipRight, mClipBottom);
|
|
}
|
|
}
|