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

735 commits

Author SHA1 Message Date
ericLemanissier
14eefedbf9 LibGfx: JPGLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
030d380ed2 LibGfx: GIFLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
d0ddbf4aad LibGfx: DDSLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
ericLemanissier
a6d710612f LibGfx: BMPLoader: Propagate errors properly
Use our normal error propagation mechanism instead of returning booleans
2022-12-23 16:48:30 -05:00
FrHun
4236177e4f LibGfx: Preserve scale on Bitmap crop 2022-12-23 12:16:46 +00:00
FrHun
cf47dae6a5 LibGfx: Repair SharableBitmap scaling support 2022-12-23 12:16:46 +00:00
FrHun
df30440117 LibGfx: Add NearestFractional scaling type to painter
This is useful for cases where you want to avoid scaling artifacts.
2022-12-23 12:16:46 +00:00
Sam Atkins
29733e65f8 AK+Everywhere: Replace all Bitmap::must_create() uses with ::create()
Well, *someone* has to add some more FIXMEs to keep FIXME Roulette
going. :^)
2022-12-22 15:48:53 +01:00
Andreas Kling
abad197884 LibGfx/OpenType: Read "glyf" table header using a C++ struct 2022-12-21 08:44:22 +01:00
Andreas Kling
2185a98b36 LibGfx/OpenType: Clean up "kern" table reading
- Use C++ structs for the header and subtable headers.
- Use AK::binary_search to search for kerning pairs.
2022-12-21 08:44:22 +01:00
Andreas Kling
afba67f3a2 LibGfx/OpenType: Clean up "name" table reading
Use a C++ struct to read out the header, and make the rest of the code
more idiomatic.
2022-12-21 08:44:22 +01:00
Andreas Kling
5d8feab131 LibGfx/OpenType: Read "os2" table using a C++ struct 2022-12-21 08:44:22 +01:00
Andreas Kling
e6551e685d LibGfx/OpenType: Clean up "htmx" table reading
Use a C++ struct to read out the LongHorMetrics, and make the rest of
the code more idiomatic.
2022-12-21 08:44:22 +01:00
Andreas Kling
f04a878e55 LibGfx/OpenType: Read "maxp" table using a C++ struct 2022-12-21 08:44:22 +01:00
Andreas Kling
d201acf102 LibGfx/OpenType: Read "hhea" table using a C++ struct 2022-12-21 08:44:22 +01:00
Andreas Kling
61be11960b LibGfx/OpenType: Read "head" table using a C++ struct
Instead of fidgeting with offsets and manually reading out big-endian
values, we now declare the "head" table as a C++ struct and use the
BigEndian<T> template to deal with byte order.
2022-12-21 08:44:22 +01:00
Andreas Kling
23638a3b3a LibGfx/OpenType: Add spec links to classes representing OpenType tables 2022-12-21 08:44:22 +01:00
Andreas Kling
f982400063 LibGfx: Rename TTF/TrueType to OpenType
OpenType is the backwards-compatible successor to TrueType, and the
format we're actually parsing in LibGfx. So let's call it that.
2022-12-21 08:44:22 +01:00
MacDue
6c27f2c071 LibGfx: Don't blend opaque pixels 2022-12-20 11:03:18 +01:00
MacDue
e3c64a0858 LibGfx: Remove unnecessary divides in Color::mixed_with()
This is mathematically the same thing, but the compiler can't optimize
these out without -Ofast, so let's give it a hand.
2022-12-20 11:03:18 +01:00
Jelle Raaijmakers
8c094699db LibGL: Implement glLightModel integer normalization
For the ambient light model, integers need to be remapped to a range of
`-1.` through `1.`. Add the `+` and `-` operators to `VectorN` to make
it a bit easier to normalize 4 values at once.
2022-12-20 10:42:31 +01:00
Bruno Conde
7e9019a9c3 LibGfx: Support BMP favicons with less than 32 bpp
Adapt BMPImageDecoderPlugin to support BMP images included in ICOns.
ICOImageDecoderPlugin now uses BMPImageDecoderPlugin to decode all
BMP images instead of it's own ad-hoc decoder which only supported
32 bpp BMPs.
2022-12-20 10:26:55 +01:00
Liav A
1ea10bcb73 LibGfx: Split VERIFY statements in various Bitmap class methods
This could aid debugging in many cases, and it doesn't break any
functionality, so let's ensure it's easier to understand in which way a
provided value is out of range.
2022-12-19 11:05:44 +00:00
Cygnix Proto
806a55eda1 LibGfx+Userland: Make Gfx::SystemTheme propagate errors
This patch introduces error propagation to Gfx::SystemTheme to remove
instances of release_value_but_fixme_should_propagate_errors().

Userland applications that have been affected by this change have been
updated to utilise this propagation and as a result 4 such instances of
the aforementioned method have been removed.
2022-12-14 18:25:28 +00:00
Rodrigo Tobar
e818c955b3 LibGfx: Allow creating Bitmaps from ReadonlyBytes objects
The existing try_create_from_serialized_byte_buffer function accepts a
ByteBuffer, but in reality it requires only a ReadonlyBytes, since
internally the only thing it does is calling buffer.bytes(). There is
thus no reason to have a function that simply accepts ReadonlyBytes, and
implement the former in terms of the newer.
2022-12-10 10:49:03 +01:00
Moustafa Raafat
ae2abcebbb Everywhere: Use C++ concepts instead of requires clauses 2022-12-09 11:25:30 +00:00
FrHun
42feb0233a LibGfx: Make Rect by orientation methods generic 2022-12-09 00:25:30 +01:00
Andreas Kling
b3b51a5001 LibGfx: Use a FixedArray for the dummy scanline in PNGWriter
PNGWriter sets up one dummy scanline with the same width as the other
scanlines in order to allow addressing the "previous scanline" without
complicating the code.

