1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-21 15:45:07 +00:00
Commit graph

1825 commits

Author SHA1 Message Date
thankyouverycool
4c9933bfb7 LibGUI: Remove Label icons and replace instances with ImageWidget
These icons are a relic of GLabel and were never implemented to
accomodate both image and text. This convenience can always be added
in the future, but no current instance assumes or needs it, so let's
replace them all with ImageWidget to show clearer intent.
2023-04-30 05:48:14 +02:00
thankyouverycool
59483b0654 LibGUI: Don't fix ImageWidget's size when disabling auto_resize() 2023-04-30 05:48:14 +02:00
thankyouverycool
b17d4a0ced LibGUI: Propagate construction errors in LinkLabel 2023-04-30 05:48:14 +02:00
thankyouverycool
91bafc2653 LibGUI+Userland: Port Labels to String 2023-04-30 05:48:14 +02:00
Ali Mohammad Pur
7e6341587b AK+Everywhere: Disallow Error::from_string_view(FooString)
That pattern seems to show up a lot in code written by people that
aren't intimately familiar with the lifetime model of Error and Strings.
This commit makes the compiler detect it and present a more helpful
diagnostic than "garbage string at runtime".
2023-04-28 05:55:20 +02:00
Andreas Kling
c756e021a7 Userland: Remove "Inspector" program and related utilities
This program has never lived up to its original idea, and has been
broken for years (property editing, etc). It's also unmaintained and
off-by-default since forever.

At this point, Inspector is more of a maintenance burden than a feature,
so this commit removes it from the system, along with the mechanism in
Core::EventLoop that enables it.

If we decide we want the feature again in the future, it can be
reimplemented better. :^)
2023-04-25 14:48:40 +02:00
Cameron Youell
8df04f37e4 LibGUI: Convert JsonArrayModel to use Core::File
While we're here lets also convert all the `{set/store/add/remove}`
functions to use `ErrorOr`
2023-04-24 09:21:51 +02:00
Cameron Youell
8134dccdc7 AK: Add new failable JsonArray::{append/set} functions
Move all old usages to the more explicit `JsonArray:must_{append/set}`
2023-04-24 09:21:51 +02:00
Karol Kosek
7e33857afa WindowServer+LibGUI: Port WindowServer's Menu name to new String 2023-04-19 07:59:54 +02:00
Karol Kosek
51bd9ca037 LibGUI+Userland: Make Menu::*add_submmenu take name using new string 2023-04-19 07:59:54 +02:00
Karol Kosek
969543a847 LibGUI+Userland: Make Window::*add_menu take name using new string 2023-04-19 07:59:54 +02:00
Karol Kosek
60a338758c LibGUI: Port Menubar to new string 2023-04-19 07:59:54 +02:00
Karol Kosek
dccd70385d LibGUI+Browser: Set menu names using the new String class 2023-04-19 07:59:54 +02:00
Karol Kosek
956f4d9205 Userland: Construct Menus with name using the non-deprecated String 2023-04-19 07:59:54 +02:00
Karol Kosek
c4c1df7621 LibGUI: Store Menu names as new String 2023-04-19 07:59:54 +02:00
thankyouverycool
ca8918f310 LibGUI: Add a numeric input type to InputBox
This should be a more convenient API and a better UX for apps that
want simple integer input from the user.
2023-04-18 10:05:21 +02:00
thankyouverycool
33ccbc9415 LibGUI: Implement calculated_min_size() for SpinBox 2023-04-18 10:05:21 +02:00
thankyouverycool
b66a76f73b LibGUI: Allow SpinBox to set its value with return key
Previously SpinBox did not update on return or changes to the editor.
The widget had to lose focus or be manually incremented. This lets
the editor update on return and now always displays the most recent
clamped value. set_value_from_current_text() will also be useful to
programmatically set SpinBox within layouts whose default buttons
consume return key presses.
2023-04-18 10:05:21 +02:00
thankyouverycool
7c314f3855 LibGUI: Let InputBox display an ImageWidget
InputBox can now be given a bitmap to display alongside its
prompt and editor. Prompts are now optional to allow for
compact dialogs.
2023-04-18 10:05:21 +02:00
thankyouverycool
02a9e5d3f6 LibGUI+Userland: Improve error and font handling for InputBox
Adds fallible factories, ports DeprecatedString, and rebuilds the
layout to accomodate system font changes.
2023-04-18 10:05:21 +02:00
thankyouverycool
9c2bcffe83 LibGUI: Improve calculated_min_size() for single-line TextEditor
TextBox now shrinks to fit the current font based on preferred line
height, maintaining its historical minimum size of 40x22
2023-04-18 10:05:21 +02:00
thankyouverycool
7304556ff2 LibGUI: Add Window::on_font_change() hook 2023-04-18 10:05:21 +02:00
thankyouverycool
7b05bf1c20 LibGUI: Always paint Statusbar's vertical lines when not maximized
Fixes MasterWord's single Statusbar::Segment not painting vertical
lines despite its window being unmaximized. This was only an issue
for non-resizable windows as the Statusbar resizing corner otherwise
negates spans_entire_window_horizontally() when not maximized.
2023-04-17 20:31:12 +02:00
Tom
e758545b91 FileManager+LibGUI: Cache the FileSystem::can_delete_or_move value
Add the function FileSystemModel::Node::can_delete_or_move which will
cache the result of FileSystem::can_delete_or_move for a node. This
prevents having to make system calls repeatedly to obtain this
information.

