82 Commits
Author SHA1 Message Date
Jonathan Kew 7aef3dada0 Bug 2042027 - Batch-process runs of non-discardable characters in nsTextFrameUtils::TransformText. r=layout-reviewers,emilio
Based on Claudometer suggestion, but extended to cover most text,
rather than just ASCII runs.

Differential Revision: https://phabricator.services.mozilla.com/D302239
2026-05-25 09:26:22 +00:00
Sylvestre Ledru 55481ac4b5 Bug 2023419 - Remove Emacs/Vim modelines from layout/ r=emilio,firefox-style-system-reviewers,layout-reviewers
replaced by .editorconfig

Differential Revision: https://phabricator.services.mozilla.com/D287852
2026-03-17 12:05:43 +00:00
Jan-Niklas Jaeschke 573f34249c Bug 1949053, part 4 - Rename CharacterData::TextFragment() to CharacterData::DataBuffer(). r=masayuki,firefox-style-system-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D259935
2025-08-06 08:48:09 +00:00
Jan-Niklas Jaeschke 0151e67615 Bug 1949053, part 2 - Rename nsTextFragment to mozilla::dom::CharacterDataBuffer. r=masayuki
This patch updates all occurrences of the type `nsTextFragment` into its new name, `mozilla::dom::CharacterDataBuffer`.
It also updates the includes, including sorting.

Differential Revision: https://phabricator.services.mozilla.com/D259867
2025-08-06 08:48:01 +00:00
Emilio Cobos Álvarez a8a2311474 Bug 1976457 - Sort includes in layout/. r=janv,dshin
Interesting bit is layout/.clang-format, the rest is all automated.

Differential Revision: https://phabricator.services.mozilla.com/D256616
2025-07-09 13:24:00 +00:00
Jonathan Kew b7a8f00f5e Bug 1935148 - Remove newline (instead of transforming to space) if adjacent to East-Asian punctuation character. r=m_kato
Includes the examples from the report as a testcase, though there is not yet
any formal spec for the exact behavior of segment break transformation.
(But nevertheless there is an existing collection of tests, so this just adds
one for the punctuation case.)

Differential Revision: https://phabricator.services.mozilla.com/D231476
2025-01-02 10:17:53 +00:00
Alexandru Marc ab65fe8c1b Backed out changeset ce6faa97d947 (bug 1935148) for causing build bustages @ nsTextFrameUtils.h CLOSED TREE 2025-01-02 02:21:59 +02:00
Jonathan Kew 762cccdd3f Bug 1935148 - Remove newline (instead of transforming to space) if adjacent to East-Asian punctuation character. r=m_kato
Includes the examples from the report as a testcase, though there is not yet
any formal spec for the exact behavior of segment break transformation.
(But nevertheless there is an existing collection of tests, so this just adds
one for the punctuation case.)

Differential Revision: https://phabricator.services.mozilla.com/D231476
2025-01-01 22:30:49 +00:00
Alexandru Marc f73c5665dd Backed out changeset 87246fb462dd (bug 1935148) for causing build bustages @ nsTextFrameUtils.cpp CLOSED TREE 2025-01-01 20:47:47 +02:00
Jonathan Kew e54cfb5250 Bug 1935148 - Remove newline (instead of transforming to space) if adjacent to East-Asian punctuation character. r=m_kato
Includes the examples from the report as a testcase, though there is not yet
any formal spec for the exact behavior of segment break transformation.
(But nevertheless there is an existing collection of tests, so this just adds
one for the punctuation case.)

Differential Revision: https://phabricator.services.mozilla.com/D231476
2025-01-01 17:59:04 +00:00
Jonathan Kew b1a2929906 Bug 1927458 - Skip past any default-ignorable codepoints when evaluating the context of a segment break. r=layout-reviewers,emilio
Differential Revision: https://phabricator.services.mozilla.com/D227191
2024-10-30 10:09:34 +00:00
Jonathan Kew e971efb038 Bug 1834320 - Don't apply justification spacing when there are further tabs on the line. r=layout-reviewers,emilio
The spec explicitly requires that we "must ensure that tab stops continue to line up"
when applying justification to content with preserved white-space that includes tabs.
So when we're computing justification spacing adjustments, we must not apply adjustments
if there is a preserved tab later on the same line; only text after the last tab is to
be justified.

