1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-22 16:45:08 +00:00
Commit graph

1585 commits

Author SHA1 Message Date
Fausto Tommasi
f7458b3e17 LibGUI: Update TextEditor to delete emoji based on gbp cluster
Updated TextDocument and TextEditor to use calls to
`find_grapheme_segmentation_boundary` in order to make "correct-feeling"
deletions on backspace and delete keys being pressed
2023-02-17 07:50:09 -05:00
Cameron Youell
cb96c892cc LibGUI: Add highlighting to UrlBox 2023-02-16 10:47:22 +00:00
Cameron Youell
dad70d8d6e LibGUI: Account for glyph_spacing() in spans 2023-02-16 10:47:22 +00:00
Timothy Flynn
4ab7216827 LibGUI: Use Unicode's text segmentation for traversing word breaks
Note that for traversing words with ctrl+(left or right arrow) on the
keyboard, we want to "skip" some boundaries. Consider the text:

    The ("quick") fox can't jump 32.3 feet, right?

Using "|" to denote word break boundaries, we will have:

    |The| |(|"|quick|"|)| |fox| |can't| |jump| |32.3| |feet|,| |right|?|

When starting at "The" and using ctrl+right to move rightward in this
text, it is unlikely that users will want to break at every single one
of those boundaries. Most text editors, for example, will skip from the
end of "The" to the end of "quick", not breaking at the parentheses or
opening quotation marks.

We try to mimic such desired behavior here. It likely isn't perfect, but
we can improve upon it as we find edge cases.
2023-02-15 12:36:47 +01:00
Sam Atkins
2dc1682274 LibGUI: Take gutter into account when measuring TextEditor content area 2023-02-13 16:54:56 +00:00
Sam Atkins
6905622b41 LibGUI: Don't show caret cursor when hovering TextEditor's gutter 2023-02-13 16:54:56 +00:00
Sam Atkins
69333e5dbd LibGUI: Combine wrapping/non-wrapping TextEditor code paths
The `is_wrapping_enabled()` paths function just fine when wrapping is
disabled. We already calculate `m_line_visual_data`. The only reason to
use a special path is for speed, since you can skip some steps if you
know each line is only 1 line high visually.

However, with code-folding being added, we can't make assumptions about
line height because a line could be hidden and have an effective height
of 0px. So `text_position_at_content_position()` always needs to loop
through the lines to see what our position is, and that function always
needs to be called to calculate the real position.
2023-02-13 16:54:56 +00:00
Sam Atkins
7aef096f85 LibGUI: Fix typo in span_consumed variable 2023-02-13 16:54:56 +00:00
Tim Schumacher
874c7bba28 LibCore: Remove Stream.h 2023-02-13 00:50:07 +00:00
Tim Schumacher
606a3982f3 LibCore: Move Stream-based file into the Core namespace 2023-02-13 00:50:07 +00:00
Tim Schumacher
a96339b72b LibCore: Move Stream-based sockets into the Core namespace 2023-02-13 00:50:07 +00:00
Tim Schumacher
d43a7eae54 LibCore: Rename File to DeprecatedFile
As usual, this removes many unused includes and moves used includes
further down the chain.
2023-02-13 00:50:07 +00:00
Karol Kosek
14951b92ca LibGUI: Remove deprecated text and set_text functions in AbstractButton
This moves the functions to lambda when registering a property.
External code can now only communicate using the new String API.
2023-02-13 00:45:09 +00:00
Karol Kosek
e39adc4772 Userland: Set Button text using the new String class 2023-02-13 00:45:09 +00:00
Karol Kosek
b5cb9a9ebb LibGUI+TaskBar: Make Calendar::formatted_date() return ErrorOr<String>
This commit introduces no error propagation.
2023-02-13 00:45:09 +00:00
Karol Kosek
d32d4029d3 Userland: Replace usages of AbstractButton::text_deprecated with text() 2023-02-13 00:45:09 +00:00
Karol Kosek
fca29eae09 LibGUI: Store text using the new String class in the AbstractButton
This change also adds non-deprecated text() and set_text() functions and
helper constructors for Button, CheckBox, and RadioButton to call the
strings directly.

