|  | /* | 
|  | * 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 |