Differential Revision: https://phabricator.services.mozilla.com/D191996
2023-11-03 09:06:29 +00:00
Jonathan Kew 47bd9bbfbb Bug 1819025 - Don't consider following join-controls when determining whether a space is collapsible. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D171061
2023-02-28 09:58:36 +00:00
Emilio Cobos Álvarez 64175b6c73 Bug 1744009 - Simplify combobox <select> code. r=mconley,dholbert
With this patch on its own we get some a11y tests failures, but those
are fixed on a later patch.

Combobox select no longer creates frames for its <options>, nor an
nsListControlFrame. Instead, it computes its right intrinsic size using
the largest size of the options. This is better, because we render the
option text using the select style so if the select and option styles
are mismatched it'd cause changes in the size of the select when text
changes. See the following in a build without the patch, for example:

  <select>
    <option>ABC</option>
    <option style="font-size: 1px">Something long</option>
  </select>

This seems like a rather obscure case, but it's important to get it
right, see bug 1741888.

With this patch we use the same setup in content and parent processes
(this needs bug 1596852 and bug 1744152). This means we can remove a
bunch of the native view and popup code in nsListControlFrame. A couple
browser_* tests are affected by this change and have been tweaked
appropriately (the changes there are trivial).

Not creating an nsListControlFrame for dropdown select means that we
need to move a bunch of the event handling code from nsListControlFrame
to a common place that nsComboboxControlFrame can also use. That place
is HTMLSelectEventListener, and I think the setup is much nicer than
having the code intertwined with nsListControlFrame. It should be
relatively straight-forward to review, mostly moving code from one part
to another.

Another thing that we need to do in HTMLSelectEventListener that we
didn't use to do is listening for DOM mutations on the dropdown. Before,
we were relying on changes like text mutations triggering a reflow of
the listcontrolframe, which also triggered a reflow of the
comboboxcontrolframe, which in turn updated the text of the anonymous
content. Now we need to trigger that reflow manually.

There are some further simplifications that can be done after this
lands (cleanup naming of openInParentProcess and so on, among others),
but I'd rather land this first (after the merge of course) and work on
them separately.

Differential Revision: https://phabricator.services.mozilla.com/D132719
2022-01-17 11:10:05 +00:00
Marian-Vasile Laza 84e23c5194 Backed out 2 changesets (bug 1744009) for causing reftest failures on select-3.html.
Backed out changeset 3e44e31d3d12 (bug 1744009)
Backed out changeset 619389788775 (bug 1744009)
2022-01-17 11:14:27 +02:00
Emilio Cobos Álvarez d4e563138d Bug 1744009 - Simplify combobox <select> code. r=mconley,dholbert
With this patch on its own we get some a11y tests failures, but those
are fixed on a later patch.

Combobox select no longer creates frames for its <options>, nor an
nsListControlFrame. Instead, it computes its right intrinsic size using
the largest size of the options. This is better, because we render the
option text using the select style so if the select and option styles
are mismatched it'd cause changes in the size of the select when text
changes. See the following in a build without the patch, for example:

  <select>
    <option>ABC</option>
    <option style="font-size: 1px">Something long</option>
  </select>

This seems like a rather obscure case, but it's important to get it
right, see bug 1741888.

With this patch we use the same setup in content and parent processes
(this needs bug 1596852 and bug 1744152). This means we can remove a
bunch of the native view and popup code in nsListControlFrame. A couple
browser_* tests are affected by this change and have been tweaked
appropriately (the changes there are trivial).

