12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef mozilla_image_DrawResult_h
- #define mozilla_image_DrawResult_h
- #include <cstdint> // for uint8_t
- #include "mozilla/Attributes.h"
- #include "mozilla/Likely.h"
- namespace mozilla {
- namespace image {
- /**
- * An enumeration representing the result of a drawing operation.
- *
- * Most users of DrawResult will only be interested in whether the value is
- * SUCCESS or not. The other values are primarily useful for debugging and error
- * handling.
- *
- * SUCCESS: We successfully drew a completely decoded frame of the requested
- * size. Drawing again with FLAG_SYNC_DECODE would not change the result.
- *
- * INCOMPLETE: We successfully drew a frame that was partially decoded. (Note
- * that successfully drawing a partially decoded frame may not actually draw any
- * pixels!) Drawing again with FLAG_SYNC_DECODE would improve the result.
- *
- * WRONG_SIZE: We successfully drew a wrongly-sized frame that had to be scaled.
- * This is only returned if drawing again with FLAG_SYNC_DECODE would improve
- * the result; if the size requested was larger than the intrinsic size of the
- * image, for example, we would generally have to scale whether FLAG_SYNC_DECODE
- * was specified or not, and therefore we would not return WRONG_SIZE.
- *
- * NOT_READY: We failed to draw because no decoded version of the image was
- * available. Drawing again with FLAG_SYNC_DECODE would improve the result.
- * (Though FLAG_SYNC_DECODE will not necessarily work until after the image's
- * load event!)
- *
- * TEMPORARY_ERROR: We failed to draw due to a temporary error. Drawing may
- * succeed at a later time.
- *
- * BAD_IMAGE: We failed to draw because the image has an error. This is a
- * permanent condition.
- *
- * BAD_ARGS: We failed to draw because bad arguments were passed to draw().
- */
- enum class MOZ_MUST_USE_TYPE DrawResult : uint8_t
- {
- SUCCESS,
- INCOMPLETE,
- WRONG_SIZE,
- NOT_READY,
- TEMPORARY_ERROR,
- BAD_IMAGE,
- BAD_ARGS
- };
- /**
- * You can combine DrawResults with &. By analogy to bitwise-&, the result is
- * DrawResult::SUCCESS only if both operands are DrawResult::SUCCESS. Otherwise,
- * a failing DrawResult is returned; we favor the left operand's failure when
- * deciding which failure to return, with the exception that we always prefer
- * any other kind of failure over DrawResult::BAD_IMAGE, since other failures
- * are recoverable and we want to know if any recoverable failures occurred.
- */
- inline DrawResult
- operator&(const DrawResult aLeft, const DrawResult aRight)
- {
- if (MOZ_LIKELY(aLeft == DrawResult::SUCCESS)) {
- return aRight;
- }
- if (aLeft == DrawResult::BAD_IMAGE && aRight != DrawResult::SUCCESS) {
- return aRight;
- }
- return aLeft;
- }
- inline DrawResult&
- operator&=(DrawResult& aLeft, const DrawResult aRight)
- {
- aLeft = aLeft & aRight;
- return aLeft;
- }
- } // namespace image
- } // namespace mozilla
- #endif // mozilla_image_DrawResult_h
|