1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-23 15:35:08 +00:00
Commit graph

3524 commits

Author SHA1 Message Date
MacDue
980964d8f3 LibWeb: Add a default style for primitive progress bars
This style is the same as what is used in WebKit/Blink, it is a bit
ugly, but you're expected to override it. Adding more than a
background color here could cause some issues, as sites don't
expect to have to unset the styles.
2022-07-23 01:45:49 +02:00
MacDue
57c6792458 LibWeb: Support appearance: none for <progress> elements
This disables this system progress bar, and instead creates one
out of pseudo elements, that can be selected and styled with the
::-webkit-progress-bar/value selectors.
2022-07-23 01:45:49 +02:00
MacDue
d7d34d88e5 LibWeb: Implement appearance CSS property
This includes the "compat" values even though they are not strictly
necessary.
2022-07-23 01:45:49 +02:00
MacDue
b5febe538c LibWeb: Parse the -webkit-progress-bar/value pseudo elements
These will be needed for styling progress bars, sadly this can
only be done with these non-standard selectors. These are, hovever,
in use on real sites such as https://rpcs3.net/compatibility.
2022-07-23 01:45:49 +02:00
Kenneth Myhra
9a1c27a163 LibWeb: Implement BufferSource support for XHR::send() 2022-07-22 23:08:28 +01:00
Kenneth Myhra
e55bdd434a LibWeb: Add spec link for XMLHttpRequestBodyInit 2022-07-22 23:08:28 +01:00
Kenneth Myhra
5830ff5be9 LibWeb: Let XHR::extract_body() return ErrorOr
This is a minor refactor of XHR::extract_body() letting it return
ErrorOr<...> instead of just Fetch::Infrastructure::BodyWithType.

This also updates the one place extract_body() is used.
2022-07-22 23:08:28 +01:00
Kenneth Myhra
9fe12c1851 LibWeb: Let get_buffer_source_copy() return ErrorOr instead of Optional
This is a minor refactor of IDL::get_buffer_source_copy() letting it
return ErrorOr<ByteBuffer> instead of Optional<ByteBuffer>.

This also updates all places that use IDL::get_buffer_source_copy().
2022-07-22 23:08:28 +01:00
Sam Atkins
094ba6525f LibWeb: Allow calc() inside CSS transform functions :^)
As noted, we should probably handle calc() parsing as part of parsing
other values. eg, any `<length>` can be a `calc()` that returns a
length, but we currently have to manually handle that everywhere that
doesn't use the `Parser::parse_css_value(ComponentValue)` method.
2022-07-21 16:36:08 +02:00
Sam Atkins
10ee29a8b3 LibWeb: Add helper methods for checking a calc()'s resolved type 2022-07-21 16:36:08 +02:00
Sam Atkins
93c999ce00 LibWeb: Stop handling impossible Percentage return values
When a `calc()` is resolved, it can only return a Percentage value if
the requested type is Percentage. In all other cases, it returns a
concrete value.