Not creating an nsListControlFrame for dropdown select means that we
need to move a bunch of the event handling code from nsListControlFrame
to a common place that nsComboboxControlFrame can also use. That place
is HTMLSelectEventListener, and I think the setup is much nicer than
having the code intertwined with nsListControlFrame. It should be
relatively straight-forward to review, mostly moving code from one part
to another.

Another thing that we need to do in HTMLSelectEventListener that we
didn't use to do is listening for DOM mutations on the dropdown. Before,
we were relying on changes like text mutations triggering a reflow of
the listcontrolframe, which also triggered a reflow of the
comboboxcontrolframe, which in turn updated the text of the anonymous
content. Now we need to trigger that reflow manually.

There are some further simplifications that can be done after this
lands (cleanup naming of openInParentProcess and so on, among others),
but I'd rather land this first (after the merge of course) and work on
them separately.

Differential Revision: https://phabricator.services.mozilla.com/D132719
2022-01-16 23:31:22 +00:00
Emilio Cobos Álvarez bc313bfe1e Bug 1657437 - Don't treat lone CRs as segment breaks. r=jfkthame
That prevents preceding whitespace from getting collapsed.

When there's a single lone CR (so `a\rb`) our behavior here diverges
from Chrome's but matches Safari's. We treat it as ZWSP.

That matches the initial resolution of [1], but then there have been
various doing and undoings of that resolution, so it's not totally clear
to me what the correct behavior per spec should be. I think "treat it as
other control character"? But I haven't dug into what that implies, so
for now I've just kept behavior there as-is.

[1]: https://github.com/w3c/csswg-drafts/issues/855

Differential Revision: https://phabricator.services.mozilla.com/D86188
2020-08-08 16:21:35 +00:00
Alex Henrie fd5feb4ae7 Bug 1591490 - Use the NS_IS_SURROGATE_PAIR macro everywhere. r=Ehsan
Differential Revision: https://phabricator.services.mozilla.com/D50697
2019-10-27 05:05:51 +00:00
Daniel Holbert bee0f244b9 Bug 1590639 part 1: Fix non-unified build issues in layout/generic. r=TYLin
The issues fall into these categories:
 - Files that used StaticPrefs::layout_XYZ() API or gfxVars::XYZ that needed an
   include. (Addressed by adding the missing include.)
 - Files that use mozilla::dom::XYZ or mozilla::gfx::XYZ without qualifying the
   namespace & without a 'using' decl. (Addressed by adding "using".)
 - A few other includes for types/inlines that were used without their header.

Depends on D50162

Differential Revision: https://phabricator.services.mozilla.com/D50163
2019-10-23 22:05:22 +00:00
Charlie Marlow e696e44768 Bug 1555436: Add braces to address static analysis warnings in some text layout code. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D33075
2019-05-29 20:48:41 +00:00
Cameron McCormack 8dec0f541b Bug 1553378 - Devirtualize calls to GetText() / TextLength() when we know we have a Text node. r=smaug,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D32100
2019-05-22 15:18:48 +10:00
Emilio Cobos Álvarez 8ba05939c2 Bug 1546697 - Use a consistent style for enum classes in layout. r=dholbert
Per the discussion in:

  https://groups.google.com/d/msg/mozilla.dev.platform/P79pwa9z5m8/iPYPAWPHCAAJ

They should be CamelCase, and that's what most of them already do. This converts
the rest, which are a few.

For the ones that already used `e` or `k` prefixes, I've mostly done:

 for file in $(rg Type::e layout | cut -d : -f 1 | sort | uniq); do sed -i 's#Type::e#Type::#g' $file; done

For the ones that used uppercase, I've removed the prefix if it was already in
the type name, and turn them into CamelCase.

Depends on D28680

