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

653 commits

Author SHA1 Message Date
Linus Groh
e1eb882b1c LibGfx: Add Emoji::emoji_for_code_point_iterator(Utf8CodePointIterator&)
In the common case of text rendering rather than getting the emoji
bitmap for a fixed number of code points, we don't know how many code
points make one emoji. As far as I can tell, the longest ones are up to
ten code points, so we try to consume all of them and do a lookup during
each iteration, and return the emoji for the longest chain of code
points. Quite basic and definitely room for improvement, but it works!
2022-02-23 21:53:30 +00:00
Linus Groh
514f3e9c74 LibGfx: Add Emoji::emoji_for_code_points(Span<u32> const&)
Not all emojis are just one code point, so the existing API is not
sufficient: Emoji::emoji_for_code_point(u32).
The file name for such emojis is simply each U+XXXX separated by an
underscore.
2022-02-23 21:53:30 +00:00
Michiel Visser
7dcfb82e16 LibGfx: Fix JPG decoding bug on rare grayscale images
Some grayscale JPG images might have the horizontal and vertical sample
factor set to 2. However, the macroblocks in these images are not
interleaved as they would be in color images.
2022-02-19 21:27:34 +01:00
Sam Atkins
8260135d4d LibCore+Everywhere: Return ErrorOr from ConfigFile factory methods
I've attempted to handle the errors gracefully where it was clear how to
do so, and simple, but a lot of this was just adding
`release_value_but_fixme_should_propagate_errors()` in places.
2022-02-16 19:49:41 -05:00
Andreas Kling
f7f7aa6986 LibGfx/PNG: Respect the tRNS chunk transparency with color type 2
For PNG color type 2 (TrueColor), if there's a tRNS chunk, it specifies
an R/G/B triplet in the image bit depth. This triplet acts as the
transparency value, and should yield transparent pixels wherever that
specific color value is present.

We now support this. :^)
2022-02-14 18:39:20 +01:00
Andreas Kling
5c7f11f1cd LibGfx/PNG: Collect tRNS (transparency chunk) info for all color types
The tRNS metadata is valid for color types 0, 2 and 3, so let's collect
it in each of those cases.

This ensures that we produce a bitmap with an alpha channel if needed.
2022-02-14 18:39:20 +01:00
Andreas Kling
aa679643c1 LibGfx: Remove unnecessary includes from PNGLoader.cpp 2022-02-14 18:39:20 +01:00
Andreas Kling
81216c51d1 LibGfx: Make Bitmap::has_alpha_channel() return true for RGBA8888 2022-02-14 18:39:20 +01:00
Steven Schmoll
d345a3689f LibGfx: Support color blending in Painter::draw_bitmap
This method is commonly used by bitmap text rendering. Adding support
for color blending enables support in the browser for text opacity using
their color property.
2022-02-14 12:49:19 +01:00
Filiph Sandström
8b7987be86 LibGfx: Allow changing the default font path 2022-02-13 21:25:59 +00:00
Sam Atkins
aa2f20fb60 LibGfx: Add Path::[horizontal,vertical]_path_to()
The SVG spec describes some path operations using these, so we might as
well have them. :^)
2022-02-11 21:38:27 +01:00
Itamar
22f835332a LibGfx: Add more syntax-related ColorRoles 2022-02-09 00:51:31 +01:00
thankyouverycool
89201b682b LibGfx: Return proper ColorRole for GutterBorders 2022-02-07 15:05:22 +00:00
Hendiadyoin1
fbb798f98c AK: Move integral log2 and exp to IntegerMath.h 2022-02-06 17:52:33 +00:00
Morten Larsen
951e4490fb LibGfx: Avoid inclusion of xmmintrin.h on non-X86 architectures
Gamma.h includes xmmintrin.h, which is X86-only. The file contains
code in other places that is compiled conditionally on __SSE__, so the
same macro is used to determine inclusion of the header.
2022-02-06 03:15:00 +00:00
Maciej
c8183f2651 LibGfx: Fail gracefully when trying to load invalid-sized HiDPI image 2022-02-05 23:28:06 +02:00
thankyouverycool
a593b83189 LibGfx+Applications: Add human readable name helper for fonts
This returns a more comprehensible name than raw weight and slope
metrics and is intended for use in UIs. Now displays human readable
font names in FontSettings, TerminalSettings and CharacterMap.
2022-02-01 10:06:26 +01:00
thankyouverycool
96895cd22c Everywhere: Fully qualify font names by including their slope
Fixes typefaces of the same weight but different slopes being
incorrectly returned for each other by FontDatabase.
2022-02-01 10:06:26 +01:00
thankyouverycool
87a149c9a4 LibGfx: Determine slope attributes for TrueTypeFonts from tables
First checks the OS/2 table for an oblique selection flag before
falling back on italic flags.
2022-02-01 10:06:26 +01:00
Daniel Bertalan
7d11edbe17 Userland: Fix unnecessary heap allocation of singleton objects
In order to avoid having multiple instances, we were keeping a pointer
to these singleton objects and only allocating them when it was null.

