Commit graph

62301 commits

Author SHA1 Message Date
Jason Fairchild
afaaa23c70 Documentation: Add automake as dependency on Arch, Fedora and openSUSE 2024-07-03 23:26:04 -06:00
Daeraxa
cf64118821 Documentation: Add libavcodec-free-devel for Fedora build 2024-07-03 20:06:13 -06:00
Tim Ledbetter
e76ad9492e LibWeb: Elide boundary checks when constructing find in page ranges
Previously, unnecessary boundary checks were being done when
constructing the range objects used to represent find in page matches.
These checks are no longer performed leading to a significant speedup
when performing find in page queries on pages containing a lot of text.
2024-07-03 15:35:14 +02:00
Tim Ledbetter
156c1083e9 LibWeb: Cache text blocks used by find in page
The first step of the find in page algorithm is to walk the layout tree
of each document on the page and construct a list of strings against
which to search for matches.

Previously, this was being done for each new query, even when the
page content hadn't been updated. The output of this process is now
cached in the viewport node of the associated document. This ensures
that this process is no longer repeated unnceessarily.
2024-07-03 15:35:14 +02:00
Victor Tran
31698281b6 LibWeb: Stop deadlocking on unit tests
Unit tests on macOS deadlock because the WebContent process is waiting
for the next opportunity to render before a screenshot is taken. For
some reason unknown to myself, this opportunity never arrives. In
order to not deadlock, screenshot requests are now also processed
separately from rendering.
2024-07-03 15:01:03 +02:00
Samuel Eisenhandler
7de669dc07 LibWebView: Append remaining source after consuming all tokens
Since "Character" tokens do not have an "end position", viewing source
drops the source contents following the final non-"Character" token.

By handling the EOF token and breaking out of the loop, we avoid this
issue.
2024-07-03 08:59:53 -04:00
Andrew Kaster
d220cf3abd CMake: Add a command for codesigning with the get-task-allow entitlement
This allows developers on macOS to open Ladybird.app in Instruments.

Add some documentation for how to use the command as well. It is enabled
automatically when CMAKE_BUILD_TYPE is not Release or RelWithDebInfo.
2024-07-02 16:57:51 -06:00
Andrew Kaster
3cdd4fb769 Meta+CMake: Use lldb on macOS for debugging 2024-07-02 16:57:51 -06:00
Aliaksandr Kalenik
72b4d44d07 LibWeb: Reschedule HTML event loop processing if navigable needs repaint
This is an attempt to fix the hanging CI on macOS caused by some
screenshot requests being stuck unprocessed. With this change, we at
least make sure that the HTML event loop processing, which triggers
repainting, will happen as long as there are navigables that need to be
repainted.
2024-07-02 20:33:45 +02:00
Kevin Meyer
8a7afffdd3 Ladybird/AppKit: Enable reload action
Is necessary, since history navigation was refactored
2024-07-02 13:44:48 -04:00
Nicolas Danelon
af90978454 UI/AppKit: Make the header buttons more accessible
By Setting setBordered propperty on header buttons to `Yes` this
path makes the whole button clickable. Previously the only the
icon was clickable, now it's easy to click.
2024-07-02 09:17:20 -04:00
doctortheemh
5f06594bbd LibCore: Include full definition for LocalSocket
clang 19 (git) complains that LocalSocket is an incomplete type
and errors out. Including the full definition fixes the build.
2024-07-02 10:27:45 +02:00
Harm133
09f76098b0 Documentation: Fix dead link in Qt creator page 2024-07-01 21:15:22 -04:00
Bastiaan van der Plaat
bff6c0680a LibWeb/Geometry: Make DOMRect doubles unrestricted 2024-07-01 21:30:52 +01:00
Andrew Kaster
55c1b5d1f4 LibWeb: Use double as the argument for AnimationFrameCallbacks
This avoids an unecessary lossy conversion for the current time from
double to i32. And avoids an UBSAN failure on macOS that's dependent
on the current uptime.
2024-07-01 14:29:45 -06:00
Aliaksandr Kalenik
bce7b24cfb LibWeb: Fix painting of paths with storke-width=0 in Skia painter
From SkPaint.h:
"Sets the thickness of the pen used by the paint to outline the shape.
A stroke-width of zero is treated as "hairline" width. Hairlines are
always exactly one pixel wide in device space (their thickness does not
change as the canvas is scaled)."

