Tim Schumacher
e9dda2a5f8
AK: Provide a default set of Traits for const
types
2023-11-09 10:05:51 -05:00
Tim Schumacher
a2f60911fe
AK: Rename GenericTraits to DefaultTraits
...
This feels like a more fitting name for something that provides the
default values for Traits.
2023-11-09 10:05:51 -05:00
Timothy Flynn
a098b6e371
LibGfx: Ensure const-correctness when reading from the GPOS byte stream
...
Otherwise, the call to `read_in_place` gives the following error:
Tried to obtain a non-const span from a read-only FixedMemoryStream
2023-11-08 22:26:36 +00:00
Lucas CHOLLET
5e2b049de8
LibCompress/LZW: Use a LittleEndianBitStream
...
No need to manually implement bit stream logic when we have a helper for
this task.
2023-11-08 18:19:34 +01:00
Lucas CHOLLET
00ad8419cf
LibGfx+LibCompress: Extract the LZW decoder and move it to LibCompress
...
Let's put this state-of-the-art decoder from the 80's in its own file in
order to reuse it with other formats, such as TIFF or PDF.
2023-11-08 18:19:34 +01:00
Lucas CHOLLET
a86c0ac003
LibGfx/GIF: Use east-side const
2023-11-08 18:19:34 +01:00
Tim Ledbetter
c1d7a51391
LibGfx/ICC: Avoid buffer overrun when creating TextDescriptionTagData
...
We now validate that the offsets used cannot overflow, preventing
possible buffer overruns.
2023-11-08 09:37:30 +01:00
Tim Ledbetter
b96a5f4265
LibGfx/ILBM: Avoid overflow when creating bitplane data buffer
2023-11-08 09:36:01 +01:00
Tim Ledbetter
5e1017bcf1
LibGfx/ILBM: Avoid buffer overrun when reading bitplane data
2023-11-08 09:36:01 +01:00
Tim Ledbetter
f56ae8c0e9
LibGfx/ILBM: Ensure CMAP chunk size matches expected value
...
The color map should be 3 bytes per pixel and should contain
`2^nPlanes` pixels. We now return an error if the color map isn't the
size we expect.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
61eb754f63
LibGfx/ILBM: Add validation for header fields
...
We now exit early if a header field is set to a value that we don't
currently support.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
bed7b33daa
LibGfx/ILBM: Don't attempt to decode a BODY chunk without a color map
...
While this isn't disallowed by the specification, it is not something
we currently support. Instead of crashing we now return an error in
this case.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
75731f9c50
LibGfx/ILBM: Avoid buffer overruns when decompressing data
2023-11-08 09:36:01 +01:00
Tim Ledbetter
ae6c39e501
LibGfx/ILBM: Ensure decompressed body chunk data is the correct length
2023-11-08 09:36:01 +01:00
Sam Atkins
21f2f09df4
LibGfx: Remove bit casting in OpenType CBDT table after construction
2023-11-08 09:34:09 +01:00
Sam Atkins
4e944e676b
LibGfx: Use to_underlying() to compare ValueFormat enum values
...
This means we no longer do a bitwise and of a u16 and i16, which feels a
little sketchy.
2023-11-08 09:34:09 +01:00
Sam Atkins
74e5fff77a
LibGfx: Reduce bit casting in OpenType GPOS table after construction
...
Read the basic lists as spans, and use those when looking for kerning.
Kerning lookup still does bit-casting for now. As for CBLC, the data is
a bit complicated.
2023-11-08 09:34:09 +01:00
Sam Atkins
2a4d7a193e
LibGfx: Define and use OpenType data types for struct definitions
...
A few closely-related changes:
- Move our definitions of the OpenType spec's "data types" into their
own header file.
- Add definitions for the integer types there too, for completeness.
(Plus Uint16 matches the spec term, and is less verbose than
BigEndian<u16>.)
- Include Traits for the non-BigEndian types so that we can read them
from Streams. (BigEndian<integer-type> already has this.)
- Use the integer types in our struct definitions.
As a bonus, this fixes a bug in Hmtx, which read the left-side bearings
as i16 instead of BigEndian<i16>.
2023-11-08 09:34:09 +01:00
Sam Atkins
a28f035d76
LibGfx: Reduce bit casting in OpenType CBLC table after construction
...
The subtables are still read at use-time for now. I'm sure we could
build some kind of wrapper structures for them though.
2023-11-08 09:34:09 +01:00
Sam Atkins
3c7d654182
LibGfx: Remove bit casting in OpenType Kern table after construction
...
Do more checks at load time, including categorizing the subtables and
producing our own directory of them.
The format for Kern is a little complicated, so use a Stream instead of
manual offsets.
2023-11-08 09:34:09 +01:00
Sam Atkins
89b35c6dc8
LibGfx: Remove bit casting in OpenType Name table after construction
...
Store the name records as a span, and a separate bytes span for the
string data.
2023-11-08 09:34:09 +01:00
Sam Atkins
fe2e1a0282
LibGfx: Remove bit casting in OpenType OS2 table after construction
2023-11-08 09:34:09 +01:00
Sam Atkins
d4e1305413
LibGfx: Make OpenType versioned tables more consistent
...
Maxp had the shared fields duplicated, and OS2 embedded each version's
struct in the next. Instead, let's use inheritance to avoid duplicating
shared fields while still allowing them to be directly accessed.
While I'm at it, rename the Maxp and GPOS table structs to just be
VersionX_Y, because they're not ambiguous with anything else.
LibGfx: Rename GPOSHeader to HeaderVersion1_0
Because there's a version 1.1 as well, which we'll eventually want to
support.
2023-11-08 09:34:09 +01:00
Sam Atkins
75376d6834
LibGfx: Remove bit casting in OpenType Hmtx table after construction
...
Store the variable-length data in Spans instead.
2023-11-08 09:34:09 +01:00
Sam Atkins
cef4d4821b
LibGfx: Remove bit casting in OpenType Maxp table after construction
...
Store references to both versions of the struct in a Variant, and reject
versions we don't support.
2023-11-08 09:34:09 +01:00
Sam Atkins
e4b3ee09e2
LibGfx: Remove bit casting in OpenType Hhea table after construction
2023-11-08 09:34:09 +01:00
Sam Atkins
dcbe302f83
LibGfx: Remove bit casting in OpenType Head table after construction
2023-11-08 09:34:09 +01:00
Sam Atkins
72483673d2
LibGfx: Use ErrorOr to report failure to load OpenFont tables
2023-11-08 09:34:09 +01:00
Sam Atkins
1ab03ff963
LibGfx: Read OpenType table directory using structs and streams
2023-11-08 09:34:09 +01:00
Sam Atkins
5455ecf650
LibGfx: Remove OpenType::Font::m_buffer
...
At first glance this looks like it holds the memory that the various
slices point into... but it actually doesn't own that memory. Nobody
uses m_buffer, so it serves no purpose.
2023-11-08 09:34:09 +01:00
Sam Atkins
984a2c314b
LibGfx: Read OpenType TTCHeaderV1 as a struct
...
Also check that the requested font index actually exists in the font
collection.
2023-11-08 09:34:09 +01:00
Sam Atkins
1a6da4fbf2
LibGfx: Mark OpenType file data structs as packed, and assert sizes
...
Some of these are odd sizes. We managed not to insert padding because
BigEndian is itself marked as packed, but let's be explicit instead of
relying on that. :^)
2023-11-08 09:34:09 +01:00
Sam Atkins
dfa79ba6d8
LibGfx: Move implementation code for Tables.h into Tables.cpp
2023-11-08 09:34:09 +01:00
Lucas CHOLLET
81794df280
LibGfx/TIFF: Add support for images with PackBits compression
2023-11-08 09:28:36 +01:00
Lucas CHOLLET
472a886dfc
LibGfx/TIFF: Refactor the decoding loop
...
This is done to ease the introduction of the support of other
compressions.
2023-11-08 09:28:36 +01:00
Lucas CHOLLET
26a3be17c8
Userland: Register TIFF as a supported image file type
...
This includes both .tiff and .tif extensions.
2023-11-06 12:29:30 -07:00
Lucas CHOLLET
67c6af8cfe
LibGfx: Sort entries of ENUMERATE_IMAGE_FORMATS
2023-11-06 12:29:30 -07:00
Lucas CHOLLET
75caccafa4
LibGfx: Add a TIFF loader
2023-11-06 12:29:30 -07:00
Lucas CHOLLET
dc5bb5a4cc
LibGfx: Sort entries in the definition of ImagePluginInitializer
2023-11-06 12:29:30 -07:00
Aliaksandr Kalenik
efdbd8238e
LibGfx: Decouple glyph positions calculation from draw_text_run()
...
This change separates a part of the `draw_text_run()` function, which
is responsible for calculating the positions for glyphs that need to be
painted, into a separate function called `get_glyph_run()`.
It is a part of the preparation for text run painting using OpenGL,
where we can't immediately blit glyph bitmaps but instead need to
prepare a sequence of quads for them in advance.
2023-11-06 09:53:11 +01:00
Tim Ledbetter
438e9e146c
LibGfx/JPEG: Refill reservoir if necessary when discarding bits
...
This condition was hit 157 times out of the 109,233 JPEG images in the
Govdocs1 corpus. This change allows all of these
images to load correctly.
2023-11-05 09:01:15 +01:00
MacDue
50d33f79fa
LibGfx: Allow extracting paths from fonts and add Gfx::Path::text()
...
This updates fonts so rather than rastering directly to a bitmap, you
can extract paths for glyphs. This is then used to implement a
Gfx::Path::text("some text", font) API, that if given a vector font
appends the path of the text to your Gfx::Path. This then allows
arbitrary manipulation of the text (rotation, skewing, etc), paving the
way for Word Art in Serenity.
2023-11-05 02:46:46 +01:00
Tim Ledbetter
a6f9ad6012
LibGfx/OpenType: Ensure offsets are strictly less than the file size
...
Previously, an offset that was equal to the size of the file would
cause a crash.
2023-10-31 14:15:24 +01:00
Tim Ledbetter
9ed8c0b183
LibGfx/JPEG: Propagate errors when creating JPEGLoadingContext
...
This allows the JPEG fuzzer to make progress.
2023-10-29 21:39:29 +01:00
Andrew Kaster
86ce502ae2
LibGfx+Utilities: Add helpers to load vector fonts from Core::Resources
2023-10-29 13:12:28 -06:00
Andrew Kaster
286dc6df7f
LibGfx: Remove ability to load fonts directly from a file path
...
Users must now either pass a Core::Resource, a resource:// URI, or
a Core::MappedFile
2023-10-29 13:12:28 -06:00
Andrew Kaster
1567332e34
Userland+Tests: Remove uses of direct file loading for BitmapFont
...
Route them through Core::Resource APIs instead.
2023-10-29 13:12:28 -06:00
Andrew Kaster
d587bd0a04
LibGfx: Add helpers to load BitmapFont from Core::Resource
2023-10-29 13:12:28 -06:00
Andrew Kaster
897f4d05eb
LibGfx: Add abstraction to load BitmapFont from a FixedMemoryStream
...
We'll use this to load from a Core::Resource in a later commit.
2023-10-29 13:12:28 -06:00
Lucas CHOLLET
e721c74598
LibGfx: Provide an implementation for ImageDecoderPlugin::icc_data()
2023-10-29 07:21:10 +00:00