The whole codebase at this point is still using the deprecated string
functions, which the class will quietly convert to a new String.
2023-02-13 00:45:09 +00:00
Karol Kosek
d32b052f22 LibGUI+Userland: Add _deprecated suffix to AbstractButton::{set_,}text 2023-02-13 00:45:09 +00:00
Karol Kosek
61b49daf0a LibGUI: Make Clipboard::set_plain_text take text as a StringView 2023-02-13 00:45:09 +00:00
Karol Kosek
67ffc687d8 LibGUI+PixelPaint: Port GUI::ValueSlider's suffix to the new String 2023-02-13 00:26:39 +00:00
Zaggy1024
0c230f5ff0 LibGUI: Callback with the clamped value of Sliders on a jump to cursor 2023-02-12 09:53:05 +01:00
Lucas CHOLLET
db80425a65 LibGUI: Remove the Core::File overload of write_to_file()
One less usage of `Core::File`, yay!
2023-02-11 14:20:26 +00:00
Lucas CHOLLET
107e15c5bc LibGUI: Base write_to_file(StringView path) on the stream overload
`write_to_file(StringView path)` was based on the `Core::File` overload.
The return type also changed from `bool` to `ErrorOr<void>` to ease
error propagation.
2023-02-11 14:20:26 +00:00
Tim Ledbetter
59855e49df LibGUI: Add a DontResizeColumns option to Model::UpdateFlag
This allows an application to signal that column sizes do not
need to be recalculated for a given model update.
2023-02-10 05:12:06 +03:30
Tim Ledbetter
99570cb0c4 LibGUI: Speed up Variant string conversion for string data
Add a fast path to Variant::to_deprecated_string() to return a copy
if the underlying data is of type DeprecatedString. This improves the
performance of models with a lot of string data.
2023-02-10 05:12:06 +03:30
MacDue
63b11030f0 Everywhere: Use ReadonlySpan<T> instead of Span<T const> 2023-02-08 19:15:45 +00:00
Tim Schumacher
6ea3c1659a LibGfx: Propagate errors from serializing bitmaps
We essentially just end up moving `release_value_but_fixme_...` one
layer down, but it makes adding more fallible operations in the
serialization function more comfortable.
2023-02-08 18:50:43 +00:00
Andreas Kling
2bc8cbfe8f LibGUI: Add 9 and 11 to the list of suggested sizes in FontPicker 2023-02-07 17:01:55 +01:00
Zaggy1024
d9a73bbc96 LibGUI: Add callbacks for Slider drags starting and ending 2023-02-07 14:36:58 +00:00
Zaggy1024
fa98c43c0d LibGUI: Make sliders start a drag when jumping to the cursor
This allows users to seek to any position in VideoPlayer, then continue
adjusting the playback timestamp while holding left mouse.
2023-02-07 14:36:58 +00:00
Sam Atkins
89b8d346fe LibGUI+About: Make AboutDialog creation fallible 2023-02-07 10:43:15 +00:00
Sam Atkins
65c8dfe923 LibGUI: Convert AboutDialog layout to GML 2023-02-07 10:43:15 +00:00
Arda Cinar
1ef410eb79 LibGUI: Handle utf-8 search strings in find
Similar to LibVT, we were iterating over needle bytes instead of code
points. This patch allows finding unicode substrings in a text document.
2023-02-05 13:50:38 +01:00
Aliaksandr Kalenik
1f4106842d LibGfx: Pass font width to FontDatabase::get()
Width need to be passed to `FontDatabase::get()` to resolve font name
unambiguously.
2023-02-05 08:06:06 +00:00
Karol Baraniecki
71f5bbab42 LibGUI: Verify NonemptyText InputBox doesn't result in an empty string 2023-02-04 18:46:39 -07:00
Karol Baraniecki
506c26acce LibGUI+Userland: Switch order of parameters for InputBox::show
Because usage of the input_type parameter is now higher than of the
placeholder parameter, this makes for a cleaner API.
2023-02-04 18:46:39 -07:00
Karol Baraniecki
8095d9276b Userland: Replace manual checking by using GUI::InputType::NonemptyText
Do this where we were already checking if the input was empty after the
InputBox was submitted. Those places gain interactive input validation.

