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

Side by Side Diff: Source/core/style/ComputedStyle.cpp

Issue 1220793011: CSS Motion Path: Centre transform-origin on the path (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 5 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 | « Source/core/style/ComputedStyle.h ('k') | no next file » | 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 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 4 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 920
921 void ComputedStyle::applyTransform(TransformationMatrix& result, const FloatRect & boundingBox, ApplyTransformOrigin applyOrigin, ApplyMotionPath applyMotionPath , ApplyIndependentTransformProperties applyIndependentTransformProperties) const 921 void ComputedStyle::applyTransform(TransformationMatrix& result, const FloatRect & boundingBox, ApplyTransformOrigin applyOrigin, ApplyMotionPath applyMotionPath , ApplyIndependentTransformProperties applyIndependentTransformProperties) const
922 { 922 {
923 if (!hasMotionPath()) 923 if (!hasMotionPath())
924 applyMotionPath = ExcludeMotionPath; 924 applyMotionPath = ExcludeMotionPath;
925 bool applyTransformOrigin = requireTransformOrigin(applyOrigin, applyMotionP ath); 925 bool applyTransformOrigin = requireTransformOrigin(applyOrigin, applyMotionP ath);
926 926
927 float offsetX = transformOriginX().type() == Percent ? boundingBox.x() : 0; 927 float offsetX = transformOriginX().type() == Percent ? boundingBox.x() : 0;
928 float offsetY = transformOriginY().type() == Percent ? boundingBox.y() : 0; 928 float offsetY = transformOriginY().type() == Percent ? boundingBox.y() : 0;
929 929
930 float originX = 0;
931 float originY = 0;
932 float originZ = 0;
933
930 if (applyTransformOrigin) { 934 if (applyTransformOrigin) {
931 result.translate3d(floatValueForLength(transformOriginX(), boundingBox.w idth()) + offsetX, 935 originX = floatValueForLength(transformOriginX(), boundingBox.width()) + offsetX;
932 floatValueForLength(transformOriginY(), boundingBox.height()) + offs etY, 936 originY = floatValueForLength(transformOriginY(), boundingBox.height()) + offsetY;
933 transformOriginZ()); 937 originZ = transformOriginZ();
938 result.translate3d(originX, originY, originZ);
934 } 939 }
935 940
936 if (applyIndependentTransformProperties == IncludeIndependentTransformProper ties) { 941 if (applyIndependentTransformProperties == IncludeIndependentTransformProper ties) {
937 if (translate()) 942 if (translate())
938 translate()->apply(result, boundingBox.size()); 943 translate()->apply(result, boundingBox.size());
939 944
940 if (rotate()) 945 if (rotate())
941 rotate()->apply(result, boundingBox.size()); 946 rotate()->apply(result, boundingBox.size());
942 947
943 if (scale()) 948 if (scale())
944 scale()->apply(result, boundingBox.size()); 949 scale()->apply(result, boundingBox.size());
945 } 950 }
946 951
947 if (applyMotionPath == ComputedStyle::IncludeMotionPath) 952 if (applyMotionPath == ComputedStyle::IncludeMotionPath)
948 applyMotionPathTransform(result); 953 applyMotionPathTransform(originX, originY, result);
949 954
950 const Vector<RefPtr<TransformOperation>>& transformOperations = transform(). operations(); 955 const Vector<RefPtr<TransformOperation>>& transformOperations = transform(). operations();
951 unsigned size = transformOperations.size(); 956 unsigned size = transformOperations.size();
952 for (unsigned i = 0; i < size; ++i) 957 for (unsigned i = 0; i < size; ++i)
953 transformOperations[i]->apply(result, boundingBox.size()); 958 transformOperations[i]->apply(result, boundingBox.size());
954 959
955 if (applyTransformOrigin) { 960 if (applyTransformOrigin) {
956 result.translate3d(-floatValueForLength(transformOriginX(), boundingBox. width()) - offsetX, 961 result.translate3d(-originX, -originY, -originZ);
957 -floatValueForLength(transformOriginY(), boundingBox.height()) - off setY,
958 -transformOriginZ());
959 } 962 }
960 } 963 }
961 964
962 void ComputedStyle::applyMotionPathTransform(TransformationMatrix& transform) co nst 965 void ComputedStyle::applyMotionPathTransform(float originX, float originY, Trans formationMatrix& transform) const
963 { 966 {
964 const StyleMotionData& motionData = rareNonInheritedData->m_transform->m_mot ion; 967 const StyleMotionData& motionData = rareNonInheritedData->m_transform->m_mot ion;
965 ASSERT(motionData.m_path && motionData.m_path->isPathStyleMotionPath()); 968 ASSERT(motionData.m_path && motionData.m_path->isPathStyleMotionPath());
966 const PathStyleMotionPath& motionPath = toPathStyleMotionPath(*motionData.m_ path); 969 const PathStyleMotionPath& motionPath = toPathStyleMotionPath(*motionData.m_ path);
967 float pathLength = motionPath.length(); 970 float pathLength = motionPath.length();
968 float distance = floatValueForLength(motionData.m_offset, pathLength); 971 float distance = floatValueForLength(motionData.m_offset, pathLength);
969 float computedDistance; 972 float computedDistance;
970 if (motionPath.isClosed() && pathLength > 0) { 973 if (motionPath.isClosed() && pathLength > 0) {
971 computedDistance = fmod(distance, pathLength); 974 computedDistance = fmod(distance, pathLength);
972 if (computedDistance < 0) 975 if (computedDistance < 0)
973 computedDistance += pathLength; 976 computedDistance += pathLength;
974 } else { 977 } else {
975 computedDistance = clampTo<float>(distance, 0, pathLength); 978 computedDistance = clampTo<float>(distance, 0, pathLength);
976 } 979 }
977 980
978 FloatPoint point; 981 FloatPoint point;
979 float angle; 982 float angle;
980 if (!motionPath.path().pointAndNormalAtLength(computedDistance, point, angle )) 983 if (!motionPath.path().pointAndNormalAtLength(computedDistance, point, angle ))
981 return; 984 return;
982 if (motionData.m_rotationType == MotionRotationFixed) 985 if (motionData.m_rotationType == MotionRotationFixed)
983 angle = 0; 986 angle = 0;
984 987
985 transform.translate(point.x(), point.y()); 988 transform.translate(point.x() - originX, point.y() - originY);
986 transform.rotate(angle + motionData.m_rotation); 989 transform.rotate(angle + motionData.m_rotation);
987 } 990 }
988 991
989 void ComputedStyle::setTextShadow(PassRefPtr<ShadowList> s) 992 void ComputedStyle::setTextShadow(PassRefPtr<ShadowList> s)
990 { 993 {
991 rareInheritedData.access()->textShadow = s; 994 rareInheritedData.access()->textShadow = s;
992 } 995 }
993 996
994 void ComputedStyle::setBoxShadow(PassRefPtr<ShadowList> s) 997 void ComputedStyle::setBoxShadow(PassRefPtr<ShadowList> s)
995 { 998 {
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1765 } 1768 }
1766 1769
1767 void ComputedStyle::copyChildDependentFlagsFrom(const ComputedStyle& other) 1770 void ComputedStyle::copyChildDependentFlagsFrom(const ComputedStyle& other)
1768 { 1771 {
1769 setEmptyState(other.emptyState()); 1772 setEmptyState(other.emptyState());
1770 if (other.hasExplicitlyInheritedProperties()) 1773 if (other.hasExplicitlyInheritedProperties())
1771 setHasExplicitlyInheritedProperties(); 1774 setHasExplicitlyInheritedProperties();
1772 } 1775 }
1773 1776
1774 } // namespace blink 1777 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/style/ComputedStyle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698