mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
edd1013c3e
This makes EXIF orientation metadata honored by default. Introduce OrientedPixel and UnorientedPixel typed rects and sizes and use them throughout RasterImage so that we don't confuse which we want. The reason for doing this rather than having the imgLoader wrap every RasterImage it creates with an OrientedImage is that returning the wrapper messes with various notifications, as OrientedImage is not an ImageResource. (It would be even better if the JPEG decoder could decode to imgFrames handling the EXIF orientation itself, but that's a more complicated change.) Differential Revision: https://phabricator.services.mozilla.com/D70273 --HG-- extra : moz-landing-system : lando
63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
/* -*- 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_Orientation_h
|
|
#define mozilla_image_Orientation_h
|
|
|
|
#include <stdint.h>
|
|
|
|
namespace mozilla {
|
|
namespace image {
|
|
|
|
enum class Angle : uint8_t { D0, D90, D180, D270 };
|
|
|
|
enum class Flip : uint8_t { Unflipped, Horizontal };
|
|
|
|
/**
|
|
* A struct that describes an image's orientation as a rotation optionally
|
|
* followed by a reflection. This may be used to be indicate an image's inherent
|
|
* orientation or a desired orientation for the image.
|
|
*/
|
|
struct Orientation {
|
|
explicit Orientation(Angle aRotation = Angle::D0,
|
|
Flip mFlip = Flip::Unflipped)
|
|
: rotation(aRotation), flip(mFlip) {}
|
|
|
|
bool IsIdentity() const {
|
|
return (rotation == Angle::D0) && (flip == Flip::Unflipped);
|
|
}
|
|
|
|
bool SwapsWidthAndHeight() const {
|
|
return (rotation == Angle::D90) || (rotation == Angle::D270);
|
|
}
|
|
|
|
bool operator==(const Orientation& aOther) const {
|
|
return (rotation == aOther.rotation) && (flip == aOther.flip);
|
|
}
|
|
|
|
bool operator!=(const Orientation& aOther) const {
|
|
return !(*this == aOther);
|
|
}
|
|
|
|
static Angle InvertAngle(Angle aAngle) {
|
|
switch (aAngle) {
|
|
case Angle::D90:
|
|
return Angle::D270;
|
|
case Angle::D270:
|
|
return Angle::D90;
|
|
default:
|
|
return aAngle;
|
|
}
|
|
}
|
|
|
|
Angle rotation;
|
|
Flip flip;
|
|
};
|
|
|
|
} // namespace image
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_image_Orientation_h
|