While we expect stroke-width=0 to simply not be painted.
2024-07-01 18:17:08 +02:00
Aliaksandr Kalenik
877adcc021 LibWeb: Use CornerRadii struct in FillRectWithRoundedCorners command
This makes it consistent with other commands.
2024-07-01 18:17:08 +02:00
Aliaksandr Kalenik
eba33b964e LibWeb: Remove unneeded Web namespace usage in TraversableNavigable.cpp 2024-07-01 18:17:08 +02:00
Aliaksandr Kalenik
3f97f73316 LibWeb: Add m_ prefix to surface member in SkiaSurface 2024-07-01 18:17:08 +02:00
Aliaksandr Kalenik
330d5996ed LibWeb: Fix Skia painter to close paths more correctly
Start point was incorrectly passed into `close_subpath_if_needed()` as
end point, which led to all subpaths being closed.
2024-07-01 18:17:08 +02:00
lalitrn44
2248ea1ae3 Documentation: Add steps to install clang 2024-07-01 10:15:58 -06:00
Andrew Kaster
002bef8635 AK+CMake: Use the find module to find the correct backtrace(3) header
As recommended by the CMake docs, let's tolerate systems or setups that
don't have backtrace(3) in the `<execinfo.h>` header file, such as those
using libbacktrace directly.
2024-07-01 10:15:24 -06:00
Andrew Kaster
29b4f21c7b WebContent: Add shutdown_server IPC call to request process exit
This ensures that removing the last view from a WebContentClient will
close its associated process, assuming the WebContent process is not
hung. A more drastic measure will be needed to trigger forcefully
killing the process when it doesn't respond to this request.
2024-07-01 18:10:56 +02:00
Andrew Kaster
4cc3d598f9 LibWebView+LibCore: Manage process lifecycle using a SIGCHLD handler
This large commit also refactors LibWebView's process handling to use
a top-level Application class that uses a new WebView::Process class to
encapsulate the IPC-centric nature of each helper process.
2024-07-01 18:10:56 +02:00
Andrew Kaster
3dea602d92 LibProtocol: Don't crash when RequestServer exits 2024-07-01 18:10:56 +02:00
Andrew Kaster
598144d09c Ladybird/AppKit: Apply __weak until LadybirdWebView gets destroyed
A __weak a day keeps the reference cycle away.
2024-07-01 18:10:56 +02:00
Andrew Kaster
53f9e68799 Ladybird/Qt: Add Qt implementation of register/unregister_signal 2024-07-01 18:10:56 +02:00
Andrew Kaster
99f4fce12b Ladybird: Add CFEventLoop implementation of register/unregister_signal 2024-07-01 18:10:56 +02:00
Ali Mohammad Pur
a4eb46fcca LibWasm/WASI: Don't convert enums and u8s into i64
Doing so results in incorrect values being created, ultimately leading
to traps or errors.

(cherry picked from commit f6c3b333334f7bb5314a844804cb259cf277005e)
2024-07-01 00:05:21 +02:00
Aliaksandr Kalenik
7181c3f2ea Everywhere: Limit layout text fragments to use one font for all glyphs
The ChunkIterator now limits a chunk to using only one font (before, it
was possible to have a chunk with >1 font, when `unicode-range` CSS
property is used).

This change allows us to reduce some complexity in the text shaping and
painting code and makes us compatible with the APIs in Skia and
HarfBuzz.
2024-06-30 19:23:24 +02:00
Tim Ledbetter
b95c05b611 UI/Qt: Ignore tab bar middle clicks if the user didn't click on a tab
This avoids a segfault that would previously occur when middle clicking
to close a tab if only 1 tab was open.
2024-06-30 13:09:39 +02:00
Aliaksandr Kalenik
d5926a3231 LibGfx+LibWeb: Rename Gfx::VectorFont to Gfx::Typeface
Typeface is a more widely used name for the data represented by
class previously named VectorFont.

Now:
- Typeface represents decoded font that is not ready for rendering
- ScaledFont represents the combination of typeface and size for
  rendering
