Commit Graph

114 Commits

Author SHA1 Message Date
Jonathan Kew
4dcf0fe444 Bug 1365982 - Attach frame properties to each frame instead of looking them up in a hashtable on the prescontext. r=mats 2017-05-27 12:36:00 +01:00
L. David Baron
ebf5db26b4 Bug 1367190 patch 1 - Convert the 4 objects that use nsPresArena::AllocateBySize to use AllocateByObjectID. r=mats
MozReview-Commit-ID: 3LaG8Daon6V
2017-05-24 09:35:26 -04:00
cku
14c0f9ceb9 Bug 1340044 - Part 2. Rename value in StyleGeometryBox. r=heycam
This change is to use gecko_enum_prefix in helpers.mako.rs, so that we do not
need to manually write code for nsStyleDisplay::mTransformBox.

MozReview-Commit-ID: 7UAL0iUcSIO
2017-03-16 15:18:10 +08:00
Ting-Yu Lin
17312fe511 Bug 1326409 Part 6 - Convert aBasicShape to a pointer to a const value. r=dholbert
To address reviewer's comments in bug 1326409 comment 13 and comment 14.

MozReview-Commit-ID: FiUXXk4O8N7
2017-03-13 12:03:40 +08:00
Ting-Yu Lin
6cf81bf416 Bug 1326409 Part 5 - Implement shape-outside: polygon(). r=dholbert
The <fill-rule> in the polygon() syntax is not handled because it doesn't
matter to shape-outside at all.

The reftests are numbered from 018 to avoid conflict with the w3c upstream
ones according to this list.
https://test.csswg.org/harness/results/css-shapes-1_dev/grouped/

Reftest 018 to 025 are under various writing-modes, 026 to 029 are testing
empty float area, 030 to 031 are testing polygon containing horizontal
lines.

MozReview-Commit-ID: FPUbMdZsvu6
2017-03-13 12:03:40 +08:00
Ting-Yu Lin
d88acdc8bf Bug 1326409 Part 3 - Remove unneeded WritingMode parameter. r=dholbert
Remove WritingMode parameter from LineRight() and LineLeft() in both
FloatInfo and ShapeInfo.

Bug 1316549 Part 3 added the parameter to compute the border radii under
writing-modes correctly. However, bug 1326407 Part 6 later made us cache
border radii, so the WritingMode parameter is no longer needed.

MozReview-Commit-ID: DFhm5d51OXJ
2017-03-13 12:03:39 +08:00
cku
1819876e04 Bug 1336905 - Part 1. Remove StyleShapeSource's template argument. r=heycam,TYLin
MozReview-Commit-ID: FHTwGyXHsce
2017-02-21 23:26:17 +08:00
Ting-Yu Lin
787377e136 Bug 1326407 Part 8 - Implement shape-outside: inset(). r=dbaron
The reftests have passed
layout/reftests/w3c-css/submitted/check-for-references.sh.

MozReview-Commit-ID: JZk1fo8SxgV
2017-02-16 10:51:49 +08:00
Ting-Yu Lin
7ed1079d5a Bug 1326407 Part 7 - Rename BoxShapeInfo to RoundedBoxShapeInfo. r=dbaron
The radii has been cached in the BoxShapeInfo in the previous part. Hence
the rename.

This class will be used to implement inset() in the next part, so the rect
stored isn't necessarily the rect of the <shape-box>. It could be the inset
rectangle. Therefore I rename mShapeBoxRect to mRect to avoid any confusion.

MozReview-Commit-ID: J0hpQDsbMyN
2017-02-16 10:51:48 +08:00
Ting-Yu Lin
12032a13e7 Bug 1326407 Part 6 - Cache the border radii in BoxShapeInfo. r=dbaron
The radii can be computed when creating BoxShapeInfo. No need to compute
them every time in the LineLeft() and LineRight().

MozReview-Commit-ID: GIDSLgickCT
2017-02-16 10:51:48 +08:00
Ting-Yu Lin
27ea4a2d47 Bug 1326407 Part 5 - Rename ConvertPhysicalToLogical(). r=dbaron
Make the name and the order of arguments be consistent with the
ConvertPhysicalToLogical() method added in the previous part.