Fixes #18399
2023-04-17 10:34:20 +02:00
thankyouverycool
cfac3be0b3 LibGUI: Resize Label on font changes
And set fixed preferred heights when autosizing.
2023-04-15 15:24:50 +02:00
thankyouverycool
5294ef918e LibGUI: Implement calculated_min_size() for Label 2023-04-15 15:24:50 +02:00
thankyouverycool
479e67212a LibGUI: Implement calculated_min_size() for DialogButton
Dialog buttons now scale based on presentation size to accomodate
larger fonts while retaining uniform widths. Scaling by 8 is
arbitrary but preserves the historical 80 pixel width with Katica 10.
This needs improvement but works well for most fonts as a start.
2023-04-15 15:24:50 +02:00
thankyouverycool
5181fafce6 LibGUI: Improve calculated_min_size() for Button
Previously min_width() was fixed, rendering width calculations in
calculated_min_size() useless for layout. Minimum width now shrinks
to 22, the historical minimum for height as well, and takes into
account elided text and icons. Height no longer sums the icon, fixing
a layout regression for icon buttons.

Also removes an unnecessary FIXME: Calculated size should only
need to account for the height of a single line of elided text
plus padding. Font's pixel_size_rounded_up() is the right solution
even though it and the underlying pixel metrics of some ScaledFonts
don't always correspond yet.
2023-04-15 15:24:50 +02:00
thankyouverycool
55423b4ed0 LibGfx+Userland: Add width_rounded_up() helper 2023-04-15 15:24:50 +02:00
thankyouverycool
c9404c3a63 LibGUI+Userland: Convert MessageBox to fallible construction
Adds fallible versions of MessageBox's helper factories, ports
DeprecatedString, and rewrites build() to be both fallible and
more responsive to font changes.

MessageBox now auto shrinks and no longer has to re-build its
layout when text changes. It is manually resized once at
creation to position properly as a Dialog before being shown.
2023-04-15 15:24:50 +02:00
thankyouverycool
aa94b944de LibGUI: Allow Windows to auto shrink
Previously Windows automatically grew to accomodate layout changes
when obeying minimum widget size but would not automatically shrink
if so desired. Setting auto shrink true now automatically resizes
windows to their effective_min_size() every time their minimum size
updates. This will be useful for making fixed size windows responsive
to layout and font changes in the future.
2023-04-15 15:24:50 +02:00
Zaggy1024
d4c33a7134 LibGUI: Only redraw sliders after the on_change callback has finished
This prevents the seek slider in VideoPlayer from skipping forward and
then back when fast seeking is enabled. Previously, it was possible for
a single frame to render before the actual seek position in the seek
bar was set.
2023-04-14 12:05:52 +01:00
Matteo Benetti
3e1626acdc Spreadsheet+LibSyntax: Never insert spans directly
Function `CellSyntaxHighlighter::rehighlight()` direct inserted spans
to TextDocument `m_span` vector missing out important reordering and
merging operation carried out by `TextDocument::set_spans()`.

This caused overlapping spans for a cell with only a `=` symbol
(one for the actual token and one for the highlighting) to
miscalculate `start` and `end` value and a `length` value (of
`size_t` type) with a `0-1` substraction (result: 18446744073709551615)
causing `Utf32View::substring_view()` to fail the
`!Checked<size_t>::addition_would_overflow(offset, length)` assertion

This remove the possibility to directly alter `TextDocument`'s spans
thus forcing the utilization of `HighlighterClient::do_set_spans()`
interface function.

Proper refactor have been applied to
`CellSyntaxHighlighter::rehighlight()` function
2023-04-14 10:00:52 +02:00
Ben Wiederhake
560133a0c6 Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
thankyouverycool
1097f3066e LibGUI: Open and increment ComboBox ListViews by exact steps
This feels a bit nicer and always places the current index at the top
of visible content in long scrollable lists.
2023-04-04 19:15:15 +02:00
thankyouverycool
207409c925 LibGUI: Don't hover AbstractView indicies outside visible content
Fixes ComboBox ListView erroneously setting and scrolling to
indicies just outside its inner rect when mousing along the
bottom or top of the frame.
2023-04-04 19:15:15 +02:00
thankyouverycool
b79b70f197 LibGUI: Paint Scrollbar buttons with appropriate thread highlighting
Similar to increment/decrement buttons on SpinBoxes, Scrollbar
buttons now draw with the correct highlights after reaching their
min or max.
2023-04-04 19:15:15 +02:00
thankyouverycool
82c06f58af LibGUI: Allow ComboBox windows to intersect Desktop's entire height
Minus a tasteful item height remainder. Ignoring Taskbar is okay now
that the window is a PopUp.