:^)
2023-02-04 18:46:39 -07:00
Karol Baraniecki
55dbfd24c0 LibGUI: Allow the InputBox to be of NonemptyText type
It seems like a lot (most?) places where InputBoxes are used check if
the retrieved string isn't empty anyway - make this be reflected in
the user interface, by disabling (graying out) the "OK" button when
nothing is entered, so empty input isn't a viable option at all.
2023-02-04 18:46:39 -07:00
Andreas Kling
5577d5f789 LibGUI: Use the correct font when relayouting Breadcrumbbar
When the system is broadcasting a "system font changed" notification,
the Breadcrumbbar will be notified before its button children. This
means that we have to use the Breadcrumbbar's font() for calculations
inside Breadcrumbbar as the buttons themselves still have the old font
at this point.
2023-02-02 14:49:54 +01:00
Andreas Kling
63ac6ced31 LibGUI: Merge two loops over the segments in Breadcrummbar::relayout() 2023-02-02 14:49:54 +01:00
Andreas Kling
eb9d2c64c8 LibGUI: Center TreeView item icons vertically
This makes tree views with icons look a lot better at larger font sizes.
2023-02-02 14:49:54 +01:00
Andreas Kling
9347db6f91 LibGUI: Make Tray item height honor the current font size 2023-02-02 13:15:03 +01:00
Andreas Kling
be3a9048be LibGUI: Relayout Breadcrumbbar on font change 2023-02-02 13:15:03 +01:00
Andreas Kling
dd607fc619 LibGUI: Invalidate IconView cache on font change
Changing the font means we have to recalculate all the item rects etc.
2023-02-02 13:15:03 +01:00
Andreas Kling
ff0766056b LibGUI: Don't hard-code TreeView row height
Instead of overriding AbstractTableView::row_height() and returning a
hard-coded height for some reason, just remove the override.

This makes tree view row heights honor the current font size.
2023-02-02 13:15:03 +01:00
Marcus Nilsson
be464c357a LibGUI: Add allowed file types to FilePicker
This patch adds a ComboBox to `FilePicker` where the user can select
which file types to show, all files that doesn't have an
extension that's in the selected file type will be hidden.

When creating a FilePicker with `FilePicker::construct` or
`FilePicker::get_open_filepath`, allowed file types can be
specified as the last argument.

If no file types are provided then there will be no visual change in the
GUI.

'All Files' and 'Image Files' have shorthands with
`GUI::FileTypeFilter::all_files()` and
`GUI::FileTypeFilter::image_files()`, respectively.
2023-02-02 04:05:42 -07:00
Marcus Nilsson
fe5dfe4cd5 LibGUI: Add allowed file extensions to FileSystemModel
This allows FileSystemModel to take an optional list of allowed file
extensions which it will use to filter out all files that don't end
with that file extension.

The file extensions are set via `set_allowed_file_extensions` which has
a coresponding `get_allowed_file_extensions`.
2023-02-02 04:05:42 -07:00
thankyouverycool
08456be9dc LibGUI+LibGfx: Add Tray ColorRole helpers to Palette 2023-01-29 18:27:34 +00:00
Linus Groh
6e7459322d AK: Remove StringBuilder::build() in favor of to_deprecated_string()
Having an alias function that only wraps another one is silly, and
keeping the more obvious name should flush out more uses of deprecated
strings.
No behavior change.
2023-01-27 20:38:49 +00:00
Sam Atkins
88bbbe12ba LibGUI: Remove declarations for non-existent methods 2023-01-27 20:33:18 +00:00