1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:38:11 +00:00
Commit graph

309 commits

Author SHA1 Message Date
Sam Atkins
7d08d5ad6f LibWeb: Remove now-unused includes from StyleValue.cpp
And add them to all the places that relied on getting them transitively.
2023-03-25 16:56:04 +00:00
Sam Atkins
cd06b1341b LibWeb: Split TransformationStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
0f04fa2e6e LibWeb: Split RadialGradientStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
c8ffd82cb7 LibWeb: Split LinearGradientStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
f30b042890 LibWeb: Split ConicGradientStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
MacDue
dd77b878b3 LibWeb: Add scalable radio buttons (with theme/accent-color support)
These are similar to the checkboxes now (though no SDFs here all just
plain AA painter).
2023-03-24 09:57:48 +00:00
MacDue
56bc653e72 LibWeb: Move checkbox color palette computation to helper header
This will allow these to be more easily reused for other inputs.

Note that we need this as the base LibGfx pallet does not quite have
the required range for HTML inputs (though these shades are based off
the LibGfx palette).
2023-03-24 09:57:48 +00:00
MacDue
cfc9966654 LibWeb: Add scaleable checkboxes (with theme/accent-color support)
This reworks checkboxes to use a tiny 16x16 SDF for the tick icon along
with an antialiased background/border.

The checkbox now works well at any scale, shows the various checkbox
state (enabled, disabled, being pressed), and supports using the colors
from the active system theme and/or the accent-color property.
2023-03-23 08:27:51 +00:00
Aliaksandr Kalenik
dcc4868a3c LibWeb: Rename PaintableBox::clip_rect() 2023-03-19 19:04:51 +01:00
Aliaksandr Kalenik
7ddacef3b5 LibWeb: Apply border-radius clip only if overflow hidden for both axis
Before this change `apply_clip_overflow_rect` might crash trying to
access `clip_rect` that does not have value because we currently
support calculation of visible rectangle when `overflow: hidden`
is applied for both axis.
2023-03-19 19:04:51 +01:00
Andreas Kling
245e3b9c3a LibWeb: Honor pointer-events: none when hitting a PaintableBox
If the PaintableBox had children, but we didn't hit any of them, we
default to saying that you hit the PaintableBox itself.

However, if said PaintableBox has `pointer-events: none`, we should
say nothing was hit, so that the hit testing can continue.

This fixes an issue where Discord server icons were not clickable.
2023-03-18 20:30:09 +01:00
Andreas Kling
5146b9b35e LibWeb: Scale the font when painting the text on buttons
Button text was staying the same size at all zoom levels. :^)
2023-03-15 23:29:00 +01:00
Andreas Kling
664f30a2c9 LibWeb: Don't truncate font sizes before scaling them to device pixels
This fixes an issue where fonts would often paint at the wrong sizes
with device pixel ratios other than 1.0.
2023-03-15 11:43:54 +01:00
Matthew Olsson
7c0c1c8f49 LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
Kenneth Myhra
be958a14cf LibWeb: Use from_deprecated_fly_string() instead of from_utf8()
Use FlyString::from_deprecated_fly_string() in these instances instead
of FlyString::from_utf8(). As we convert to new FlyString/String we want
to be aware of these potential unnecessary allocations.
2023-03-11 18:32:33 +00:00
Andreas Kling
8a48246ed1 Everywhere: Stop using NonnullRefPtrVector
This class had slightly confusing semantics and the added weirdness
doesn't seem worth it just so we can say "." instead of "->" when
iterating over a vector of NNRPs.

This patch replaces NonnullRefPtrVector<T> with Vector<NNRP<T>>.
2023-03-06 23:46:35 +01:00
Matthew Olsson
c0b2fa74ac LibWeb: Fix a few const-ness issues 2023-03-06 13:05:43 +00:00
Matthew Olsson
bab883bf8e LibJS+LibWeb: Add a bunch of missing includes 2023-03-06 13:05:43 +00:00
Andreas Kling
7e76a51cb0 LibWeb: Rename Layout::InitialContainingBlock to Layout::Viewport
The name "initial containing block" was wrong for this, as it doesn't
correspond to the HTML element, and that's specifically what it's
supposed to do! :^)
2023-02-28 12:21:56 +01:00
Aliaksandr Kalenik
6092d81e4d LibWeb: Stop overflow clip box aggregation on reached stacking context 2023-02-24 20:55:40 +01:00
Aliaksandr Kalenik
87fa1c5e66 Revert "LibWeb: Fix clip of hidden overflow..."
This reverts commit eb1ef59603c13c43b87c099c43c4d118dc8441f6.