Differential Revision: https://phabricator.services.mozilla.com/D28681
2019-04-25 23:03:04 +00:00
Sylvestre Ledru 1ad0cac654 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-05 21:41:42 +00:00
Csoregi Natalia 2ded4ab36d Backed out changeset 4ad80127f89f (bug 1519636) for bustage on MarkupMap.h and nsAccessibilityService.cpp. CLOSED TREE 2019-04-05 09:48:19 +03:00
Sylvestre Ledru ebe9c62d30 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-04 21:36:16 +00:00
Narcis Beleuzu 6b9ce2a82b Backed out changeset 389b6bbd76db (bug 1519636) for bustages on MarkupMap.h . CLOSED TREE 2019-04-05 00:27:56 +03:00
Sylvestre Ledru 194039a8d9 Bug 1519636 - clang-format-8: Reformat recent changes to the Google coding style r=Ehsan
clang-format-8 upstream had some improvements wrt macros
See: https://reviews.llvm.org/D33440
This is why the diff is bigger than usual

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D26098
2019-04-04 20:12:23 +00:00
Jeff Gilbert 3fdbfc4e3b Bug 1540357 - Fix implicit int conversions in dom/canvas's layout/* includes. r=dholbert
nsUnicodeProperties.h includes into ICU, which has implicit int
truncation, so quarantine this include out of problematic headers.

Depends on D25498

Differential Revision: https://phabricator.services.mozilla.com/D25499
2019-04-02 17:00:49 +00:00
Ryan Hunt a96492f0f6 Bug 1523969 part 14 - Move method definition inline comments to new line in 'layout/'. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D21115
2019-02-25 16:09:24 -06:00
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Daniel Holbert 8fea3c215f Bug 1412346 part 5: (automated patch) Switch a bunch of C++ files in layout to use our standard mode lines. r=jfkthame
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: EuRsDue63tK
2017-10-27 10:33:53 -07:00
Jonathan Kew d519d5b645 Bug 1371564 - Remove the long-obsolete TEXT_WAS_TRANSFORMED flag, don't waste time setting it. r=mats 2017-06-24 09:53:12 +01:00
Sebastian Hengst b887bded34 Backed out changeset 9c822d8aad22 (bug 1371564) for build bustage: unused variable outputStart at nsTextFrameUtils.cpp:212. r=backout 2017-06-24 11:28:34 +02:00
Jonathan Kew 8546c3a190 Bug 1371564 - Remove the long-obsolete TEXT_WAS_TRANSFORMED flag, don't waste time setting it. r=mats 2017-06-24 09:53:12 +01:00
Jonathan Kew f7e305bc0d Bug 1362167 - Use strongly-typed enum classes instead of generic uint16_t fields for the gfxShapedText and gfxTextRun flags. r=jrmuizel 2017-05-04 22:27:05 +01:00
Jonathan Kew 527ecaca8e Bug 1362167 - Split gfxShapedText.mFlags into two 16-bit flags fields, and arrange storage more compactly to reduce size of gfxShapedWord and gfxTextRun objects. r=jrmuizel 2017-05-04 22:25:16 +01:00
Cameron McCormack 54483ba170 Bug 1330236 - Compute SVG getNumberOfChars() quicker in simple cases. r=longsonr+218550
MozReview-Commit-ID: FgwR9dxTefx
2017-01-17 13:45:43 +08:00
Jeremy Chen b21b678070 Bug 1316482 - use the refactored TransformText as a template function for both char16_t and uint8_t text. r=xidorn
With this patch, we shall only maintain one version of the TransformText logic.

MozReview-Commit-ID: JAIksFVqvqf
2017-01-12 09:27:02 +08:00
Jeremy Chen a259ddec22 Bug 1316482 - remove collapsible white spaces according to the White Space Processing Rules. r=jfkthame
This patch is an implementation of CSS Text 3 - 4.1.1 Phase 1 Step 1.

According to the specification, if white space characters are considered
collapsible, they should be removed before applying segment break transformation
rules during the text transform.

In this patch, a refactoring of text transformation logic has been made. Every
run of consecutive document white space characters (spaces/tabs/segment breaks)
is collected first. Then, we could apply the white space processing rules
accordingly.

