blob: 53b53d252254c2ce5489d409be3d7f3236e993b9 [file] [log] [blame]
/*
* Copyright 2019 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrQuadUtils_DEFINED
#define GrQuadUtils_DEFINED
enum class GrQuadAAFlags;
enum class GrAA : bool;
enum class GrAAType : unsigned;
class GrQuad;
struct SkRect;
namespace GrQuadUtils {
// Resolve disagreements between the overall requested AA type and the per-edge quad AA flags.
// Both outAAType and outEdgeFlags will be updated.
void ResolveAAType(GrAAType requestedAAType, GrQuadAAFlags requestedEdgeFlags,
const GrQuad& quad, GrAAType* outAAtype, GrQuadAAFlags* outEdgeFlags);
/**
* Crops quad to the provided device-space axis-aligned rectangle. If the intersection of this
* quad (projected) and cropRect results in a quadrilateral, this returns true. If not, this
* quad may be updated to be a smaller quad of the same type such that its intersection with
* cropRect is visually the same. This function assumes that the 'quad' coordinates are finite.
*
* The provided edge flags are updated to reflect edges clipped by cropRect (toggling on or off
* based on cropAA policy). If provided, the local coordinates will be updated to reflect the
* updated device coordinates of this quad.
*
* 'local' may be null, in which case the new local coordinates will not be calculated. This is
* useful when it's known a paint does not require local coordinates. However, neither
* 'edgeFlags' nore 'quad' can be null.
*/
bool CropToRect(const SkRect& cropRect, GrAA cropAA, GrQuadAAFlags* edgeFlags, GrQuad* quad,
GrQuad* local=nullptr);
}; // namespace GrQuadUtils
#endif