The idea of saving clip box to apply it to handle `overflow: hidden`
turned out to break painting if box is painted before it's containing
block (it is possible if box has negative z-index).
2023-02-24 20:55:40 +01:00
Andreas Kling
f11899f885 LibWeb+LibIDL: Fix (or paper over) various const-correctness issues
There's definitely stuff to iterate on here, but this takes care of
making the libraries compile with stricter RP and NNRP.
2023-02-21 00:54:04 +01:00
Sam Atkins
1c77867c78 LibWeb: Port FontCache to new Strings 2023-02-19 00:51:16 +01:00
Aliaksandr Kalenik
05b5a3bfba LibWeb: Transform translate() values to device pixels before painting 2023-02-19 00:43:40 +01:00
Linus Groh
2ad9c1fd6c LibWeb: Re-implement checkbox painting using the UA stylesheet
The checkbox provided by ClassicStylePainter is not scaling-aware and
generally unflexible, instead use the UA default stylesheet with a
handful of properties, the same way we already style buttons and text
inputs.

Thanks to Xexxa for the nice checkmark image!

Co-Authored-By: Xexxa <93391300+Xexxa@users.noreply.github.com>
2023-02-12 00:15:52 +00:00
Aliaksandr Kalenik
ac440e6c0e LibWeb: Scale font size to device pixels 2023-02-11 20:59:13 +00:00
Andreas Kling
7c607462a4 LibGfx+LibWeb: Store radii as FloatSize rather than FloatPoint
Radii are sizes, not points. This becomes important when mapping them
through a 2D transform.
2023-02-10 23:33:16 +01:00
Aliaksandr Kalenik
2649bc737f LibWeb: Use device pixels for transform rect of stacking context 2023-02-10 15:38:54 +01:00
MacDue
63b11030f0 Everywhere: Use ReadonlySpan<T> instead of Span<T const> 2023-02-08 19:15:45 +00:00
Tim Schumacher
82a152b696 LibGfx: Remove try_ prefix from bitmap creation functions
Those don't have any non-try counterpart, so we might as well just omit
it.
2023-01-26 20:24:37 +00:00
Aliaksandr Kalenik
08f217526a LibWeb: Use rect of containing block instead of parent to clip overflow
Move overflow clipping from `before_children_paint` into separate
method and call this method on containing block instead of parent.

Example that got fixed:
```html
<!DOCTYPE html><html><head><style>
    * {
      border: 2px solid black;
    }
    body {
      overflow: hidden;
    }
    .inner {
      position: absolute;
      width: 100px;
      height: 100px;
      background: lime;
    }
</style></head><body><div class=inner></div>
```
2023-01-25 10:44:58 +01:00
Aliaksandr Kalenik
ee4ba7617c LibWeb: Fix clip of hidden overflow when translated boxes are involved
There is a problem with current approach where overflow clip rectange is
calculated by aggregating intersection of absolute padding boxes of
boxes in containing block chain that resulting rectangle doesn't
respect transform properties.

