1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 20:15:07 +00:00
Commit graph

987 commits

Author SHA1 Message Date
Ali Mohammad Pur
5a2e7d30ce LibWeb: Use Gfx::AntiAliasingPainter to draw SVG paths
This is still quite bad, but it's much more pleasing to look at when
drawing random SVGs :^)
2021-09-18 02:12:38 +04:30
Sam Atkins
f4ea235a33 LibWeb: Replace hard-coded defaults in Node::apply_style()
This now uses the values in `InitialValues`, which is not ideal, but
it's better to have our defaults defined in two places, than in 3.

The default for `border-colors` is `currentcolor`, so we shortcut that
here and just grab the value of the `color` property. As noted, this is
not perfect, but it's somewhat better.
2021-09-17 23:06:45 +02:00
Sam Atkins
0053314dd1 LibWeb: Use initial values from Properties.json inside CSS Parser
This replaces several hard-coded initial values, with use of
`property_initial_value()`.
2021-09-17 23:06:45 +02:00
Sam Atkins
4f81cb927a LibWeb: Correct some initial values and add missing ones
- The `text-decoration-foo` values now match the spec.
- Added values for `border-foo` since those are needed soon.
- Make `color`'s initial value be `-libweb-palette-base-text`.
2021-09-17 23:06:45 +02:00
Sam Atkins
fc11b1f242 LibWeb: Add some more CSS identifiers
These are used by the "initial" values in Properties.json
2021-09-17 23:06:45 +02:00
Sam Atkins
bb1cc99750 LibWeb: Stop treating EOF as a valid part of an identifier
This was specifically causing the string "0" to be parsed as an invalid
Dimension token with no units, instead of as a Number. That then caused
out generated `property_initial_value()` function to fail for those
values.
2021-09-17 23:06:45 +02:00
Sam Atkins
2a3675f0c1 LibWeb: Make "currentcolor" lowercase in Properties.json
It's technically case-insensitive, but the spec always defines it as
"currentcolor" so it feels wrong to capitalise it differently there.
2021-09-17 23:06:45 +02:00
Sam Atkins
854d6e5822 LibWeb: Persuade CSS Parser that idents like currentcolor are colors
Shorthand properties were only checking for `ColorStyleValue`s, which
excludes identifier colors. Now they accept them too, including the
various `-libweb-foo` colors. :^)
2021-09-17 23:06:45 +02:00
Sam Atkins
17bb913625 LibWeb: Implement currentcolor special value
The `currentcolor` identifier represents the current value of the
`color` property. This is the default value for `border-color` and
`text-decoration-color`, and is generally useful to have. :^)
2021-09-17 23:06:45 +02:00
Sam Atkins
86f78bff2a LibWeb: Make StyleValue::to_color() take a Node instead of the Document
This is in preparation for the `currentcolor` value, which needs to know
what Node it's on so it can check the `color`.
2021-09-17 23:06:45 +02:00
Andreas Kling
c2c007b356 LibWeb: Don't request WebContent repaint while we have repaints pending
This prevents flickering by ensuring that WebContent is only ever
painting into the back buffer bitmap. Without this change, it was
possible for WebContent to paint into the front buffer bitmap.
2021-09-17 14:54:51 +02:00
Andreas Kling
17a5c96b7c LibWeb: Make a SharedBitmap struct for OOPWV bitmaps
Instead of having separate members for "bitmap ID" and "bitmap", let's
wrap them in a struct.
2021-09-17 14:39:42 +02:00
Andreas Kling
4fcb1be734 LibWeb: Skip rendering box-shadow blur if we don't have memory for it
A slight loss in graphical fidelity is better than not rendering the
page at all.
2021-09-17 13:20:18 +02:00
Andreas Kling
e2e6c12ea0 LibWeb: Make ComputedValues return larger items by const reference 2021-09-17 13:20:18 +02:00
Andreas Kling
11bb6e045f LibWeb: Add the IdleDeadline interface from the RequestIdleCallback spec 2021-09-17 13:20:18 +02:00
Andreas Kling
64df30230d LibWeb: Add HTML::Task::Source::IdleTask
This represents what the spec calls the "idle-task task source".
2021-09-17 13:20:18 +02:00
Tobias Christiansen
f8ea730f29 LibWeb: Flexbox: Add default value for AlignItems
Previously there was no default value and wrapping broke when the
container didn't have a align-items specified.
2021-09-16 22:51:15 +02:00
Sam Atkins
3964b81d2b LibWeb: Add for CSS fill/stroke/stroke-color properties for SVG
In the spec, `fill` and `stroke` are supposed to be a shorthands for
various properties. But since the spec is still a working draft, and
neither Firefox or Chrome support the `fill-color` or `stroke-color`
properties, we'll stick with `fill` and `stroke` as simple colors for
now.

