Commit graph

63347 commits

Author SHA1 Message Date
Sam Atkins
e5553d6d2f LibWeb/CSS: Make parse_color() take a TokenStream
This makes the parse_color_value() code a lot simpler.
2024-08-10 10:36:39 +02:00
Sebastian-Webster
b0e3b28929 LibWebView: Add Ecosia search engine 2024-08-10 10:36:32 +02:00
Tobias Christiansen
c3e69f2fc6 Inspector: Add "Fonts" tab
This adds another tab to the bottom tabs providing information
regarding the fonts computed for the currently selected DOM node.
2024-08-09 18:58:04 +01:00
Tobias Christiansen
5621f34062 LibWebView + WebContent: Add fonts to be transferable to inspector
This patch adds all the needed plumbing to transfer information
regarding fonts of the selected DOM node to the inspector.
2024-08-09 18:58:04 +01:00
Tobias Christiansen
049a261782 LibGfx: Add for_each_font_entry to FontCascadeList
This way there is a way to iterate over all the fonts in the object.
2024-08-09 18:58:04 +01:00
Tobias Christiansen
ae25146b89 Inspector: Clean up theming CSS with variables
The media queries for the different themes were all over the place,
they got consolidated in one place specifying all the colors. :^)
2024-08-09 18:58:04 +01:00
simonkrauter
dd5550dde3 LibWebView: Remove early exit in InspectorClient::inspect()
This early exit prevents to show the current DOM in the inspector, when
the inspector was already opened.

Fixes #990
2024-08-09 17:19:56 +01:00
Jelle Raaijmakers
7a783d3a89 LibWeb: Account for intrinsic width or height in flex base size
In calculating the base size of a flex item, we have a piece of ad-hoc
code that deals with an item that does have an instrinsic aspect ratio,
but not a cross size to resolve that ratio against. In determining the
actual flex item size however, we also take into account the minimum
content width and height, which assumes the box' intrinsic width or
height when available. This would break having an image as a flex item,
which gets stretched to its maximum size within the flex container
instead of the flex item being shrunk to the instrinsic size of the
image.

Fix this by only stretching flex items that do not have an instrinsic
width nor height set.
2024-08-09 17:01:50 +01:00
Jelle Raaijmakers
d82f8a4b16 LibWeb: Update two spec URIs
No functional changes.
2024-08-09 17:01:50 +01:00
Jelle Raaijmakers
89d21335a1 LibWeb: Remove unused includes
No functional changes.
2024-08-09 17:01:50 +01:00
Alec Murphy
b3a67ee088 LibWeb: Skip trim trailing whitespace if user is typing
This PR stops the cursor from disappearing while typing trailing spaces
in a text input box.
2024-08-09 16:57:14 +01:00
Gasim Gasimzada
8545756d17 LibJS: Treat passing undefined as no argument for console labels
- Affects time, timeLog, timeEnd, count, and countReset functions
2024-08-09 11:02:22 +01:00
BenJilks
0ca5675d59 LibTextCodec: Implement iso-2022-jp encoder
Implements the `iso-2022-jp` encoder, as specified by
https://encoding.spec.whatwg.org/#iso-2022-jp-encoder
2024-08-08 17:49:58 +01:00
BenJilks
08a8d67a5b LibTextCodec: Implement shift_jis encoder
Implements the `shift_jis` encoder, as specified by
https://encoding.spec.whatwg.org/#shift_jis-encoder
2024-08-08 17:49:58 +01:00
BenJilks
c1958437f9 LibWeb: Use text encoding from DOM when parsing URLs
This passes the DOM encoding down to the URL parser, so the correct
encoder can be used.
2024-08-08 17:49:58 +01:00
BenJilks
d80575a410 LibTextCodec: Implement gb18030 and gbk encoders
Implements the `gb18030` and `gbk` encoders, as specified by
https://encoding.spec.whatwg.org/#gb18030-encoder
https://encoding.spec.whatwg.org/#gbk-encoder
2024-08-08 17:49:58 +01:00
BenJilks
34c8c559c1 LibTextCodec: Implement big5 encoder
Implements the `big5` encoder, as specified by
https://encoding.spec.whatwg.org/#big5-encoder
2024-08-08 17:49:58 +01:00
BenJilks
826292536c LibTextCodec: Implement euc-kr encoder
Implements the `euc-kr` encoder, as specified by
https://encoding.spec.whatwg.org/#euc-kr-encoder
2024-08-08 17:49:58 +01:00
BenJilks
72d0e3284b LibTextCodec+LibURL: Implement utf-8 and euc-jp encoders
Implements the corresponding encoders, selects the appropriate one when
encoding URL search params. If an encoder for the given encoding could
not be found, fallback to utf-8.
2024-08-08 17:49:58 +01:00
Tim Ledbetter
82a63e350c AK: Assert that is<T>() input and output types are not the same
This makes it a compile error to use is<T>() where the input and output
types are known to be the same at compile time.
2024-08-08 17:50:59 +02:00
Tim Ledbetter
85863bb0ef LibWeb: Don't verify_cast where input and output types are the same 2024-08-08 17:50:59 +02:00
Shannon Booth
deff8df2c7 LibWeb: Actually perform "update the href steps"
We completely missed this step, which made setters not actually do
anything!