We have `__cxa_guard_{acquire,release}` in the userland, so there's no
need to do this dance, as the compiler will ensure that the constructors
are only called once.
2022-01-28 23:31:00 +01:00
thankyouverycool
f77ac3a73c LibGUI: Allow Buttons to set themselves as default
Several apps were implementing this behavior ad hoc. This provides
a standard API as well as a comfy visual cue for default return key
behavior.
2022-01-26 23:19:54 +01:00
Sam Atkins
45cf40653a Everywhere: Convert ByteBuffer factory methods from Optional -> ErrorOr
Apologies for the enormous commit, but I don't see a way to split this
up nicely. In the vast majority of cases it's a simple change. A few
extra places can use TRY instead of manual error checking though. :^)
2022-01-24 22:36:09 +01:00
Tobias Christiansen
ece59948c3 LibGfx: Expand TextAttributes with more information about underlining
This adds a seperate Color to be used for underlines as well as support
for different underline styles.
2022-01-23 15:48:27 +03:30
Tobias Christiansen
0277118cb4 LibGfx: Add Painter::draw_triangle_wave()
This patch adds support for drawing triangular waves.
For now those can only be horizontal, but as they are intended for
underlining text, it's an okay way to handle this.
2022-01-23 15:48:27 +03:30
Maciej
e0d3a8f6ce LibGfx: Fix stylistic issues in BitmapFont
* Apply some clang-tidy suggestions
* Convert to east-const
2022-01-22 00:26:23 +00:00
Maciej
8542d1da5a LibGfx: Always scale emojis to fit font height 2022-01-22 00:26:23 +00:00
Jesse Buhagiar
38fc7361ca LibGfx: Add ::xyz() swizzle operator to Vector4 2022-01-18 01:48:51 +02:00
Jesse Buhagiar
53ed93d909 LibGfx: Add unary operator-() to Vector2/3/4 2022-01-18 01:48:51 +02:00
Marcus Nilsson
6523f03d47 LibGfx: Change return type of Adler32 checksums in PNGWriter
The two Adler32 checksums are u16 and these two getters were mistakenly
left as u32 when PNGChunk::add_as_big_endian() was templated leading
to corrupted IDAT fields in our PNGs.
2022-01-13 17:59:58 +01:00
Jelle Raaijmakers
a41d5ffa1e LibGfx+LibGL: Allow singular matrices to be inverted
This is basically the old behavior before the GLtron port was
introduced, but `.inverse()` no longer crashes if the matrix is
singular.
2022-01-12 01:08:38 +01:00
Jelle Raaijmakers
a4a666152b LibGfx+LibGL: Do not crash if matrix inverse does not exist
Allow `Matrix::inverse()` to return an error and deal with those in
LibGL. Also use this opportunity to more efficiently calculate the
transpose of the model view matrix for the normal transformation.
2022-01-11 23:47:42 +01:00
Stephan Unverwerth
b07bb85700 LibGfx: Allow Vector{2,3,4} operators to accept different argument types
This is needed to e.g. multiply a Vector4<f32x4> by a float.
2022-01-09 16:21:13 +03:30
Xavier Defrang
b1a15b02f1 PixelPaint+LibGfx: Add sepia color filter 2022-01-08 12:31:11 +01:00
Xavier Defrang
2502a88e49 LibGfx: Implement Grayscale/Invert filters as ColorFilter 2022-01-08 12:31:11 +01:00
mjz19910
10ec98dd38 Everywhere: Fix spelling mistakes 2022-01-07 15:44:42 +01:00
mjz19910
3102d8e160 Everywhere: Fix many spelling errors 2022-01-07 10:56:59 +01:00
Tobias Christiansen
e4b7d38e18 LibGfx: Add LumaFilter
This allows you to specify a luminosity range, all pixels that fall
outside this range are set to black, the others are untouched.
2022-01-04 21:41:14 +02:00
Tobias Christiansen
06ae5b3536 LibGfx: Add BitmapMixer
With this BitmapMixer one can draw one Bitmap onto another with
different modes.
For now the only supported mixing methods implemented are Add and
Lightest (which is very naive).
2022-01-04 21:41:14 +02:00
Tobias Christiansen
b0ab979169 LibGfx: Add BitmapFormat::BGRx8888 support to the FastBoxBlurFilter
1268b39ba introduced template specialization when reading/writing
to/from the bitmap that increased the speed of the filter.
To keep that while supporting more than one BitmapFormat, the
appropriate {get,set}_pixel<>() functions are detemined and stored in
Function<>s.
2022-01-04 21:41:14 +02:00
Andrew Kaster
c8cfd6661a Userland: Resolve -Woverloaded-virtual in LibGUI and SoundPlayer
Enable the warning project-wide. It catches when a non-virtual method
creates an overload set with a virtual method. This might cause
surprising overload resolution depending on how the method is invoked.
2022-01-04 07:51:31 +00:00
Filiph Sandström
35dac843b4 Theming: Add alignment section
This commit removes the IsTitleCenter property and replaces it with
the TitleAlignment property that supports "Left", "Right" & "Center".
2022-01-01 22:51:53 +01:00
Filiph Sandström
c4b78bee45 LibGfx: Remove VERIFY in draw_rect_with_thickness
draw_line with thickness already supports scaling so that verify isn't
needed anymore. This fixes a scaling chrash introduced in 8a1d77f.
2022-01-01 20:30:09 +00:00
Filiph Sandström
8a1d77f65c LibGfx: Add window border/title theming options
This commit adds support the following properties to theming:
Flags:
  - IsTitleCenter: true if the title should be centered.