MozReview-Commit-ID: 1YARDzI3cyr
2017-02-16 10:51:48 +08:00
Ting-Yu Lin
cf4ea8c3c8 Bug 1326407 Part 4 - Extract a function to convert a rect to float manager's logical coordinate. r=dbaron
MozReview-Commit-ID: Ag6V6XmlHIU
2017-02-16 10:51:48 +08:00
Ting-Yu Lin
9e08b8cf6b Bug 1326407 Part 3 - Extract a function to compute <shape-box> rect. r=dbaron
MozReview-Commit-ID: HaiDqNgE25P
2017-02-16 10:51:48 +08:00
Ting-Yu Lin
0bad077dee Bug 1338443 Part 2 - Convert nsAutoFloatManager::mNew to use UniquePtr. r=dholbert
The life cycle of nsFloatManager managed by mNew is same as
nsAutoFloatManager, which lives only in nsBlockFrame::Reflow(). Therefore,
other nsFloatManager pointers are all non-owning ref to the
nsAutoFloatManager::mNew.

MozReview-Commit-ID: B34BOcsjE2X
2017-02-09 17:57:16 +08:00
Ting-Yu Lin
a9be711cf8 Bug 1334227 - Early return in unimplemented shape-outside cases. r=xidorn
MozReview-Commit-ID: 8l6C9LsLpJI
2017-02-02 11:53:06 +08:00
Ting-Yu Lin
3280edebe5 Bug 1333685 - Eliminate CircleShapeInfo, and use EllipseShapeInfo for circle(). r=dbaron
The difference between CircleShapeInfo's constructor and EllipseShapeInfo's
is the computation of the radii. Therefore, this patch creates a factory
function to distinguish that, so shape-outside: circle() could be
implemented by using EllipseShapeInfo.

MozReview-Commit-ID: 9ZBQu8zCSrM
2017-01-26 14:21:29 +08:00
Ting-Yu Lin
8fff247fa9 Bug 1326406 Part 6 - Make CircleShapeInfo inherit from EllipseShapeInfo. r=dbaron
MozReview-Commit-ID: H0UgT6P6c7K
2017-01-23 17:19:32 +08:00
Ting-Yu Lin
5c6e2823f3 Bug 1326406 Part 4 - Implement shape-outside: ellipse(). r=dbaron
MozReview-Commit-ID: t1gaoKNbNp
2017-01-23 17:18:07 +08:00
Ting-Yu Lin
062fcdcea1 Bug 1326406 Part 3 - Add ShapeInfo::Translate() for moving the origin of ShapeInfo. r=dbaron
Instead of manually adding (aLineLeft, aBlockStart) when creating a shape,
add Translate() to let the shapes implement their only way to move their
origin. FloatInfo could then move the shapes after they're created.

MozReview-Commit-ID: ApZBHnkng74
2017-01-23 17:17:37 +08:00
Xidorn Quan
37c476e4c2 Bug 1332180 - Early return from shape-outside:url() value in ctor of FloatInfo. r=TYLin
MozReview-Commit-ID: E2nj3DWt1fr
2017-01-19 16:41:19 +11:00
Ting-Yu Lin
353a498900 Bug 1311244 Part 7 - Implement shape-outside: circle(). r=dbaron
circle() allows the user to define an empty flow area, so IsEmpty() needs to
be overridden.

The flow area defined by a shape needs to be clipped to the margin-box per
https://drafts.csswg.org/css-shapes/#relation-to-box-model-and-float-behavior

In the reftests, both clip-path and shape-outside uses the same value so
that it's easier to debug visually.

Add LogicalPoint::LineRelative() because we need to convert a point's I() to
the line-axis in nsFloatManager. LineRelative() differs from I() in all
'rtl' direction per
https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical

MozReview-Commit-ID: FxQaFPrEQ73
2017-01-06 16:36:43 +08:00
Ting-Yu Lin
a7c480ad7e Bug 1311244 Part 6 - Add ShapeInfo and move <shape-box> impl to BoxShapeInfo. r=dbaron
Create ShapeInfo as a base class for implementing all the shapes. In this
design, we only need to create the correct subclass in FloatInfo's
constructor whenever shape-outside is used rather than manually branching on
StyleShapeSourceType and StyleBasicShape in all the methods like
LineRight(), LineLeft(), etc.

The concrete subclass of ShapeInfo could focus on implementing how its shape
influence the flow area by overriding the needed methods in ShapeInfo.

Move ComputeEllipseLineInterceptDiff() and XInterceptAtY() under the scope
of ShapeInfo so that they could be used by BoxShapeInfo and all the other
ShpapeInfo subclasses yet to come.

MozReview-Commit-ID: ETVc5FdGNha
2017-01-06 16:36:30 +08:00
Ting-Yu Lin
a0a6586078 Bug 1311244 Part 5 - Convert FloatInfo's copy constructor into a move constructor. r=dbaron
Use move constructor for two reasons. 1) The copy constructor is needed only
when appending FloatInfo to mFloats, so using move constructor will likely
be more efficient if some of the member variables support move constructor.
2) Part 6 will added a UniquePtr member to FloatInfo, so using move
constructor becomes necessary.

