aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPixmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkPixmap.cpp')
-rw-r--r--src/core/SkPixmap.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/core/SkPixmap.cpp b/src/core/SkPixmap.cpp
index 7e394b468f..bd6436e72a 100644
--- a/src/core/SkPixmap.cpp
+++ b/src/core/SkPixmap.cpp
@@ -446,3 +446,32 @@ bool SkPixmapPriv::Orient(const SkPixmap& dst, const SkPixmap& src, OrientFlags
return draw_orientation(dst, src, flags);
}
+#define kMirrorX SkPixmapPriv::kMirrorX
+#define kMirrorY SkPixmapPriv::kMirrorY
+#define kSwapXY SkPixmapPriv::kSwapXY
+
+static constexpr uint8_t gOrientationFlags[] = {
+ 0, // kTopLeft_SkEncodedOrigin
+ kMirrorX, // kTopRight_SkEncodedOrigin
+ kMirrorX | kMirrorY, // kBottomRight_SkEncodedOrigin
+ kMirrorY, // kBottomLeft_SkEncodedOrigin
+ kSwapXY, // kLeftTop_SkEncodedOrigin
+ kMirrorX | kSwapXY, // kRightTop_SkEncodedOrigin
+ kMirrorX | kMirrorY | kSwapXY, // kRightBottom_SkEncodedOrigin
+ kMirrorY | kSwapXY, // kLeftBottom_SkEncodedOrigin
+};
+
+SkPixmapPriv::OrientFlags SkPixmapPriv::OriginToOrient(SkEncodedOrigin o) {
+ unsigned io = static_cast<int>(o) - 1;
+ SkASSERT(io < SK_ARRAY_COUNT(gOrientationFlags));
+ return static_cast<SkPixmapPriv::OrientFlags>(gOrientationFlags[io]);
+}
+
+bool SkPixmapPriv::ShouldSwapWidthHeight(SkEncodedOrigin o) {
+ return SkToBool(OriginToOrient(o) & kSwapXY);
+}
+
+SkImageInfo SkPixmapPriv::SwapWidthHeight(const SkImageInfo& info) {
+ return info.makeWH(info.height(), info.width());
+}
+