Also, note that SVG expects things in "user units", and we are assuming
that 1px = 1 user unit for now.
2021-09-16 22:30:33 +02:00
Brian Gianforcaro
889ade06fe LibWeb: Use explicit move to avoid unnecessary RefPtr ref / unref 2021-09-16 17:17:13 +02:00
Brian Gianforcaro
2b57018196 LibWeb: Use default instead of an empty constructor/destructor
Default implementations allow for more optimizations.
See: https://pvs-studio.com/en/docs/warnings/v832/
2021-09-16 17:17:13 +02:00
Andreas Kling
d69e4f9ca7 LibWeb: Don't dump full data URLs in ResourceLoader logging
Some pages use *really* large data URLs. :^)
2021-09-16 01:39:47 +02:00
Andreas Kling
58b84f953c LibWeb: Add fast_is<HTMLTemplateElement>()
This was showing up as hot in profiles, as the HTML parser calls it
quite a lot.
2021-09-16 01:39:47 +02:00
Andreas Kling
cb895edad4 LibWeb: Move Attribute into the DOM namespace 2021-09-16 01:39:47 +02:00
Tobias Christiansen
ef22a1b2dc LibWeb: Avoid setting definite {width,height} when "auto" is specified
Auto is not specified at all.
2021-09-15 22:28:28 +02:00
Tobias Christiansen
6c15eeb367 LibWeb: Flexbox: Somewhat suppport "align-items"
There probably are a lot of edge cases missing but this moves us forward
at least a bit.
2021-09-15 22:28:28 +02:00
Tobias Christiansen
67bf553fad LibWeb: Flexbox: Make step 11 of the layout algorithm more align aware 2021-09-15 22:28:28 +02:00
Tobias Christiansen
307f90b675 LibWeb: Add proper parsing of the AlignItems property
This teaches all the relevant places about 'align-items'.
2021-09-15 22:28:28 +02:00
Andreas Kling
422d725c79 LibWeb: Support "c" and "C" curves in SVG <path> data
These instructions now generate cubic Bézier curves.
2021-09-15 20:57:43 +02:00
Andreas Kling
c4f2976d83 LibWeb: Remove unused SVGSVGElement::m_bitmap 2021-09-15 20:57:43 +02:00
Andrew Kaster
a269a32a17 Meta: Use Lagom:: namespaced names for code generators
This will be required when we switch to a SuperBuild that has Lagom as
a configure time dependency, but is a distinct enough change to be
separate.
2021-09-15 19:04:52 +04:30
Andreas Kling
28fabd4728 LibWeb: Make Layout::Node::paint() pure virtual
In the past, the base class implementation of this was used to descend
into subtrees and paint children. That is now taken care of by
StackingContext::paint_descendants() instead, and nothing used this.
2021-09-15 15:25:47 +02:00
Andreas Kling
eac31e21f2 LibWeb: Avoid some redundant calls to Layout::Box::absolute_rect()
Computing the absolute rect of a box requires walking the chain of
containing blocks and apply any offsets encountered. This can be slow in
deeply nested box trees, so let's at least avoid doing it multiple times
when once is enough.
2021-09-15 14:18:17 +02:00
Sam Atkins
1103eb8d44 LibWeb: Remove unused NodeWithStyle::m_position field 2021-09-15 13:55:25 +02:00
Sam Atkins
ee671a20cc LibWeb: Make flex-box ignore out-of-flow child boxes
Previously, out-of-flow children still took up space inside a flex-box
container, leaving an odd gap. Now they don't! :^)
2021-09-15 13:55:25 +02:00
Sam Atkins
2844f89a83 LibWeb: Implement "out-of-flow" property of Layout Box
In some situations, a layout box should not participate in the standard
layout process, for example when set to `position: absolute`.
2021-09-15 13:55:25 +02:00
Andreas Kling
7de23aede2 LibWeb: Parse the <svg viewBox> attribute
Just parse it into an SVG::ViewBox object for now, we don't actually use
it for anything yet.
2021-09-15 11:56:26 +02:00
Andreas Kling
63c4fcdc69 LibWeb: Add SVG::ViewBox to represent SVG view boxes
This also comes with a simple little parsing helper. :^)
2021-09-15 11:56:26 +02:00
Andreas Kling
8949b0def6 LibWeb: Add an SVG::AttributeNames namespace
There are a whole bunch of SVG attributes, and we shouldn't mix them in
with the HTML attributes. This patch adds some of them to the new
namespace, but there are more to be added. :^)
2021-09-15 11:56:26 +02:00
Sam Atkins
3f31f109b5 LibWeb: Speed up computed style calculation
Rather than destroying and rebuilding the entire document layout tree in
every call to `ComputedCSSStyleDeclaration::property()`, we now just
make sure that the layout tree exists.