Also change the return value of AddFloat() to void to simplify the code,
since all the other callers do not check the return value, and
BlockReflowInput::FloatAndPlaceFloat() only asserts in debug mode. I assume
it's safe to omit the OOM check.

MozReview-Commit-ID: GVbbsdBjr7b
2017-01-06 16:36:19 +08:00
Carsten "Tomcat" Book
453d6b6717 Backed out changeset 60d8d64ca347 (bug 1311244) 2017-01-12 14:19:22 +01:00
Carsten "Tomcat" Book
873fc01c44 Backed out changeset 2893ecc79fef (bug 1311244) 2017-01-12 14:19:20 +01:00
Carsten "Tomcat" Book
de8cecb003 Backed out changeset 466053d9302b (bug 1311244) 2017-01-12 14:19:18 +01:00
Ting-Yu Lin
d543342476 Bug 1311244 Part 7 - Implement shape-outside: circle(). r=dbaron
circle() allows the user to define an empty flow area, so IsEmpty() needs to
be overridden.

The flow area defined by a shape needs to be clipped to the margin-box per
https://drafts.csswg.org/css-shapes/#relation-to-box-model-and-float-behavior

In the reftests, both clip-path and shape-outside uses the same value so
that it's easier to debug visually.

Add LogicalPoint::LineRelative() because we need to convert a point's I() to
the line-axis in nsFloatManager. LineRelative() differs from I() in all
'rtl' direction per
https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical

MozReview-Commit-ID: FxQaFPrEQ73
2017-01-06 16:36:43 +08:00
Ting-Yu Lin
5b323f206a Bug 1311244 Part 6 - Add ShapeInfo and move <shape-box> impl to BoxShapeInfo. r=dbaron
Create ShapeInfo as a base class for implementing all the shapes. In this
design, we only need to create the correct subclass in FloatInfo's
constructor whenever shape-outside is used rather than manually branching on
StyleShapeSourceType and StyleBasicShape in all the methods like
LineRight(), LineLeft(), etc.

The concrete subclass of ShapeInfo could focus on implementing how its shape
influence the flow area by overriding the needed methods in ShapeInfo.

Move ComputeEllipseLineInterceptDiff() and XInterceptAtY() under the scope
of ShapeInfo so that they could be used by BoxShapeInfo and all the other
ShpapeInfo subclasses yet to come.

MozReview-Commit-ID: ETVc5FdGNha
2017-01-06 16:36:30 +08:00
Ting-Yu Lin
68857838fc Bug 1311244 Part 5 - Convert FloatInfo's copy constructor into a move constructor. r=dbaron
Use move constructor for two reasons. 1) The copy constructor is needed only
when appending FloatInfo to mFloats, so using move constructor will likely
be more efficient if some of the member variables support move constructor.
2) Part 6 will added a UniquePtr member to FloatInfo, so using move
constructor becomes necessary.

Also change the return value of AddFloat() to void to simplify the code,
since all the other callers do not check the return value, and
BlockReflowInput::FloatAndPlaceFloat() only asserts in debug mode. I assume
it's safe to omit the OOM check.

MozReview-Commit-ID: GVbbsdBjr7b
2017-01-06 16:36:19 +08:00
Phil Ringnalda
6a908b136a Backed out 8 changesets (bug 1311244) for OOM failures in Win7 debug R1
Backed out changeset d5411799a28f (bug 1311244)
Backed out changeset ff9c71e1dbc8 (bug 1311244)
Backed out changeset 96988ec5b81c (bug 1311244)
Backed out changeset 9d257713833a (bug 1311244)
Backed out changeset 2c33905ccb04 (bug 1311244)
Backed out changeset 20148e33d523 (bug 1311244)
Backed out changeset f36cd1532fdb (bug 1311244)
Backed out changeset 2ee4ea83a6b4 (bug 1311244)
2017-01-08 21:11:25 -08:00
Ting-Yu Lin
e95ce09ad4 Bug 1311244 Part 7 - Implement shape-outside: circle(). r=dbaron
circle() allows the user to define an empty flow area, so IsEmpty() needs to
be overridden.

The flow area defined by a shape needs to be clipped to the margin-box per
https://drafts.csswg.org/css-shapes/#relation-to-box-model-and-float-behavior

In the reftests, both clip-path and shape-outside uses the same value so
that it's easier to debug visually.

Add LogicalPoint::LineRelative() because we need to convert a point's I() to
the line-axis in nsFloatManager. LineRelative() differs from I() in all
'rtl' direction per
https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical

MozReview-Commit-ID: FxQaFPrEQ73
2017-01-06 16:36:43 +08:00
Ting-Yu Lin
24cda78512 Bug 1311244 Part 6 - Add ShapeInfo and move <shape-box> impl to BoxShapeInfo. r=dbaron
Create ShapeInfo as a base class for implementing all the shapes. In this
design, we only need to create the correct subclass in FloatInfo's
constructor whenever shape-outside is used rather than manually branching on
StyleShapeSourceType and StyleBasicShape in all the methods like
LineRight(), LineLeft(), etc.

The concrete subclass of ShapeInfo could focus on implementing how its shape
influence the flow area by overriding the needed methods in ShapeInfo.

Move ComputeEllipseLineInterceptDiff() and XInterceptAtY() under the scope
nsFloatManager so that they could be used by BoxShapeInfo and all the other
ShpapeInfo subclasses yet to come.

MozReview-Commit-ID: ETVc5FdGNha
2017-01-06 16:36:30 +08:00
Ting-Yu Lin
5dd41756d4 Bug 1311244 Part 5 - Convert FloatInfo's copy constructor into a move constructor. r=dbaron
Use move constructor for two reasons. 1) The copy constructor is needed only
when appending FloatInfo to mFloats, so using move constructor will likely
be more efficient if some of the member variables support move constructor.
2) Part 6 will added a UniquePtr member to FloatInfo, so using move
constructor becomes necessary.

Also change the return value of AddFloat() to void to simplify the code,
since all the other callers do not check the return value, and
BlockReflowInput::FloatAndPlaceFloat() only asserts in debug mode. I assume
it's safe to omit the OOM check.

MozReview-Commit-ID: GVbbsdBjr7b
2017-01-06 16:36:19 +08:00
Ting-Yu Lin
5e5d8d3fb5 Bug 1320014 Part 14 - Convert NS_SIDE_TO_HALF_CORNER to a constexpr function. r=mats
MozReview-Commit-ID: 4MQu8omCdcg
2017-01-05 16:23:16 +08:00
Ting-Yu Lin
1dd62b3b8d Bug 1319672 Part 2 - Check the line direction is not changed. r=dbaron
Since the line direction affects the interpretation of float right or left,
we should check aWM has the same line direction as mWritingMode. And this
also guarantees that float added by AddFloat() has the same line direction
as when querying the available space via GetFlowArea().

MozReview-Commit-ID: FGxVFbo910g
2016-11-23 18:10:23 +08:00
Ting-Yu Lin
17d214f4b2 Bug 1316549 Part 4 - Use logical names for ComputeEllipseLineInterceptDiff(). r=dbaron
This patch is just renames. No logic change for the function.

MozReview-Commit-ID: K7w0YL3G3gu
2016-11-18 13:54:09 +08:00
Ting-Yu Lin
e7919765e0 Bug 1316549 Part 3 - Fix <shape-box> with border-radius in writing-mode. r=dbaron
The tests cases are designed based on the integer solution to the ellipse
equation (x/a)^2 + (y/b)^2 = 1, where x=36, y=32, a=60, b=40.

MozReview-Commit-ID: De2fXcb6ypP
2016-11-14 18:11:45 +08:00
Ting-Yu Lin
ccd7fe84e2 Bug 1316549 Part 2 - Fix assertion failure: aRadiusY > 0 in FloatInfo::XInterceptAtY(). r=dbaron
We need to consider the case when only one of the four corner radius is
specified. The two reftests are added to test 'border-top-right-radius' and
'border-bottom-right-radius', respectively.

MozReview-Commit-ID: De2fXcb6ypP
2016-11-14 18:11:45 +08:00
Ting-Yu Lin
e43ee61bfb Bug 1309467 Part 5 - Make flow area of <shape-box> values respect border-radius. r=dbaron
In GetFlowArea(), "Shrink our band's height if needed." computation was
moved to the end because we need to pass the unmodified |blockEnd| to
compute LineRight() and LineLeft().

Revamp OutsetBorderRadii() to allow negative margin to reduce the radius,
but not below zero. Also implement the cubic formula required by the spec.
https://drafts.csswg.org/css-shapes/#valdef-shape-box-margin-box

OutsetBorderRadii() is now tailored only for margin-box with border-radius,
so it might no longer be suitable for other scenarios.

MozReview-Commit-ID: HKxW7rp6sIA
2016-10-13 16:28:38 +08:00
Ting-Yu Lin
3885f92712 Bug 1309467 Part 4 - Implement <shape-box> values for shape-outside. r=dbaron
Per spec, float positioning and stacking is not affected by defining a float
area with a shape.
https://drafts.csswg.org/css-shapes/#relation-to-box-model-and-float-behavior