To solve this problem `PaintableBox` is changed to store clip rectangle
saved from painter because it does respect transform properties of all
previously applied clip rectangles.
2023-01-25 10:44:58 +01:00
Andreas Kling
3dd006f719 LibWeb: Move scroll state from Layout::BlockContainer to Layout::Box
Let's allow any box to be scrollable, not just block containers.
2023-01-24 11:44:03 +01:00
Andreas Kling
51555dea7c LibWeb: Make Layout::Node::containing_block() return a Layout::Box
Containing blocks can be formed by boxes that aren't block containers,
so let's make this return a Box and work towards type correctness here.
2023-01-24 11:44:03 +01:00
Aliaksandr Kalenik
802d9336f0 LibWeb: Use CSS Pixels for overflow clip rect 2023-01-23 10:21:23 +01:00
Andreas Kling
811b8a25c2 LibWeb: Make Paintable visit its cached containing block pointer
This was *probably* already safe, but there's no harm in making sure
the cached pointer gets marked during GC.
2023-01-11 14:36:27 +01:00
Andreas Kling
6b4062ab61 LibWeb: Make a handful of paintable leaf classes final 2023-01-11 14:03:25 +01:00
Andreas Kling
4d401bf796 LibWeb: Make the paint tree GC-allocated
This simplifies the ownership model between DOM/layout/paint nodes
immensely by deferring to the garbage collector for figuring out what's
live and what's not.
2023-01-11 12:55:00 +01:00
MacDue
c8c065b6b0 LibWeb+LibGfx: Migrate (most of) the CSS gradient painting to LibGfx
This moves the CSS gradient painting to the painter creating:

 - Painter::fill_rect_with_linear_gradient()
 - Painter::fill_rect_with_conic_gradient()
 - Painter::fill_rect_with_radial_gradient()

This has a few benefits:
 - The gradients can now easily respect the painter scale
 - The Painter::fill_pixels() escape hatch can be removed
 - We can remove the old fixed color stop gradient code
    - The old functions are  now just a shim
 - Anywhere can now easily use this gradient painting code!

This only leaves the color stop resolution in LibWeb (which is fine).
Just means in LibGfx you have to actually specify color stop positions.

(Also while here add a small optimization to avoid generating
excessively long gradient lines)
2023-01-10 10:25:58 +01:00
martinfalisse
ce0f41b9fb LibWeb+WebContent: Use new String class in CSS::StyleValue
Converts uses of DeprecatedString to String in StyleValue, and patches
surrounding files that depend on these functions.
2023-01-09 11:09:31 +01:00
MacDue
93737a4b00 LibWeb: Return floats from color stop resolution functions
These don't deal with pixels so should not return CSSPixels. This
removes one suspicious looking cast.
2023-01-05 19:56:43 +01:00
Sam Atkins
8cc0bdf777 LibWeb: Resolve Lengths to CSSPixels 2023-01-05 17:42:31 +01:00
Sam Atkins
13b1952929 LibWeb: Convert AbstractImageStyleValue to new pixel units 2023-01-05 17:42:31 +01:00
Sam Atkins
02cd853eee LibWeb+Browser+WebContent: Convert BoxModelMetrics to new pixel units 2023-01-05 17:42:31 +01:00
Sam Atkins
65cdf89a8b LibWeb: Convert Layout Boxes to new pixel units 2023-01-05 17:42:31 +01:00
Sam Atkins
affc8a22ca LibWeb+WebContent: Convert BrowsingContext to new pixel units
This fixes a few glitches. We no longer give the page double the width
it should have, and we mark the correct area of the page as needing
repainting.
2023-01-05 17:42:31 +01:00
martinfalisse
d467a0a730 LibWeb: Use the layout_state border values when drawing borders
This will be useful for conditionally drawing borders in the
TableFormattingContext.
2023-01-03 20:02:47 +01:00
Timothy Flynn
88d5fd4b73 LibWeb: Paint repeating background images over entire paint box
We were previously missing the bottom- and right-most pixels. This fixes
the errant red line showing on the Acid2 forehead.
2022-12-31 20:16:59 +01:00
MacDue
2b1342b120 LibWeb: Remove done gradient painting TODO
This code is already generalised to every gradient in existence.
2022-12-25 15:35:31 +01:00
MacDue
f2fe3245cf LibWeb: Speed up gradient painting quite a lot
Previously gradient painting was dominated by the clipping checks in
Painter::set_pixel(). This commit changes gradient painting to use the
new Painter::fill_pixels() function (which does all these checks outside
the hot loop).

With this change gradient painting drops from 96% of the profile to 51%
when scrolling around on gradients.html. A nice 45% reduction :^)
2022-12-25 15:35:31 +01:00