By using a FixedArray instead of a VLA, we sidestep the risk of stack
overflow and instead get something that can signal OOM.
2022-12-08 13:01:11 +00:00
Andreas Kling
e19c8897ee LibGfx: Propagate errors that occur internally in PNGWriter
This patch basically uses the TRY() macro throughout PNGWriter instead
of relying on the MUST()'ing wrappers in Vector and ByteBuffer.

One FIXME was killed in the making of this patch. :^)
2022-12-08 13:01:11 +00:00
Andreas Kling
d88c7fee32 LibGfx+Userland: Make PNGWriter::encode() return ErrorOr<ByteBuffer>
This is a first step towards handling PNG encoding failures instead of
just falling over and crashing the program.

This initial step will cause encode() to return an error if the final
ByteBuffer copy fails to allocate. There are more potential failures
that will be surfaced by subsequent commits.

Two FIXMEs were killed in the making of this patch. :^)
2022-12-08 13:01:11 +00:00
Sam Atkins
83f31cb4a7 LibGfx: Add int overloads for (AntiAliasing)Painter float methods
Without this change, the upcoming LibWeb pixel types will require a
silly doubled conversion in some places.

eg: `some_rect.to_type<int>().to_type<float>()`

With these overloads, we can get away with `some_rect.to_type<int>()`.
2022-12-08 12:46:03 +00:00
MacDue
27fae78335 Meta+Userland: Pass Gfx::IntSize by value
Just two ints like Gfx::IntPoint.
2022-12-07 11:48:27 +01:00
MacDue
e011eafd37 Meta+Userland: Pass Gfx::FloatPoint by value
Just a small 8-byte value like Gfx::IntPoint.
2022-12-07 11:48:27 +01:00
MacDue
7be0b27dd3 Meta+Userland: Pass Gfx::IntPoint by value
This is just two ints or 8 bytes or the size of the reference on
x86_64 or AArch64.
2022-12-07 11:48:27 +01:00
MacDue
bbc149ebb9 Meta+Userland: Pass Gfx::Color by value
Gfx::Color is always 4 bytes (it's just a wrapper over u32) it's less
work just to pass the color directly.

This also updates IPCCompiler to prevent from generating
Gfx::Color const &, which makes replacement easier.
2022-12-07 11:48:27 +01:00
Linus Groh
57dc179b1f Everywhere: Rename to_{string => deprecated_string}() where applicable
This will make it easier to support both string types at the same time
while we convert code, and tracking down remaining uses.

One big exception is Value::to_string() in LibJS, where the name is
dictated by the ToString AO.
2022-12-06 08:54:33 +01:00
Linus Groh
6e19ab2bbc AK+Everywhere: Rename String to DeprecatedString
We have a new, improved string type coming up in AK (OOM aware, no null
state), and while it's going to use UTF-8, the name UTF8String is a
mouthful - so let's free up the String name by renaming the existing
class.
Making the old one have an annoying name will hopefully also help with
quick adoption :^)
2022-12-06 08:54:33 +01:00
Linus Groh
d26aabff04 Everywhere: Run clang-format 2022-12-03 23:52:23 +00:00
MacDue
40e978df85 LibGfx: Fix some more antialiased line off-by-ones
Turns out most things expect lines to include the endpoint,
e.g. 0,0 -> 3,0 is a 4px long line. But the fill_path() implementation
seems to expect the line to be the distance between the two points
(so the above example is a 3px line instead).

This now adds an option to pick between PointToPoint line length or
Distance line length and uses the latter for fill_path().
2022-12-03 15:36:58 +00:00
MacDue
acc0fceaae LibGfx: Remove some unused AntiAliasingPainter methods 2022-12-03 15:36:58 +00:00
MacDue
b85af4e9bf LibGfx: Add some AntiAliasingPainter FIXMEs
Also fixup the style on some comments.

See #16270... Hopefully someone will land on these :^)
2022-12-03 15:36:58 +00:00
Andreas Oppebøen
29de0dbea5 LibGfx: Add missing color LightBlue
Will be used in a follow-up commit as alternative to Blue
2022-11-30 12:56:29 +00:00
MacDue
b8492006da LibGfx: Disable line intersection stroking for 1px lines
1px lines are already connected, so this just makes things look worse
and is often painting in the wrong spot anyway.
2022-11-30 07:58:44 +01:00
MacDue
8dfe43273c LibGfx: Fix off-by-one for antialiased line length
Previously the line did not include the endpoint.
2022-11-30 07:58:44 +01:00
MacDue
754b8a643d LibGfx: Remove unnecessary path members from AntiAliasingPainter
m_rotated_rectangle_path was unused and m_intersection_edge_path was
cleared/free'd each time it was used. So sticking in the class just
bloats the size.
2022-11-30 07:58:44 +01:00
lanmonster
2b7aa4a971 LibGfx+LibGUI: Use constant for line spacing instead of magic number 2022-11-30 07:57:21 +01:00
MacDue
f274f04e35 LibGfx: Handle alpha in color distance
This gives a slightly more reasonable result when comparing different
colors with low alpha values.

For example comparing white with alpha 100 to transparent:

	Before
		distance: 0.78
	After
		distance: 0.07

   (Where distance is between 0 and 1)

The result is unchanged for comparing colors without alpha values.
2022-11-29 11:08:50 +01:00
MacDue
613963cbce LibGfx: Don't bother painting transparent lines 2022-11-29 11:08:50 +01:00
MacDue
0e65de2e11 LibGfx: Don't write blended pixel if the alpha is zero 2022-11-29 11:08:50 +01:00
MacDue
13beed1722 LibGfx: Preseve original alpha when applying tint filter 2022-11-27 20:35:22 +01:00