Flutter Engine
The Flutter Engine
SkEncodedOrigin.h
Go to the documentation of this file.
1/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkEncodedOrigin_DEFINED
9#define SkEncodedOrigin_DEFINED
10
12
13// These values match the orientation www.exif.org/Exif2-2.PDF.
16 kTopRight_SkEncodedOrigin = 2, // Reflected across y-axis
17 kBottomRight_SkEncodedOrigin = 3, // Rotated 180
18 kBottomLeft_SkEncodedOrigin = 4, // Reflected across x-axis
19 kLeftTop_SkEncodedOrigin = 5, // Reflected across x-axis, Rotated 90 CCW
20 kRightTop_SkEncodedOrigin = 6, // Rotated 90 CW
21 kRightBottom_SkEncodedOrigin = 7, // Reflected across x-axis, Rotated 90 CW
22 kLeftBottom_SkEncodedOrigin = 8, // Rotated 90 CCW
25};
26
27/**
28 * Given an encoded origin and the width and height of the source data, returns a matrix
29 * that transforms the source rectangle with upper left corner at [0, 0] and origin to a correctly
30 * oriented destination rectangle of [0, 0, w, h].
31 */
32static inline SkMatrix SkEncodedOriginToMatrix(SkEncodedOrigin origin, int w, int h) {
33 switch (origin) {
35 case kTopRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, 1, 0, 0, 0, 1);
36 case kBottomRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, -1, h, 0, 0, 1);
37 case kBottomLeft_SkEncodedOrigin: return SkMatrix::MakeAll( 1, 0, 0, 0, -1, h, 0, 0, 1);
38 case kLeftTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, 1, 0, 0, 0, 0, 1);
39 case kRightTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, w, 1, 0, 0, 0, 0, 1);
40 case kRightBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, w, -1, 0, h, 0, 0, 1);
41 case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, h, 0, 0, 1);
42 }
43 SK_ABORT("Unexpected origin");
44}
45
46/**
47 * Return true if the encoded origin includes a 90 degree rotation, in which case the width
48 * and height of the source data are swapped relative to a correctly oriented destination.
49 */
51 return origin >= kLeftTop_SkEncodedOrigin;
52}
53
54#endif // SkEncodedOrigin_DEFINED
#define SK_ABORT(message,...)
Definition: SkAssert.h:70
SkEncodedOrigin
@ kBottomLeft_SkEncodedOrigin
@ kLast_SkEncodedOrigin
@ kLeftTop_SkEncodedOrigin
@ kTopRight_SkEncodedOrigin
@ kBottomRight_SkEncodedOrigin
@ kTopLeft_SkEncodedOrigin
@ kLeftBottom_SkEncodedOrigin
@ kRightBottom_SkEncodedOrigin
@ kDefault_SkEncodedOrigin
@ kRightTop_SkEncodedOrigin
static bool SkEncodedOriginSwapsWidthHeight(SkEncodedOrigin origin)
static SkMatrix SkEncodedOriginToMatrix(SkEncodedOrigin origin, int w, int h)
static SkMatrix MakeAll(SkScalar scaleX, SkScalar skewX, SkScalar transX, SkScalar skewY, SkScalar scaleY, SkScalar transY, SkScalar pers0, SkScalar pers1, SkScalar pers2)
Definition: SkMatrix.h:179
static const SkMatrix & I()
Definition: SkMatrix.cpp:1544
SkScalar w
SkScalar h