MozReview-Commit-ID: 1JStjFk5TBs
2017-01-12 09:27:01 +08:00
Wes Kocher c79bfe3886 Backed out 4 changesets (bug 1316482) for frequent reftest failures on win7vm a=backout
Backed out changeset ad208e73ab6c (bug 1316482)
Backed out changeset 2a28dc0a75d3 (bug 1316482)
Backed out changeset b54126cc63d4 (bug 1316482)
Backed out changeset ebd0c6c8b783 (bug 1316482)

MozReview-Commit-ID: IFpLJUjj8qH
2017-01-10 18:11:10 -08:00
Jeremy Chen a8834ca657 Bug 1316482 - use the refactored TransformText as a template function for both char16_t and uint8_t text. r=xidorn
With this patch, we shall only maintain one version of the TransformText logic.

MozReview-Commit-ID: JAIksFVqvqf
2017-01-10 00:02:03 +08:00
Jeremy Chen d14f84c71b Bug 1316482 - remove collapsible white spaces according to the White Space Processing Rules. r=jfkthame
This patch is an implementation of CSS Text 3 - 4.1.1 Phase 1 Step 1.

According to the specification, if white space characters are considered
collapsible, they should be removed before applying segment break transformation
rules during the text transform.

In this patch, a refactoring of text transformation logic has been made. Every
run of consecutive document white space characters (spaces/tabs/segment breaks)
is collected first. Then, we could apply the white space processing rules
accordingly.

MozReview-Commit-ID: 1JStjFk5TBs
2017-01-10 00:02:02 +08:00
Daniel Holbert 96673e9ab9 Bug 1321387 part 2: Add missing "using namespace" declarations to a few .cpp files in layout/generic. r=TYLin
This adds 2 "using namespace mozilla" (to provide various types),
and 2 "using namespace mozilla::gfx" (to provide mozilla::gfx::DrawTarget).

MozReview-Commit-ID: 2bXbMlr4Dbn
2016-11-30 14:47:45 -08:00
Kan-Ru Chen dbd37a3b7b Bug 1081858 - Part 4. Implement segment break transformation rules. r=jfkthame
MozReview-Commit-ID: BcOm4LVWGzW
2016-10-27 14:52:22 +08:00
Kan-Ru Chen 450c716374 Bug 1081858 - Part 1. Fix aText off-by-one indexing. r=jfkthame
MozReview-Commit-ID: 6LAlEntU6C7
2016-10-27 14:52:21 +08:00
Sebastian Hengst 757a471332 Backed out changeset fd1d01c7a9e2 (bug 1081858) for failing reftest segment-break-transformation-1.html on Windows XP. r=backout 2016-10-26 18:49:07 +02:00
Sebastian Hengst d783dac220 Backed out changeset 5044bee3df13 (bug 1081858) 2016-10-26 18:49:07 +02:00
Kan-Ru Chen c27c795255 Bug 1081858 - Part 4. Implement segment break transformation rules. r=jfkthame
MozReview-Commit-ID: BcOm4LVWGzW
2016-10-26 19:15:28 +08:00
Kan-Ru Chen a7bc9258a4 Bug 1081858 - Part 1. Fix aText off-by-one indexing. r=jfkthame
MozReview-Commit-ID: 6LAlEntU6C7
2016-10-26 19:15:26 +08:00
Phil Ringnalda 3e7437372f Backed out 5 changesets (bug 1081858) for Android line-breaking reftest failures
Backed out changeset ac6306117c61 (bug 1081858)
Backed out changeset d9e96e907d0a (bug 1081858)
Backed out changeset 0dd35a1f895f (bug 1081858)
Backed out changeset ba420f595902 (bug 1081858)
Backed out changeset 44f9c7e8d124 (bug 1081858)

MozReview-Commit-ID: LV4YOozX3Ol
2016-10-25 20:38:20 -07:00