eg, a `calc()` with Lengths and Percentages in will always resolve to a
Length, never a Percentage. This means we can just return Length
directly instead of LengthPercentage, which simplifies things in a few
places.
2022-07-21 16:36:08 +02:00
Sam Atkins
cf6e49350e LibWeb: Handle transform in style_value_for_property() 2022-07-21 16:36:08 +02:00
Sam Atkins
469e881eca LibWeb: Mark transform property as affecting stacking contexts 2022-07-21 16:36:08 +02:00
Sam Atkins
75e0b21940 LibWeb: Store calculated transformation matrix on the StackingContext
This is mainly so we can easily read that matrix later, but also has the
benefit of only calculating the matrix once, instead of every time we
paint. :^)
2022-07-21 16:36:08 +02:00
Sam Atkins
01a3f72d39 LibWeb: Make PaintableBox private members private
These are all `m_` prefixed and only used by PaintableBox itself.
2022-07-21 16:36:08 +02:00
Sam Atkins
032646b6c3 LibWeb: Produce a transformation matrix for TransformFunction::Rotate
Currently we can't actually paint the result, but at least the maths is
correct. :^)
2022-07-21 16:36:08 +02:00
Sam Atkins
b5ab961e20 LibWeb: Add proper support for Angle parameters in transform functions
Also, made the `reference_length` parameter optional for the lambda that
extracts transform-function parameters, since it is only needed to
resolve `LengthPercentage` parameters.
2022-07-21 16:36:08 +02:00
Sam Atkins
e60beef12e LibWeb: Alphabetize style_value_for_property() list 2022-07-21 16:36:08 +02:00
Andreas Kling
237fbe4d54 LibWeb: Remember the used flex basis for each flex item
This will be consulted later on in the flex layout algorithm.
2022-07-21 01:46:26 +02:00
Andreas Kling
b7003194d2 LibWeb: Use right offset for justify-content: flex-end
Offsets in this algorithm are relative to the starting position, so it
should be 0 whether its `flex-start` or `flex-end`.
2022-07-21 01:46:25 +02:00
Andreas Kling
a6e1b9eed2 LibWeb: Snap transformed stacking contexts to pixel grid
Make sure that we're painting them at an integer pixel position, to
avoid smearing.
2022-07-21 01:46:25 +02:00
Andreas Kling
e095b9c6f9 LibWeb: Resolve auto containing block sizes before intrinsic sizing
Before performing intrinsic sizing layout on a box, we now check if its
containing block has automatic size in the relevant axis, and if so,
we fetch the size of the nearest containing block ancestor with a size.
2022-07-21 01:46:25 +02:00
Andreas Kling
da0cc9d401 LibWeb: Floor hypothetical main size at 0
The spec asks us to do this. It doesn't become relevant until we
implement box-sizing, but might as well do it anyway.
2022-07-21 01:46:25 +02:00
Linus Groh
042dfc7284 LibWeb: Move extract_mime_type() from XMLHttpRequest to HeaderList
Except some minor tweaks, this is a direct copy of Luke's initial
implementation in XMLHttpRequest, now replacing the former.
2022-07-20 18:03:21 +01:00
Linus Groh
69d324d46a LibWeb: Fix accidental (name, name) header in Headers::fill()
This makes two more WPT tests pass here:
http://wpt.live/fetch/api/headers/headers-basic.any.html
2022-07-20 18:03:21 +01:00
Andreas Kling
cf4b7e343a LibWeb: Blockify inline-flex to flex
Previously, `inline-flex` would blockify to `block` since blockification
didn't take the inner display type into account. This is still not
perfect, but it fixes a lot of situations where inline-level flex
containers would be demoted to regular block containers.
2022-07-19 15:40:41 +02:00
Andreas Kling
ed8930fff5 LibWeb: Add accessors for UsedValues::computed_{width,height}
This is preparation for doing some more work when assigning to these
values.
2022-07-19 15:40:41 +02:00
MacDue
0b0a691ecd LibWeb: Fix overflow: hidden not applying to positioned descendants
This now calls before/after_child_paint() on the parent paintable
of a positioned child. This allows the parent's overflow clipping
to apply to the child.
2022-07-19 15:00:59 +02:00
MacDue
f079214b18 LibWeb: Apply overflow: hidden to all (relevant) child paint phases
Previously, before/after_children_paint() was only called for the
"Foreground" paint phase, this meant the backgrounds and other
features of child nodes of a element with overflow: hidden were
not clipped.
2022-07-19 15:00:59 +02:00
Andreas Kling
c517dfde12 LibWeb: Honor the flexbox spec's "automatic minimum size" everywhere
`min-width: auto` and `min-height: auto` have special behavior on flex
items. We already handled it in many cases but there were two places
where it was incorrectly treated as 0. This fixes that.
2022-07-19 12:45:50 +02:00
Andreas Kling
789f258412 LibWeb: Reject negative values for flex-grow and flex-shrink 2022-07-19 12:45:50 +02:00
Linus Groh
ed49b66f25 LibWeb: Implement '5.1. Headers class' from the Fetch API :^) 2022-07-19 00:27:35 +01:00
Linus Groh
b5ab1f6b4a LibWeb: Implement HeaderList::sort_and_combine() 2022-07-19 00:27:35 +01:00
Linus Groh
bad6ad8861 LibWeb: Implement CaseInsensitiveBytesTraits::equals()
Turns out HashTable::contains() doesn't solely use hash() for equality
checks, so the lack of a proper equals() implementation broke the check
in convert_header_names_to_a_sorted_lowercase_set() and caused duplicate
entries in header_names_set.
2022-07-19 00:27:35 +01:00
Linus Groh
2726fc9c73 LibWeb: Move Fetch infra into the Web::Fetch::Infrastructure namespace
The Fetch spec unfortunately will cause a name clash between the Request
concept and the Request JS object - both cannot live in the Web::Fetch
namespace, and WrapperGenerator generally assumes `Web::<Name>` for
things living in the `<Name>/` subdirectory, so let's instead move infra
code into its own namespace - it already sits in a (sub-)subdirectory
anyway.
2022-07-19 00:27:35 +01:00
Kenneth Myhra
0a511e29d1 LibWeb: Add support for Blob to XHR::send() 2022-07-18 14:57:58 +01:00
Kenneth Myhra
9b3da5a142 LibWeb: Move extract_body() towards spec compliance 2022-07-18 14:57:58 +01:00
Kenneth Myhra
bc4ccadcac LibWeb: XHR::extra_body() rewrite to use Variant::visit() 2022-07-18 14:57:58 +01:00
Kenneth Myhra
48b59aaeb1 LibWeb: Mark body argument of extract_body() as const reference 2022-07-18 14:57:58 +01:00
Kenneth Myhra
1b9f5fa28a LibWeb: Mark URLSearchParams::to_string() as const 2022-07-18 14:57:58 +01:00
Kenneth Myhra
42e76d8de9 LibWeb: Rename safely_extract_body() to extract_body()
We have not yet implemented safely_extract_body so renaming this to
extract_body() and adding a spec link.
2022-07-18 14:57:58 +01:00
MacDue
0c521381a3 LibWeb: Replace LibGfx gradient painting with new GradientPainting 2022-07-18 10:10:22 +01:00
MacDue
469491906f LibWeb: Add GradientPainting for painting linear-gradients
This implements support for painting linear-gradients in a spec
correct way :^).

