Changeset 251084 in webkit
- Timestamp:
- Oct 14, 2019 11:18:55 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r251083 r251084 1 2019-10-14 Russell Epstein <russell_e@apple.com> 2 3 Unreviewed, rolling out r251081. 4 5 Broke macOS and iOS builds. 6 7 Reverted changeset: 8 9 "transform-box: content-box, stroke-box missing" 10 https://bugs.webkit.org/show_bug.cgi?id=201892 11 https://trac.webkit.org/changeset/251081 12 1 13 2019-10-14 Eric Carlson <eric.carlson@apple.com> 2 14 -
trunk/LayoutTests/fast/css/transform-box-parsing-expected.txt
r251081 r251084 7 7 PASS testPropertyValue("transform-box: fill-box", "transform-box") is "fill-box" 8 8 PASS testPropertyValue("transform-box: view-box", "transform-box") is "view-box" 9 PASS testPropertyValue("transform-box: content-box", "transform-box") is "content-box"10 PASS testPropertyValue("transform-box: stroke-box", "transform-box") is "stroke-box"11 9 12 10 PASS testComputedStyle("", "transform-box") is "border-box" 13 11 PASS testComputedStyle("transform-box: fill-box", "transform-box") is "fill-box" 14 12 PASS testComputedStyle("transform-box: view-box", "transform-box") is "view-box" 15 PASS testComputedStyle("transform-box: content-box", "transform-box") is "content-box"16 PASS testComputedStyle("transform-box: stroke-box", "transform-box") is "stroke-box"17 13 18 14 PASS testSVGComputedStyle("", "transform-box") is "view-box" 19 15 PASS testSVGComputedStyle("transform-box: fill-box", "transform-box") is "fill-box" 20 16 PASS testSVGComputedStyle("transform-box: border-box", "transform-box") is "border-box" 21 PASS testSVGComputedStyle("transform-box: content-box", "transform-box") is "content-box"22 PASS testSVGComputedStyle("transform-box: stroke-box", "transform-box") is "stroke-box"23 17 24 18 PASS testComputedStyleOnElementWithId("foreignObject") is "view-box" -
trunk/LayoutTests/fast/css/transform-box-parsing.html
r251081 r251084 63 63 shouldBeEqualToString('testPropertyValue("transform-box: fill-box", "transform-box")', 'fill-box'); 64 64 shouldBeEqualToString('testPropertyValue("transform-box: view-box", "transform-box")', 'view-box'); 65 shouldBeEqualToString('testPropertyValue("transform-box: content-box", "transform-box")', 'content-box');66 shouldBeEqualToString('testPropertyValue("transform-box: stroke-box", "transform-box")', 'stroke-box');67 65 68 66 debug(''); … … 70 68 shouldBeEqualToString('testComputedStyle("transform-box: fill-box", "transform-box")', 'fill-box'); 71 69 shouldBeEqualToString('testComputedStyle("transform-box: view-box", "transform-box")', 'view-box'); 72 shouldBeEqualToString('testComputedStyle("transform-box: content-box", "transform-box")', 'content-box');73 shouldBeEqualToString('testComputedStyle("transform-box: stroke-box", "transform-box")', 'stroke-box');74 70 75 71 debug(''); … … 77 73 shouldBeEqualToString('testSVGComputedStyle("transform-box: fill-box", "transform-box")', 'fill-box'); 78 74 shouldBeEqualToString('testSVGComputedStyle("transform-box: border-box", "transform-box")', 'border-box'); 79 shouldBeEqualToString('testSVGComputedStyle("transform-box: content-box", "transform-box")', 'content-box');80 shouldBeEqualToString('testSVGComputedStyle("transform-box: stroke-box", "transform-box")', 'stroke-box');81 75 82 76 debug(''); -
trunk/LayoutTests/svg/transforms/svg-transform-box-expected.html
r251081 r251084 1 1 <!DOCTYPE html> 2 2 3 <html> 3 4 <head> 4 5 <style> 5 * { 6 margin: 0; 7 padding: 0; 6 svg { 7 border: 1px solid black; 8 8 } 9 9 </style> 10 10 </head> 11 11 12 <body> 12 <p>You should see no red boxes below</p> 13 <svg width="600" height="300" viewBox="0 0 600 300"> 14 <rect width="120" height="60" fill="green" /> 15 <rect x="150" y="0" width="120" height="60" fill="green" /> 16 <rect x="300" y="0" width="120" height="60" fill="green" /> 17 <rect y="90" width="120" height="60" fill="green" /> 18 <rect x="150" y="90" width="120" height="60" fill="green" /> 19 </svg> 13 14 <div class="container"> 15 <p>You should see no red boxes below</p> 16 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 600 400" style=" width: 600px; height: 400px;"> 17 <!-- transform-box: view-box --> 18 <rect x="20" y="10" width="100" height="50" fill="green" /> 19 <rect x="480" y="40" width="50" height="50" fill="green" /> 20 <rect x="120" y="120" width="50" height="50" fill="green" /> 21 <rect x="20" y="200" width="100" height="50" fill="green" /> 22 <rect x="480" y="260" width="50" height="50" fill="green" /> 23 <rect x="120" y="320" width="50" height="50" fill="green" /> 24 </svg> 25 </div> 26 20 27 </body> 21 28 </html> -
trunk/LayoutTests/svg/transforms/svg-transform-box.html
r251081 r251084 1 1 <!DOCTYPE html> 2 2 3 <html> 3 4 <head> 4 5 <style> 5 * { 6 margin: 0; 7 padding: 0; 6 svg { 7 border: 1px solid black; 8 8 } 9 9 </style> 10 10 </head> 11 11 12 <body> 12 <p>You should see no red boxes below</p> 13 <svg width="600" height="300" viewBox="0 0 600 300">14 <g style="transform: translate(20px, 20px)">15 < !-- transform-box: border-box -->16 <rect x="-19" y="-19" width="118" height="58" fill="red" />17 <rect style="transform-box: border-box; transform: rotate(90deg) scale(1, 2) translate(30px, -75%); transform-origin: 50% 0;" width="20" height="20" stroke="green" stroke-width="40" fill="green" />18 </g>19 <g style="transform: translate(160px, 10px)"> 20 <!-- transform-box: view-box -->21 <rect x="-9" y="-9" width="118" height="58" fill="red" />22 <rect style="transform-box: view-box; transform: rotate(90deg) scale(1,2) translate(310px, calc(50% - 35px)); transform-origin: 50% 0;" width="20" height="20" stroke="green" stroke-width="40" fill="green" /> 23 </g>24 <g style="transform: translate(320px, 20px)">25 <!-- transform-box: stroke-box -->26 <rect x="-19" y="-19" width="118" height="58" fill="red" /> 27 <rect style="transform-box: stroke-box; transform: rotate(90deg) scale(1, 2) translate(30px, -75%); transform-origin: 50% 0;" width="20" height="20" stroke="green" stroke-width="40" fill="green" />28 </g>29 <g style="transform: translate(10px, 100px)">30 <!-- transform-box: content-box --> 31 <rect x="-9" y="-9" width="118" height="58" fill="red" />32 <rect style="transform-box: content-box; transform: rotate(90deg) scale(1, 2) translate(20px, -87.5%); transform-origin: 50% 0;" width="40" height="40" stroke="green" stroke-width="20" fill="green" />33 </g> 34 <g style="transform: translate(160px, 100px)">35 <!-- transform-box: fill-box -->36 <rect x="-9" y="-9" width="118" height="58" fill="red" />37 < rect style="transform-box: fill-box; transform: rotate(90deg) scale(1, 2) translate(20px, -87.5%); transform-origin: 50% 0;" width="40" height="40" stroke="green" stroke-width="20" fill="green" />38 </g>39 </svg> 13 14 <div class="container"> 15 <p>You should see no red boxes below</p> 16 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 600 400" style=" width: 600px; height: 400px;"> 17 <!-- transform-box: view-box --> 18 <rect x="20" y="10" width="100" height="50" fill="red" /> 19 <rect x="20" y="5" width="50" height="25" fill="green" style="transform: scale(2, 2); transform-origin: 20px 0; transform-box: view-box;" /> 20 21 <rect x="480" y="40" width="50" height="50" fill="red" /> 22 <rect x="0" y="0" width="50" height="50" fill="green" style="transform: translate(80%, 10%); transform-box: view-box;" /> 23 24 <rect x="120" y="120" width="50" height="50" fill="red" /> 25 <rect x="180" y="10" width="50" height="50" fill="green" style="transform: rotate(90deg); transform-origin: 120px 60px; transform-box: view-box;" /> 26 <rect x="180" y="10" width="50" height="50" fill="green" style="transform: rotate(90deg); transform-origin: 20% 15%; transform-box: view-box;" /> 27 28 <!-- transform-box: fill-box --> 29 <rect x="20" y="200" width="100" height="50" fill="red" /> 30 <rect x="20" y="200" width="50" height="25" fill="green" style="transform: scale(2, 2); transform-box: fill-box;" /> 31 32 <rect x="480" y="260" width="50" height="50" fill="red" /> 33 <rect x="430" y="310" width="50" height="50" fill="green" style="transform: translate(100%, -100%); transform-box: fill-box;" /> 34 35 <rect x="120" y="320" width="50" height="50" fill="red" /> 36 <rect x="70" y="270" width="50" height="50" fill="green" style="transform: rotate(180deg); transform-origin: 50px 50px; transform-box: fill-box;" /> 37 <rect x="95" y="345" width="50" height="50" fill="green" style="transform: rotate(90deg); transform-origin: 100% 50%; transform-box: fill-box;" /> 38 </svg> 39 </div> 40 40 41 </body> 41 42 </html> -
trunk/Source/WebCore/ChangeLog
r251081 r251084 1 2019-10-14 Russell Epstein <russell_e@apple.com> 2 3 Unreviewed, rolling out r251081. 4 5 Broke macOS and iOS builds. 6 7 Reverted changeset: 8 9 "transform-box: content-box, stroke-box missing" 10 https://bugs.webkit.org/show_bug.cgi?id=201892 11 https://trac.webkit.org/changeset/251081 12 1 13 2019-10-14 Dirk Schulze <krit@webkit.org> 2 14 -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r251081 r251084 4392 4392 m_primitiveUnitType = CSS_VALUE_ID; 4393 4393 switch (box) { 4394 case TransformBox::StrokeBox:4395 m_value.valueID = CSSValueStrokeBox;4396 break;4397 case TransformBox::ContentBox:4398 m_value.valueID = CSSValueContentBox;4399 break;4400 4394 case TransformBox::BorderBox: 4401 4395 m_value.valueID = CSSValueBorderBox; … … 4415 4409 4416 4410 switch (m_value.valueID) { 4417 case CSSValueStrokeBox:4418 return TransformBox::StrokeBox;4419 case CSSValueContentBox:4420 return TransformBox::ContentBox;4421 4411 case CSSValueBorderBox: 4422 4412 return TransformBox::BorderBox; -
trunk/Source/WebCore/css/CSSProperties.json
r251081 r251084 6379 6379 "border-box", 6380 6380 "fill-box", 6381 "view-box", 6382 "stroke-box", 6383 "content-box" 6381 "view-box" 6384 6382 ], 6385 6383 "codegen-properties": { -
trunk/Source/WebCore/css/CSSValueKeywords.in
r251081 r251084 1298 1298 // border-box 1299 1299 // view-box 1300 // stroke-box1301 // content-box1302 1300 fill-box 1303 1301 -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r251081 r251084 4055 4055 return consumeTransform(m_range, m_context.mode); 4056 4056 case CSSPropertyTransformBox: 4057 return consumeIdent<CSSValueBorderBox, CSSValueViewBox, CSSValueFillBox , CSSValueStrokeBox, CSSValueContentBox>(m_range);4057 return consumeIdent<CSSValueBorderBox, CSSValueViewBox, CSSValueFillBox>(m_range); 4058 4058 case CSSPropertyTransformOriginX: 4059 4059 case CSSPropertyPerspectiveOriginX: -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r251081 r251084 1 1 /* 2 2 * Copyright (C) 2006-2017 Apple Inc. All rights reserved. 3 * Copyright (C) 2019 Adobe. All rights reserved.4 3 * 5 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. … … 1245 1244 #endif 1246 1245 1247 static inline LayoutRect computeReferenceRectFromBox(const RenderBox& box, const CSSBoxType& boxType, const LayoutSize& offsetFromRoot)1248 {1249 LayoutRect referenceBox;1250 switch (boxType) {1251 case CSSBoxType::ContentBox:1252 case CSSBoxType::FillBox:1253 referenceBox = box.contentBoxRect();1254 referenceBox.move(offsetFromRoot);1255 break;1256 case CSSBoxType::PaddingBox:1257 referenceBox = box.paddingBoxRect();1258 referenceBox.move(offsetFromRoot);1259 break;1260 case CSSBoxType::MarginBox:1261 referenceBox = box.marginBoxRect();1262 referenceBox.move(offsetFromRoot);1263 break;1264 // stroke-box, view-box compute to border-box for HTML elements.1265 case CSSBoxType::StrokeBox:1266 case CSSBoxType::ViewBox:1267 case CSSBoxType::BorderBox:1268 case CSSBoxType::BoxMissing:1269 referenceBox = box.borderBoxRect();1270 referenceBox.move(offsetFromRoot);1271 break;1272 }1273 1274 return referenceBox;1275 }1276 1277 static inline LayoutRect computeReferenceBox(const RenderObject& renderer, const CSSBoxType& boxType, const LayoutSize& offsetFromRoot, const LayoutRect& rootRelativeBounds)1278 {1279 // FIXME: Support different reference boxes for inline content.1280 // https://bugs.webkit.org/show_bug.cgi?id=1290471281 if (!renderer.isBox())1282 return rootRelativeBounds;1283 1284 return computeReferenceRectFromBox(downcast<RenderBox>(renderer), boxType, offsetFromRoot);1285 }1286 1287 static inline CSSBoxType transformBoxToCSSBoxType(TransformBox transformBox)1288 {1289 switch (transformBox) {1290 case TransformBox::StrokeBox:1291 return CSSBoxType::StrokeBox;1292 case TransformBox::ContentBox:1293 return CSSBoxType::ContentBox;1294 case TransformBox::BorderBox:1295 return CSSBoxType::BorderBox;1296 case TransformBox::FillBox:1297 return CSSBoxType::FillBox;1298 case TransformBox::ViewBox:1299 return CSSBoxType::ViewBox;1300 default:1301 ASSERT_NOT_REACHED();1302 return CSSBoxType::BorderBox;1303 }1304 }1305 1306 1246 void RenderLayer::updateTransform() 1307 1247 { … … 1324 1264 ASSERT(box); 1325 1265 m_transform->makeIdentity(); 1326 LayoutSize offsetFromRoot; 1327 auto computedReferenceBox = computeReferenceRectFromBox(*box, transformBoxToCSSBoxType(box->style().transformBox()), offsetFromRoot); 1328 box->style().applyTransform(*m_transform, snapRectToDevicePixels(computedReferenceBox, box->document().deviceScaleFactor()), RenderStyle::IncludeTransformOrigin); 1266 box->style().applyTransform(*m_transform, snapRectToDevicePixels(box->borderBoxRect(), box->document().deviceScaleFactor()), RenderStyle::IncludeTransformOrigin); 1329 1267 makeMatrixRenderable(*m_transform, canRender3DTransforms()); 1330 1268 } … … 1348 1286 if (timeline->isRunningAcceleratedAnimationOnRenderer(renderer(), CSSPropertyTransform)) { 1349 1287 TransformationMatrix currTransform; 1350 LayoutSize offsetFromRoot;1288 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(box->borderBoxRect(), box->document().deviceScaleFactor()); 1351 1289 std::unique_ptr<RenderStyle> style = timeline->animatedStyleForRenderer(renderer()); 1352 auto computedReferenceBox = computeReferenceBox(renderer(), transformBoxToCSSBoxType(style->transformBox()), offsetFromRoot, box->borderBoxRect());1353 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(computedReferenceBox, box->document().deviceScaleFactor());1354 1290 style->applyTransform(currTransform, pixelSnappedBorderRect, applyOrigin); 1355 1291 makeMatrixRenderable(currTransform, canRender3DTransforms()); … … 1360 1296 if (renderer().animation().isRunningAcceleratedAnimationOnRenderer(renderer(), CSSPropertyTransform)) { 1361 1297 TransformationMatrix currTransform; 1298 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(box->borderBoxRect(), box->document().deviceScaleFactor()); 1362 1299 std::unique_ptr<RenderStyle> style = renderer().animation().animatedStyleForRenderer(renderer()); 1363 LayoutSize offsetFromRoot;1364 auto computedReferenceBox = computeReferenceBox(renderer(), transformBoxToCSSBoxType(style->transformBox()), offsetFromRoot, box->borderBoxRect());1365 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(computedReferenceBox, box->document().deviceScaleFactor());1366 1300 style->applyTransform(currTransform, pixelSnappedBorderRect, applyOrigin); 1367 1301 makeMatrixRenderable(currTransform, canRender3DTransforms()); … … 1374 1308 if (applyOrigin == RenderStyle::ExcludeTransformOrigin) { 1375 1309 TransformationMatrix currTransform; 1376 LayoutSize offsetFromRoot; 1377 std::unique_ptr<RenderStyle> style = renderer().animation().animatedStyleForRenderer(renderer()); 1378 auto computedReferenceBox = computeReferenceBox(renderer(), transformBoxToCSSBoxType(style->transformBox()), offsetFromRoot, box->borderBoxRect()); 1379 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(computedReferenceBox, box->document().deviceScaleFactor()); 1310 FloatRect pixelSnappedBorderRect = snapRectToDevicePixels(box->borderBoxRect(), box->document().deviceScaleFactor()); 1380 1311 box->style().applyTransform(currTransform, pixelSnappedBorderRect, RenderStyle::ExcludeTransformOrigin); 1381 1312 makeMatrixRenderable(currTransform, canRender3DTransforms()); … … 4341 4272 } 4342 4273 return false; 4274 } 4275 4276 static inline LayoutRect computeReferenceBox(const RenderObject& renderer, const CSSBoxType& boxType, const LayoutSize& offsetFromRoot, const LayoutRect& rootRelativeBounds) 4277 { 4278 // FIXME: Support different reference boxes for inline content. 4279 // https://bugs.webkit.org/show_bug.cgi?id=129047 4280 if (!renderer.isBox()) 4281 return rootRelativeBounds; 4282 4283 LayoutRect referenceBox; 4284 const auto& box = downcast<RenderBox>(renderer); 4285 switch (boxType) { 4286 case CSSBoxType::ContentBox: 4287 case CSSBoxType::FillBox: 4288 referenceBox = box.contentBoxRect(); 4289 referenceBox.move(offsetFromRoot); 4290 break; 4291 case CSSBoxType::PaddingBox: 4292 referenceBox = box.paddingBoxRect(); 4293 referenceBox.move(offsetFromRoot); 4294 break; 4295 case CSSBoxType::MarginBox: 4296 referenceBox = box.marginBoxRect(); 4297 referenceBox.move(offsetFromRoot); 4298 break; 4299 // stroke-box, view-box compute to border-box for HTML elements. 4300 case CSSBoxType::StrokeBox: 4301 case CSSBoxType::ViewBox: 4302 case CSSBoxType::BorderBox: 4303 case CSSBoxType::BoxMissing: 4304 referenceBox = box.borderBoxRect(); 4305 referenceBox.move(offsetFromRoot); 4306 break; 4307 } 4308 4309 return referenceBox; 4343 4310 } 4344 4311 -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r251081 r251084 916 916 917 917 enum class TransformBox : uint8_t { 918 StrokeBox,919 ContentBox,920 918 BorderBox, 921 919 FillBox, -
trunk/Source/WebCore/svg/SVGGraphicsElement.cpp
r251081 r251084 81 81 FloatRect boundingBox; 82 82 switch (style->transformBox()) { 83 case TransformBox::BorderBox:84 // For SVG elements without an associated CSS layout box, the used value for border-box is stroke-box.85 case TransformBox::StrokeBox:86 boundingBox = renderer()->strokeBoundingBox();87 break;88 case TransformBox::ContentBox:89 // For SVG elements without an associated CSS layout box, the used value for content-box is fill-box.90 83 case TransformBox::FillBox: 91 84 boundingBox = renderer()->objectBoundingBox(); 92 85 break; 86 case TransformBox::BorderBox: 87 // For SVG elements without an associated CSS layout box, the used value for border-box is view-box. 93 88 case TransformBox::ViewBox: { 94 89 FloatSize viewportSize;
Note: See TracChangeset
for help on using the changeset viewer.