Fixes 336 test failures on:

https://wpt.live/url/url-setters-a-area.window.html
2024-08-08 14:59:42 +01:00
Aliaksandr Kalenik
40742d95e6 LibWeb: Call set_needs_display() if navigable is scrolled or resized
`m_needs_repaint = true` is not enough because it doesn't schedule
repaint of a parent navigable.

Fixes the bug when an iframe is not repainted after scrolling.
2024-08-08 12:38:15 +02:00
Tim Ledbetter
087d400472 LibWeb: Avoid division by zero in SourceSet width descriptor calculation 2024-08-08 12:20:04 +02:00
Shannon Booth
aa32bfa448 LibWeb: Implement USVString scalar value handling
USVString is defined in the IDL spec as:

> The USVString type corresponds to scalar value strings. Depending on
> the context, these can be treated as sequences of either 16-bit
> unsigned integer code units or scalar values.

This means we need to account for surrogate code points by using the
replacement character.

This fixes the last test in https://wpt.live/url/url-constructor.any.html
2024-08-08 10:50:06 +01:00
Shannon Booth
2e884ff140 LibJS: Add Value::to_well_formed_string 2024-08-08 10:50:06 +01:00
Ali Mohammad Pur
d2ff92077b LibWasm: Use braces to initialize Reference::Foo classes
These have no declared constructor, so apple clang and clang clang seem
to disagree on some versions.
2024-08-07 23:39:46 +02:00
Aliaksandr Kalenik
9def582fba LibWeb: Apply enclosing scroll frame offset to iframe's position
Fixes iframe painting when it's nested into a scrollable box.
2024-08-07 20:16:02 +02:00
Jelle Raaijmakers
5865cf5864 LibWeb: Use bitmap's alpha type instead of assuming unpremultiplied
When converting a `Gfx::Bitmap` to a Skia bitmap, we cannot assume the
color data is unpremultiplied. For example, everything canvas-related
uses premultiplied color data:

  https://html.spec.whatwg.org/multipage/canvas.html#premultiplied-alpha-and-the-2d-rendering-context

We were probably assuming unpremultiplied since that is what the PNG
decoder gives us. Since we now make `Gfx::Bitmap` identify what alpha
type is being used, we can instruct Skia a bit better :^)

Update our `EdgeFlagPathRasterizer` to use premultiplied alpha instead
of unpremultiplied so we can apply alpha correctly for path masks.

This fixes the dark borders sometimes visible when SVGs are blended
with a colored background.

This also exposed an issue with our `CanvasRenderingContext2D`, which is
supposed to hold a bitmap with premultiplied alpha internally but expose
a bitmap with unpremultiplied alpha in `CanvasImageData`. Expand our C2D
test to include the alpha channel as well.

Finally, this also exposed an off-by-one issue in
`EdgeFlagPathRasterizer` which caused the last scanlines for edges to
render incorrectly. We had some reference images which included these
corruptions (they were almost unnoticeable), so update them as well.
2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
a430ae6dcf LibGfx: Mark PNG bitmaps as having unpremultiplied alpha 2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
b193fe658d LibGfx: Store alpha type information in Gfx::Bitmap
We use instances of `Gfx::Bitmap` to move pixel data all the way from
raw image bytes up to the Skia renderer. A vital piece of information
for correct blending of bitmaps is the alpha type, i.e. are we dealing
with premultiplied or unpremultiplied color values?

Premultiplied means that the RGB colors have been multiplied with the
associated alpha value, i.e. RGB(255, 255, 255) with an alpha of 2% is
stored as RGBA(5, 5, 5, 2%).

Unpremultiplied means that the original RGB colors are stored,
regardless of the alpha value. I.e. RGB(255, 255, 255) with an alpha of
2% is stored as RGBA(255, 255, 255, 2%).

It is important to know how the color data is stored in a
`Gfx::Bitmap`, because correct blending depends on knowing the alpha
type: premultiplied blending uses `S + (1 - A) * D`, while
unpremultiplied blending uses `A * S + (1 - A) * D`.

This adds the alpha type information to `Gfx::Bitmap` across the board.
It isn't used anywhere yet.
2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
99dd063c58 LibGfx: Factor out alpha type from GradientPainting
Knowing whether pixel color data is premultiplied or unpremultiplied is
useful in more places; factor it out so we can use the enum elsewhere.