Right now it supports:

- Multi-stop gradients
- Color stop fixups
- Using pre-multiplied alpha mixing when required
- Painting gradients at arbitrary angles

It still needs to support:

- Transition hints
- Double position color stops

However what is implemented now seems to be accurate to other
browsers, and covers the most common use cases.
2022-07-18 10:10:22 +01:00
MacDue
4246d04e5a LibWeb: Calculate to <corner> angles for linear-gradients
This also renames LinearGradientStyleValue::angle() to
LinearGradientStyleValue::angle_degrees() to make the unit more
obvious.
2022-07-18 10:10:22 +01:00
Linus Groh
6619483169 LibWeb: Update incorrect Fetch namespaces
Oops, this namespace rename wasn't committed yet.
2022-07-18 08:14:04 +01:00
Linus Groh
58fda93ea2 LibWeb: Add Blob to Fetch's Body::SourceType variant 2022-07-18 08:11:25 +01:00
Linus Groh
c501453425 LibWeb: Use Fetch's HeaderList::get_decode_and_split() in XMLHttpRequest 2022-07-18 08:10:54 +01:00
Linus Groh
bc68539e26 LibWeb: Add & use TRY_OR_RETURN_OOM macro
This is a convenient way to return a DOM exception for operations that
return ErrorOr and only have an OOM failure path.
2022-07-17 21:08:10 +01:00
MacDue
cbc04a6285 LibWeb: Support painting simple linear-gradients
This is just a quick test that everything is working. Currently
it paints the gradients with the existing
painter.fill_rect_with_gradient(). This can only handle two-color
orthogonal gradients.
2022-07-17 20:11:38 +01:00
MacDue
ee7e9e7c86 LibWeb: Allow having a linear-gradient() as a background-image 2022-07-17 20:11:38 +01:00