So all the call sites of GetFloatAvailableSpace() related to adding a
float are replaced by GetFloatAvailableSpaceForPlacingFloat().

<shape-box> with border-radius will be implemented in next part.

MozReview-Commit-ID: 1RXEeXDhdWo
2016-10-12 16:06:25 +08:00
Ting-Yu Lin
cfa5ace223 Bug 1309467 Part 3 - Move FloatInfo::mRect construction into FloatInfo's constructor. r=dbaron
In later parts, we need the aMarginRect to build rect for shape box.

MozReview-Commit-ID: LtwMxbsNu3u
2016-10-12 14:26:26 +08:00
Ting-Yu Lin
a0dc0de9ad Bug 1309467 Part 2 - Convert BandInfoType to an enum class. r=dbaron
Also exchange the order of the second argument |aBSize| and the third
argument |aBandInfo| for GetFlowArea() so that aBCoord and aBSize are
grouped together. And it'll be prettier to add ShapeInfo behind BandInfo
in later part.

MozReview-Commit-ID: cusdomjUyu
2016-10-12 13:26:17 +08:00
Ting-Yu Lin
d70ec68809 Bug 1309467 Part 1 - Rename aBOffset to aBCoord in nsFloatManager::GetFlowArea(). r=dbaron
The header file and its documentation uses |aBCoord| so I change the
implementation for consistency.

MozReview-Commit-ID: 99mEUgUwcBV
2016-10-12 13:01:19 +08:00
Ting-Yu Lin
cbcec6ebea Bug 1302758 Part 3 - Remove nullptr check of operator new in CreateFloatManager. r=dholbert
The operator new is infallable. Also change the return value to void
accordingly. The only caller doesn't even check the return value.

MozReview-Commit-ID: 3whf7s1d35q
2016-09-15 23:29:57 +08:00
Ting-Yu Lin
d8dfa08226 Bug 1302758 Part 2 - Replace NOISY_FLOATMANAGER with nsBlockFrame::gNoisyFloatManager. r=dholbert
To see the flag in action, export GECKO_BLOCK_DEBUG_FLAGS="float-manager" and
open a page containing float elements. For example:

$ GECKO_BLOCK_DEBUG_FLAGS="float-manager" ./mach run layout/reftests/floats/orthogonal-floats-1a.html

MozReview-Commit-ID: 7Rb45ophewf
2016-09-15 14:32:12 +08:00
Ting-Yu Lin
152bb327d8 Bug 1302758 Part 1 - Minor cosmetic fixes in nsFloatManager. r=dholbert
These fixes are in the contextual of Part 2.

MozReview-Commit-ID: 3AJUozeIi8W
2016-09-15 11:29:14 +08:00
Jeremy Chen
351de41d83 Bug 1297306 - part6:replace NS_STYLE_CLEAR_* with StyleClear enum class. r=xidorn
After using enum class, a switch-case warning in CombineBreakType is caught.
This is one of such kind safty checks that we would like to gain.
Fix it by adding default case for switch-case in CombineBreakType.

MozReview-Commit-ID: BdS3LPN6qzX
2016-09-07 10:20:17 +08:00
Nicholas Nethercote
887efe04d5 Bug 1299727 - Rename NS_WARN_IF_FALSE as NS_WARNING_ASSERTION. r=erahm.
The new name makes the sense of the condition much clearer. E.g. compare:

  NS_WARN_IF_FALSE(!rv.Failed());

with:

  NS_WARNING_ASSERTION(!rv.Failed());

The new name also makes it clearer that it only has effect in debug builds,
because that's standard for assertions.
2016-09-01 15:01:16 +10:00
Ting-Yu Lin
d42431d103 Bug 1293604 - Replace NS_STYLE_FLOAT_* with StyleFloat enum class. r=dbaron
MozReview-Commit-ID: 4K6TyIm6cs3
2016-08-09 17:32:54 +08:00
Ting-Yu Lin
d3e8cf1818 Bug 1277129 Part 7b - Rename various ReflowState variables to ReflowInput. r=dbaron
This patch is generated by the following script:

function rename() {
find .\
     -type f\
     ! -path "./obj*"\
     ! -path "./.git"\
     ! -path "./.hg"\
     \( -name "*.cpp" -or\
        -name "*.h" \)\
        -exec sed -i -r "s/$1/$2/g" "{}" \;
}

rename "([[:alpha:]]*)([rR])eflowState(s?)" "\1\2eflowInput\3"

MozReview-Commit-ID: ITFO7uMTkSb
2016-07-21 18:36:39 +08:00