Also expands its width if intersection with the Desktop makes its
ListView scrollable. ComboBox windows no longer intersect horizontally,
remaining firmly "attached" to the editor, similar to other classic UIs.
2023-04-04 19:15:15 +02:00
thankyouverycool
99f28cf4ac LibGUI: Remove calculated_min_size() for ListViews
Originally implemented to handle resizable ComboBox windows, this
"feature" no longer exists, so calculating min size is no longer
necessary. The calculation was also failing to account for dynamic
ListViews properly.

This patch simplifies things by setting ComboBox ListView's minimum size
explicitly and deferring to AbstractScrollableWidget's more flexible
calculated implementation otherwise.

Fixes FontPicker resizing incorrectly due to overly rigid ListViews.
2023-04-04 19:15:15 +02:00
Fabian Dellwing
14d78e10d1 LibGUI+CertificateSettings: Use custom SortingProxy
The default SortingProxyModel does not allow to react to reodering.
As we would like to keep the column width on sorting, we create a
subclass and inject our code into the sorting method.
2023-04-03 19:58:47 -06:00
Sam Atkins
4b29702fee LibGUI: Add gutter indicators to TextEditor :^)
HackStudio's Editor has displayed indicators in its gutter for a long
time, but each required manual code to paint them in the right place
and respond to click events. All indicators on a line would be painted
in the same location. If any other applications wanted to have gutter
indicators, they would also need to manually implement the same code.

This commit adds an API to GUI::TextEditor so it deals with these
indicators. It makes sure that multiple indicators on the same line
each have their own area to paint in, and provides a callback for when
one is clicked.

- `register_gutter_indicator()` should be called early on. It returns a
  `GutterIndicatorID` that is then used by the other methods.
  Indicators on a line are painted from right to left, in the order
  they were registered.
- `add_gutter_indicator()` and `remove_gutter_indicator()` add the
  indicator to the given line.
- `clear_gutter_indicators()` removes a given indicator from every line.
- The `on_gutter_click` callback is called whenever the user clicks on
  the gutter, but *not* on an indicator.
2023-03-31 12:09:40 +02:00
Sam Atkins
ce9b9a4f20 LibGUI: Rename TextEditor::LineVisualData -> LineData
This is going to hold other per-line data too.
2023-03-31 12:09:40 +02:00
Sam Atkins
03571b1fa9 LibGUI: Extract repeated code for populating TextEditor per-line data 2023-03-31 12:09:40 +02:00
MacDue
a2d333ff4a LibGUI: Allow updating the names of menus and submenus 2023-03-26 21:55:21 +01:00
Lucas CHOLLET
3323127db0 LibGUI: Allow blocking modals and popups to handle their own shortcuts
Since ef7d9c0, shortcut propagation was blocked for blocking modals and
popups. This however is an issue as some blocking modals (like
FilePicker) use shortcuts. This patch allows propagation of shortcuts
but only until the current window.
2023-03-25 21:42:53 +01:00
Lucas CHOLLET
baac824ee3 LibGUI: Make propagate_shortcuts handle different level of propagation
First, this patch renames the function
`propagate_shortcuts_up_to_application` to `propagate_shortcuts`.
Handling those levels, will allow us to differentiate shortcuts at
`Window` level and `Application` level. Which will be convenient to
handle dialog-specific shortcuts.
2023-03-25 21:42:53 +01:00
MacDue
b3edd83e0a LibGUI: Allow passing working directory to spawn_or_show_error() 2023-03-24 22:06:38 +00:00
Cameron Youell
c048cf2004 Libraries: Convert DeprecatedFile usages to LibFileSystem 2023-03-24 10:58:43 +00:00
Andreas Oppebøen
c943ab823d LibGUI: Paint slider track shorter to ensure the knob covers it
A 1px drop shadow from the track was peeking out behind the knob when
at rightmost or lowest position. That made it look like it was possible
to drag the knob even further right or down. Painting the track 1px
shorter seems like a good compromise to avoid the problem.
2023-03-24 10:33:22 +01:00
Andreas Oppebøen
0e4586dd3e LibGUI: Fix slightly wrong value slider knob position
When clicking the value slider bar, the knob was not positioned as
close to the mouse as expected. When moving the mouse right, the knob
would lag a bit behind, and the cursor would eventually be outside the
knob.

The bug was due to knob_rect() taking knob_thickness into account to
prevent the knob from protruding outside the bar. The value_at(pos)
calculated the relative position based on the entire width of the bar.
This discrepancy is fixed by taking knob_thickness into account in
value_at(position).
2023-03-24 10:33:22 +01:00