Metrics:
  - BorderThickness: The border width.
  - BorderRadius: The border corner radius.
2022-01-01 14:54:16 +01:00
Jelle Raaijmakers
e056cf7e3f LibGfx: Mark some Matrix functions as [[nodiscard]] 2021-12-30 14:24:29 +01:00
Jelle Raaijmakers
57e1dc7765 LibGfx: Add Matrix3x3
This defines `Matrix3x3`, `FloatMatrix3x3` and `DoubleMatrix3x3`
mirroring `Matrix4x4`. Since we will need matrix multiplication with a
`Vector3` for LibGL's normalization, we also add that `*` operator.
2021-12-30 14:24:29 +01:00
TheGrizzlyDev
ebaf211260 ThemeEditor: Implement a way to simulate color blindness in preview
Implement a mechanism that allows us to alter colors so that they
mimic those a colorblind person would see. From the color we can then
alter the colors for the whole preview so we can simulate everything
in the theme including icons/decorations.

This filter is also available as a Filter in LibGfx so it can be
reused in multiple other places.

The color simulation algorithm is based on this one
https://github.com/MaPePeR/jsColorblindSimulator publicly available.
2021-12-28 17:10:44 +01:00
Brian Gianforcaro
a47f43d4cb LibGfx: Harden TTF parsing against fuzzers
Instead of asserting this edge case, bail out instead.

Found by OSS-Fuzz:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=42653
2021-12-23 17:43:31 -08:00
Brian Gianforcaro
0a827eaa02 LibGfx: Fix incorrect error handling in ICOLoader
This was found by OSS Fuzz:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=42188
2021-12-23 17:43:31 -08:00
Linus Groh
e4bba2fab9 LibGfx: Keep alpha value of previous pixel for QOI_OP_RGB chunk
I accidentally skipped this part of the spec in the QOI decoder:

> The alpha value remains unchanged from the previous pixel.

This led to incorrect rendering of some images with transparency,
visible in form of a horizontal line of non-transparent pixels (that
shouldn't exist), e.g. for the following chunk sequence:

- QOI_OP_RGBA with alpha = 0
- QOI_OP_RGB
- QOI_OP_RUN

The QOI_OP_RGB should 'inherit' the alpha value of the previous
QOI_OP_RGBA chunk, instead of always setting it to 255.
I'm unsure why the encoder added the QOI_OP_RGB chunk to the specific
image where the bug was noticed in the first place - they effectively
both had fully transparent color values.
2021-12-22 01:12:51 +01:00
Nick Johnson
08e4a1a4dc AK+Everywhere: Replace __builtin bit functions
In order to reduce our reliance on __builtin_{ffs, clz, ctz, popcount},
this commit removes all calls to these functions and replaces them with
the equivalent functions in AK/BuiltinWrappers.h.
2021-12-21 22:13:51 +01:00