This speeds up the DOM Inspector significantly, from taking several
seconds to select an element, to almost instant. :^)
2021-09-15 11:24:11 +02:00
Andreas Kling
70398645f3 LibWeb: Improvements to error handling in HTML foreign content parsing
Follow the spec more closely when encountering an invalid start or end
tag during foreign content parsing.
2021-09-14 23:49:45 +02:00
Tobias Christiansen
fad825e94e LibWeb: Flexbox: Avoid division by zero
This is not a good thing, one should not divide by zero! :^)
2021-09-14 22:52:48 +02:00
Tobias Christiansen
85af2ac450 LibWeb: Flexbox: Change the name of a variable to correspond to spec
The spec used two different names for the same thing, and it was
confusing to read the spec on the one side and have the other name in
the code.
2021-09-14 22:52:48 +02:00
Tobias Christiansen
15b61ce143 LibWeb: Flexbox: Resolve relative size of flex-items more correctly
This is still very much not the right thing to do, but at least
relatively sized flex-items get the right size.
2021-09-14 22:52:48 +02:00
kleines Filmröllchen
047c013be0 LibWeb: Add several computed CSS styles
These are mostly combined styles such as background, as well as handling
the Invalid and Custom property IDs (which both make no sense).
2021-09-14 22:02:14 +02:00
kleines Filmröllchen
6865a5a447 LibWeb: Add CombinedBoderRadiusStyleValue for CSS border-radius
This style value can hold all four border radii and format them into
valid CSS for the `border-radius` property.
2021-09-14 22:02:14 +02:00
Andreas Kling
20fb900937 LibJS+LibWeb: Move script parse time logging from JS::Script to LibWeb
Let's only log HTML::ClassicScript parse times for now. Otherwise things
will get excessively noisy in test-js and the test262 runner.
2021-09-14 21:41:51 +02:00
Andreas Kling
10c489713d LibJS+LibWeb: Let JS::Script::parse() return a list of errors (on error)
These are really supposed to be a list of SyntaxError objects, but for
now we simply return all the Parser::Error objects we got from Parser.
2021-09-14 21:41:51 +02:00
Luke Wilde
e4d97add3d LibWeb: Implement ParentNode.children
Required by Web Platform Tests for the innerHTML/outerHTML tests.
2021-09-14 02:09:18 +02:00
Luke Wilde
8e0f3436a2 LibWeb: Make the innerHTML setter spec compliant
This adds innerHTML to ShadowRoot in the process.
2021-09-14 02:09:18 +02:00
Luke Wilde
f62477c093 LibWeb: Implement HTML fragment serialisation and use it in innerHTML
The previous implementation was about a half implementation and was
tied to Element::innerHTML. This separates it and puts it into
HTMLDocumentParser, as this is in the parsing section of the spec.

This provides a near finished HTML fragment serialisation algorithm,
bar namespaces in attributes and the `is` value.
2021-09-14 02:09:18 +02:00