Implement support for premultiplied alpha in `Color::with_alpha()` and
`::set_alpha()`.
2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
56ff36a0ee LibGfx: Prefix class members with m_ in EdgeTable
No functional changes.
2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
f5d838b64c LibGfx: Fix "coverage" typos in EdgeFlagPathRasterizer
No functional changes.
2024-08-07 18:51:12 +02:00
Jelle Raaijmakers
3eb4da514c LibGfx: Remove unused ColorRole forward from Color.h 2024-08-07 18:51:12 +02:00
Aliaksandr Kalenik
ee4dd5a17c LibWeb: Remove unused image-rendering param for stacking context
Previously it was accounted for by LibGfx while applying scale
transformation, but is no longer needed for Skia.
2024-08-07 18:50:44 +02:00
Aliaksandr Kalenik
53ef0e2e88 LibWeb: Adjust stacking context position by scroll offset in hit-testing
Fixes a bug when stacking contexts nested inside scrollable box are
treated as fixed positioned during hit-testing.
2024-08-07 18:14:41 +02:00
Aliaksandr Kalenik
1163ff21d7 LibWeb: Don't wrap result in optional in enclosing_scroll_frame_offset()
Instead return (0, 0) if a box does not have an offset.
2024-08-07 18:14:41 +02:00
Sam Atkins
4ec3968178 WebContent+LibWeb: Display resolved pseudo-element style in inspector
This also now uses the cached computed style for them, instead of
computing it fresh each time.
2024-08-07 16:14:49 +02:00
Sam Atkins
173daec9db LibWeb: Show pseudo-elements in DOM whose parent has no other children
If a DOM node is an element with pseudo-elements, but it has no child
DOM nodes and is not a shadow host, then the code that serializes its
pseudo-elements would get skipped, making them not show up in the
inspector.
2024-08-07 16:14:49 +02:00
Sam Atkins
9738070676 Base: Make it clear that the chonky quotation marks do in fact work now 2024-08-07 16:14:49 +02:00
Sam Atkins
14611de362 LibWeb: Implement getComputedStyle() pseudoElement parameter
Right now, we deviate from the CSSOM spec regarding our
CSSStyleDeclaration classes, so this is not as close to the spec as I'd
like. But it works, which means we'll be able to test pseudo-element
styling a lot more easily. :^)
2024-08-07 16:14:49 +02:00
Sam Atkins
dae9c9be40 LibWeb/CSS: Add quick-and-dirty parsing for pseudo-element selectors
As noted, this is hacky because the parser wasn't written to allow
parsing an individual component of a selector. (Fox example, the
convenient-sounding `parse_pseudo_simple_selector()` assumes the first
colon has already been consumed...) So until that changes, this parses
the input as an entire selector-list, and then throws it away if it's
not a single pseudo-element selector.

It's only temporary though, I promise. 😅
2024-08-07 16:14:49 +02:00
Sam Atkins
521cd161a8 LibWeb: Store pseudo-element layout nodes as NodeWithStyle
We were already guaranteed to return a NodeWithStyle from
`create_layout_node_for_display_type()`, so make use of that knowledge.
2024-08-07 16:14:49 +02:00
Andrew Kaster
7758875cfd AK+LibGfx: Only generate clang module map if ENABLE_SWIFT
The script pulls in a dependency on the `yaml` python package. Instead
of updating all the docs and CI jobs to account for this, let's guard
calling the script behind our experimental flag instead.
2024-08-07 09:04:09 +02:00
Andrew Kaster
5a31fed1da LibGfx: Generate clang module map 2024-08-06 18:28:10 -06:00
Andrew Kaster
2d6a65884c AK: Generate clang module map 2024-08-06 18:28:10 -06:00
Andrew Kaster
cb55f65328 Meta: Add a script and CMake function to generate a clang module map
In theory the clang module map should not have absolute paths for the
headers. Other Swift projects seem to use the -ivfsoverlay feature of
clang to work around this, but it seems difficult to get to work.
2024-08-06 18:28:10 -06:00
Andrew Kaster
54c7bb1e9d LibGfx: Include implicit header files from EdgeFlagPathRasterizer
This ensures that we aren't relying on transitive dependencies for
AK::log2(integral_value) and WindingRule
2024-08-06 18:28:10 -06:00
Andrew Kaster
e7a9126f81 CMake: Silence the loudest warnings for generating Swift interop headers
And modernize the cmake_parse_arguments() call at the top.

Ideally, we would pull these flags from the target we're generating
for, but the current CMake setup makes that prohibitively infeasible.
2024-08-06 18:28:10 -06:00