bool _matchesRotateRequirement()

in cpp/spectrum/core/matchers/RotateMatcher.cpp [20:47]


bool _matchesRotateRequirement(
    const Rule::RotateSupport rotateSupport,
    const spectrum::requirements::Rotate& rotateRequirement) {
  const auto isRotationMultipleOf90 =
      numeric::isMultipleOf90(rotateRequirement.degrees);
  const auto isRotationMultipleOf180 =
      numeric::isMultipleOf180(rotateRequirement.degrees);

  switch (rotateSupport) {
    case Rule::RotateSupport::None:
      // Whether there's a forced rotation (assigned degrees or flip) or a
      // potential rotation (forceUpOrientation) we exclude non-noop rotate
      // requirements from rules that cannot rotate.
      return rotateRequirement.noop();
    case Rule::RotateSupport::MultipleOf90:
      // Excluding forceUpOrientation as the orientation may derive from
      // metadata which can be flipped.
      return isRotationMultipleOf90 && !rotateRequirement.flip() &&
          !rotateRequirement.forceUpOrientation;
    case Rule::RotateSupport::MultipleOf180:
      return isRotationMultipleOf180 && !rotateRequirement.flip() &&
          !rotateRequirement.forceUpOrientation;
    case Rule::RotateSupport::MultipleOf90Flip:
      return isRotationMultipleOf90;
    default:
      SPECTRUM_UNREACHABLE;
  }
}