Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: include/core/SkMatrix.h

Issue 2122093002: make setScaleTranslate public (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | tests/MatrixTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkMatrix_DEFINED 10 #ifndef SkMatrix_DEFINED
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 } 703 }
704 704
705 /** 705 /**
706 * Testing routine; the matrix's type cache should never need to be 706 * Testing routine; the matrix's type cache should never need to be
707 * manually invalidated during normal use. 707 * manually invalidated during normal use.
708 */ 708 */
709 void dirtyMatrixTypeCache() { 709 void dirtyMatrixTypeCache() {
710 this->setTypeMask(kUnknown_Mask); 710 this->setTypeMask(kUnknown_Mask);
711 } 711 }
712 712
713 /**
714 * Initialize the matrix to be scale + post-translate.
715 */
716 void setScaleTranslate(SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty) {
717 fMat[kMScaleX] = sx;
718 fMat[kMSkewX] = 0;
719 fMat[kMTransX] = tx;
720
721 fMat[kMSkewY] = 0;
722 fMat[kMScaleY] = sy;
723 fMat[kMTransY] = ty;
724
725 fMat[kMPersp0] = 0;
726 fMat[kMPersp1] = 0;
727 fMat[kMPersp2] = 1;
728
729 unsigned mask = 0;
730 if (sx != 1 || sy != 1) {
731 mask |= kScale_Mask;
732 }
733 if (tx || ty) {
734 mask |= kTranslate_Mask;
735 }
736 this->setTypeMask(mask | kRectStaysRect_Mask);
737 }
738
713 private: 739 private:
714 enum { 740 enum {
715 /** Set if the matrix will map a rectangle to another rectangle. This 741 /** Set if the matrix will map a rectangle to another rectangle. This
716 can be true if the matrix is scale-only, or rotates a multiple of 742 can be true if the matrix is scale-only, or rotates a multiple of
717 90 degrees. 743 90 degrees.
718 744
719 This bit will be set on identity matrices 745 This bit will be set on identity matrices
720 */ 746 */
721 kRectStaysRect_Mask = 0x10, 747 kRectStaysRect_Mask = 0x10,
722 748
(...skipping 18 matching lines...) Expand all
741 767
742 SkScalar fMat[9]; 768 SkScalar fMat[9];
743 mutable uint32_t fTypeMask; 769 mutable uint32_t fTypeMask;
744 770
745 /** Are all elements of the matrix finite? 771 /** Are all elements of the matrix finite?
746 */ 772 */
747 bool isFinite() const { return SkScalarsAreFinite(fMat, 9); } 773 bool isFinite() const { return SkScalarsAreFinite(fMat, 9); }
748 774
749 static void ComputeInv(SkScalar dst[9], const SkScalar src[9], double invDet , bool isPersp); 775 static void ComputeInv(SkScalar dst[9], const SkScalar src[9], double invDet , bool isPersp);
750 776
751 void setScaleTranslate(SkScalar sx, SkScalar sy, SkScalar tx, SkScalar ty) {
752 fMat[kMScaleX] = sx;
753 fMat[kMSkewX] = 0;
754 fMat[kMTransX] = tx;
755
756 fMat[kMSkewY] = 0;
757 fMat[kMScaleY] = sy;
758 fMat[kMTransY] = ty;
759
760 fMat[kMPersp0] = 0;
761 fMat[kMPersp1] = 0;
762 fMat[kMPersp2] = 1;
763
764 unsigned mask = 0;
765 if (sx != 1 || sy != 1) {
766 mask |= kScale_Mask;
767 }
768 if (tx || ty) {
769 mask |= kTranslate_Mask;
770 }
771 this->setTypeMask(mask | kRectStaysRect_Mask);
772 }
773
774 uint8_t computeTypeMask() const; 777 uint8_t computeTypeMask() const;
775 uint8_t computePerspectiveTypeMask() const; 778 uint8_t computePerspectiveTypeMask() const;
776 779
777 void setTypeMask(int mask) { 780 void setTypeMask(int mask) {
778 // allow kUnknown or a valid mask 781 // allow kUnknown or a valid mask
779 SkASSERT(kUnknown_Mask == mask || (mask & kAllMasks) == mask || 782 SkASSERT(kUnknown_Mask == mask || (mask & kAllMasks) == mask ||
780 ((kUnknown_Mask | kOnlyPerspectiveValid_Mask) & mask) 783 ((kUnknown_Mask | kOnlyPerspectiveValid_Mask) & mask)
781 == (kUnknown_Mask | kOnlyPerspectiveValid_Mask)); 784 == (kUnknown_Mask | kOnlyPerspectiveValid_Mask));
782 fTypeMask = SkToU8(mask); 785 fTypeMask = SkToU8(mask);
783 } 786 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 839
837 static void Affine_vpts(const SkMatrix&, SkPoint dst[], const SkPoint[], int ); 840 static void Affine_vpts(const SkMatrix&, SkPoint dst[], const SkPoint[], int );
838 841
839 static const MapPtsProc gMapPtsProcs[]; 842 static const MapPtsProc gMapPtsProcs[];
840 843
841 friend class SkPerspIter; 844 friend class SkPerspIter;
842 }; 845 };
843 SK_END_REQUIRE_DENSE 846 SK_END_REQUIRE_DENSE
844 847
845 #endif 848 #endif
OLDNEW
« no previous file with comments | « no previous file | tests/MatrixTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698