2024-06-30 13:09:23 +02:00
Aliaksandr Kalenik
e2726ce8e4 LibGfx+LibWeb: Remove Gfx::Typeface
...and use VectorFont directly in FontDatabase.
2024-06-30 13:09:23 +02:00
Tim Ledbetter
bdaa7f0e8e LibWeb: Implement the HTMLTrackElement.kind attribute
This reflects the HTML `kind` attribute.
2024-06-30 13:08:42 +02:00
Tim Schumacher
0c4f257021 Meta: Remove myself from CODEOWNERS
I don't expect Ladybird to be the upstream of any of these, so it's not
much use to be notified on any unrelated changes.
2024-06-29 20:26:20 -06:00
luozhiya
8c09b9a2e9 Meta: Handle LAGOM_EXECUTABLE in gdb command properly 2024-06-28 22:21:54 -06:00
Aliaksandr Kalenik
4cdc5d2ce9 LibWeb: Add text shadows support in Skia painter 2024-06-28 20:53:39 +02:00
Aliaksandr Kalenik
b27cf1be49 LibWeb: Remove fragment_baseline from PaintTextShadow
Translate text_rect instead, so the struct doesn't have to carry
additional member.
2024-06-28 20:53:39 +02:00
Aliaksandr Kalenik
ebc282207b LibWeb: Save unscaled glyph run in PaintTextShadow command
Implements the same optimization we already have for DrawGlyphRun by
saving unscaled glyph run and scale factor in a painting command, which
allows to avoid copying of glyphs vector to apply scaling during
recording.
2024-06-28 20:53:39 +02:00
Timothy Flynn
6369737676 LibWeb: Ensure SkiaSurface is fully defined before it is allocated
LLVM 18 on macOS correctly errs when we try to allocate an incomplete
SkiaSurface object.
2024-06-28 12:59:10 -04:00
Timothy Flynn
d9470d6a93 Meta: Add a debug build CMake preset
Since the default mode now only builds release vcpkg libraries, having
an easy-to-create debug build will be convenient.
2024-06-28 12:10:59 -04:00
Timothy Flynn
1c2aef9255 Meta: Only build vcpkg dependencies in release mode by default
We currently build debug and release versions of vcpkg dependencies. We
will most commonly only need the release version, so let's default to
that to approximately halve our dependency build time.
2024-06-28 12:10:59 -04:00
Andreas Kling
cf0912c700 LibIPC: Remove unused AK::Formatter for IPC::Connection 2024-06-28 17:11:24 +02:00
Andreas Kling
4fe21e6d87 LibIPC: Move stuff from Connection.h to .cpp and reduce #include count 2024-06-28 17:11:24 +02:00
Andreas Kling
6d9c4d852d LibIPC: Move more of Connection::try_parse_messages() to ConnectionBase
By moving this up to ConnectionBase, we have less custom code for each
templated subclass, and it gets a little easier to edit the code since
you don't have to rebuild as much when making changes.
2024-06-28 17:11:24 +02:00
Andreas Kling
f4d40c292b LibIPC: Remove no-longer-used DeferredInvoker abstraction 2024-06-28 17:11:24 +02:00
Andreas Kling
4db05ecf69 LibWeb: Set the correct prototype for SVGAElement instances 2024-06-28 17:10:52 +02:00
Andreas Kling
a84261ee7a Tests/LibWeb: Add test that dumps all global JS constructors 2024-06-28 17:10:52 +02:00
Aliaksandr Kalenik
79acb998e1 LibCore+LibWeb: Use Metal backend for Skia painter on macOS
If Metal context and IOSurface are available, Skia painter will use
Ganesh GPU backend on macOS, which is noticeably faster than the default
CPU backend.

Painting pipeline:
1. (WebContent) Allocate IOSurface for backing store
2. (WebContent) Allocate MTLTexture that wraps IOSurface
3. (WebContent) Paint into MTLTexture using Skia
4. (Browser) Wrap IOSurface into Gfx::Painter and use
   QPainter/CoreGraphics to blit backing store into viewport.

Things we should improve in the future:
1. Upload textures for images in advance instead of doing that before
   every repaint.
2. Teach AppKit client to read directly from IOSurface instead of
   copying.
2024-06-28 14:25:34 +02:00
Aliaksandr Kalenik
8de9516272 Ladybird: Account for backing store bitmap pitch
In the upcoming changes, Skia painter will be switched to Metal backend,
so we can no longer assume `pitch = width * 4` while reading Gfx::Bitmap
that wraps IOSurface populated by writing into MTLTexture that has
padded scanlines.
2024-06-28 14:25:34 +02:00