summaryrefslogtreecommitdiff
path: root/Userland
AgeCommit message (Collapse)Author
2022-05-13FileManager: Check for write permission before enabling certain actionsofftkp
Upon DirectoryView selection change, check for write permission before enabling delete and cut. This disallows attempting to delete/cut and paste a file that you don't have write permission to by using keybinds. Fixes #13983.
2022-05-13Meta: Move LibWeb's CMake generation script to its own fileDexesTTP
This patch has no functional changes, but prepares the CMake script to be able to handle LibWeb on Lagom.
2022-05-13LibDSP+Piano: Convert DSP APIs to accept entire sample rangeskleines Filmröllchen
This has mainly performance benefits, so that we only need to call into all processors once for every audio buffer segment. It requires adjusting quite some logic in most processors and in Track, as we have to consider a larger collection of notes and samples at each step. There's some cautionary TODOs in the currently unused LibDSP tracks because they don't do things properly yet.
2022-05-13LibDSP: Remove Transport's time counter reference APIkleines Filmröllchen
This is what the old Transport in Piano had, but as everyone just references Transport directly, there's no need for it anymore.
2022-05-13LibDSP: Make the note frequencies an AK::Array instead of a C arraykleines Filmröllchen
This was a leftover from the early days of Piano, and there's no reason to leave it that way especially if we want to use more complex collection APIs in the future.
2022-05-13LibDSP: Improve const correctnesskleines Filmröllchen
2022-05-13LibDSP: Refactor OOP non-functionallykleines Filmröllchen
* Don't inherit from Core::Object everywhere, that's overkill. Use RefCounted instead. * Change some constructor visibilites to facilitate the above. * default-implement all virtual destructors if possible. * Drive-by include hygiene.
2022-05-13LibWeb: Stop inactive requestAnimationFrame() callbacks from runningMacDue
Previously requestAnimationFrame() callbacks were registered with a static global RequestAnimationFrameDriver shared between all windows. This led to callbacks still running after navigating away from a page (This could be seen with the WASM GoL demo). This commit moves the RequestAnimationFrameDriver (now AnimationFrameCallbackDriver) to be a member of the HTML::Window object, then uses the 'active document' parameter of run_animation_frame_callbacks() to run only the active callbacks.
2022-05-12LibArchive: Use named members for ZIP general purpose flagsTim Schumacher
This fixes the faulty bit check that misclassified ZIPs as having data descriptors.
2022-05-12LibCrypto: Add Ed25519stelar7
2022-05-12LibCrypto: Move Curve25519 related code into separate filestelar7
2022-05-12LibC: Add herror() and hstrerror()Michał Lach
2022-05-12LibC: Make h_errno thread-localMichał Lach
2022-05-12LibC+Kernel: Prevent string functions from calling themselvesDaniel Bertalan
Most of the string.h and wchar.h functions are implemented quite naively at the moment, and GCC's pattern recognition pass might realize what we are trying to do, and transform them into libcalls. This is usually a useful optimization, but not when we're implementing the functions themselves :^) Relevant discussion from the GCC Bugzilla: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102725 This prevents the infamous recursive `strlen`. A more proper fix would be writing these functions in assembly. That would likely give a small performance boost as well ;)
2022-05-12AK+DHCPClient: Fix false positive gcc 12 warningsDaniel Bertalan
The compiler would complain about `__builtin_memcpy` in ByteBuffer::copy writing out of bounds, as it isn't able to deduce the invariant that the inline buffer is only used when the requested size is smaller than the inline capacity. The other change is more bizarre. If the destructor's declaration exists, gcc complains about a `delete` operation causing an out-of-bounds array access. error: array subscript 'DHCPv4Client::__as_base [0]' is partly outside array bounds of 'unsigned char [8]' [-Werror=array-bounds] 14 | ~DHCPv4Client() = default; | ^ This looks like a compiler bug, and I'll report it if I find a suitable reduced reproducer.
2022-05-12PixelPaint: Fix incorrect use of RefCounted CRTPDaniel Bertalan
I'm not even sure why this worked. How would the compiler know which type to destruct the FilterInfo object as? Fixes this janky error from gcc 12: AK/RefCounted.h:70:13: error: array subscript 0 is outside array bounds of 'void [56]' [-Werror=array-bounds] 70 | delete static_cast<const T*>(this); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-05-12DisplaySettings: Set window modified stateSam Atkins
2022-05-12TerminalSettings: Set window modified stateSam Atkins
2022-05-12MouseSettings: Set window modified stateSam Atkins
2022-05-12LibGUI: Add AllowCallback parameter to ComboBox::set_text()Sam Atkins
2022-05-12MouseSettings: Update the cursor theme preview when restoring defaultsSam Atkins
Previously, if you opened MouseSettings, set the cursor theme to Dark, and then click "Defaults", the cursors list would not update. ComboBox::set_text() does not call the on_change callback, so we have to run the steps manually. I've also made `m_theme_name` into a local variable, since it can be.
2022-05-12WindowServer: Save config file when mouse cursor theme is changedSam Atkins
When user code requests the current cursor theme name with `GUI::ConnectionToWindowServer::the().get_cursor_theme()`, that reads the name from the config file. If we don't write that out when it's changed, then users get given an outdated cursor theme instead of the current one. In particular, changing the theme in MouseSettings, saving and closing it, then reopening MouseSettings, would show the wrong theme selected. So, that's fixed now. :^)
2022-05-12MailSettings: Set window modified stateSam Atkins
2022-05-12KeyboardSettings: Set window modified stateSam Atkins
2022-05-12ClockSettings: Set window modified stateSam Atkins
2022-05-12BrowserSettings: Set window modified stateSam Atkins
2022-05-12LibGUI: Support "modified" window state in SettingsWindowSam Atkins
SettingsWindow now notices if the window is marked as modified, and shows a confirmation pop-up to check if the user wants to apply or discard their changes. It automatically marks the window as unmodified after restoring defaults or applying the changes, but each Tab subclass needs to call `set_modified(true)` when the user modifies things. The "Apply" button is automatically disabled when there are no unsaved changes to be applied.
2022-05-12LibGUI: Run TextEditor::on_change callback immediatelySam Atkins
This is the only Widget that ran its callback in deferred_invoke(). It seems to be a holdover from when syntax-highlighting ran whenever the text changed, but that has not been true since bec2b3086c195e50f233e01f7ab935ba15ac843e. Running the callback immediately has no obvious downsides, but does make it a lot easier to reason about. (I might have spent an hour confused as to why things were happening in the wrong order...)
2022-05-11LibGL+LibGPU+LibSoftGPU: Implement and expose glClipPlaneRKBethke
This commit implements glClipPlane and its supporting calls, backed by new support for user-defined clip planes in the software GPU clipper. This fixes some visual bugs seen in the Quake III port, in which mirrors would only reflect correctly from close distances.
2022-05-11WindowServer: Make window frame flashing use the highlight colorkleines Filmröllchen
Now, when windows flash, the "active" color of the window title frame's flash is the highlight color instead of the standard window color. The "inactive" color of the flash is still the disabled color as before. Reasoning behind this change in aesthetics: There are four [1] window title frame colors with specific UI purposes: 1. "Active" for the normal active window, obvious purpose. 2. "Moving" for the window that is being dragged or resized by the user. Responsible for acting as a visual click feedback as a kind of subdued button. 3. "Inactive" for any inactive windows, obvious purpose. 4. "Highlight". The purpose of "Highlight" is in the name, though it's non-obvious what that exactly entails. Before, only alt-tab selecting windows would use the highlight color for showing the current target window. In my opinion this points to the purpose of "highlight" being to move the user's focus to another window when the simple active state is not enough. Then it makes sense to have the window flashing use the highlight color. The entire purpose of window flashing is to shift the user's focus to a dialog window that might not be close to the window they just clicked. Using the highlight color enables an even stronger emphasis than before. It enables a cleaner separation between the purpose of the two frame colors, as well as making the "Highlight" frame more common. [1] Technically there are eight, as the title frame has a gradient by default. We can count the gradient as one color for this purpose.
2022-05-11LibSoftGPU: Clamp polygon depth values to `0.f - 1.f`Jelle Raaijmakers
According to the OpenGL spec, we're expected to clamp the fragment depth values to the range `0.f - 1.f` for all polygons. This fixes Z-fighting issues with the sky in Quake 3.
2022-05-11LibGUI: Try use layout's preferred size for the content sizeKarol Kosek
Previously this was only done if the widget had shrink_to_fit property enabled.
2022-05-11LibGUI: Always use widget's minimum size in ScrollableContainerWidgetKarol Kosek
I don't know if it makes much sense to use min_size and shrink_to_fit at the same time, but it will make the code a bit cleaner later.
2022-05-11LibGUI: Reuse common parts in ScrollableContainerWidgetKarol Kosek
No functional changes.
2022-05-11LibGUI: Take only valid sizes when calculating BoxLayout preferred sizeKarol Kosek
We ran a min() function to clamp child widgets to their maximum size, but if it wasn't set, it got -1 and made the widget able to shrink completely.
2022-05-11Userland: Set tab-widget properties in GML instead of codeSam Atkins
2022-05-11LibGUI: Expose more TabWidget properties to GMLSam Atkins
- close_button_enabled - show_tab_bar - reorder_allowed
2022-05-11LibWeb: Implement CSSRule.parentRule and .parentStyleSheetSam Atkins
Both of these are supposed to be set when the CSSRule is created. The spec is silent on setting it when a CSSRule is added to a parent. So, this is a bit ad-hoc. The parent rule gets set whenever a rule is added to a new parent. The parent stylesheet gets set whenever the rule or one of its ancestors is added to a different stylesheet. There may be some nuance there that I'm missing, but I'm sure we'll find out quickly once we have WPT running!
2022-05-11LibWeb: Allow passing StringView to CSSRuleList::insert_a_css_rule()Sam Atkins
The spec is a little bizarre here. One caller of this (`CSSStyleSheet::insert_rule()`) wants to give it a parsed CSSRule, but the spec itself wants it to take a string. (As will be used by `CSSGroupingRule::insert_rule()`) Using a Variant isn't pretty but it's the best solution I've come to - having two overloads was worse, whether one called the other or they just duplicated the logic. This seems the least bad.
2022-05-11LibWeb: Implement `@supports` serializationSam Atkins
2022-05-11LibWeb: Add CSSSupportsRule wrapperSam Atkins
2022-05-11LibWeb: Add CSSMediaRule wrapperSam Atkins
2022-05-11LibWeb: Add CSSImportRule wrapperSam Atkins
2022-05-11LibWeb: Add CSSConditionRule wrapperSam Atkins
2022-05-11LibWeb: Add CSSGroupingRule wrapperSam Atkins
2022-05-11LibWeb: Add MediaList wrapperSam Atkins
Most of the pieces were already there, I'd just forgotten to actually wire them up.
2022-05-10LibSoftGPU: Implement depth offset factorJelle Raaijmakers
This implements the depth offset factor that you can set through e.g. OpenGL's `glPolygonOffset`. Without it, triangles might start to Z- fight amongst each other. This fixes the floor decals in Quake 3.
2022-05-09LibGUI: Consider TextEditor icon size when scrolling text horizontallyofftkp
If an icon exists and the horizontal scroll value is larger than 0, translate the TextEditor painter by the icon size and padding. The text would scroll over the icon when the text was long enough to trigger a horizontal scroll. Fixes #13669.
2022-05-09LibGL+LibGPU+LibSoftGPU: Implement point and line drawingJelle Raaijmakers
Implement (anti)aliased point drawing and anti-aliased line drawing. Supported through LibGL's `GL_POINTS`, `GL_LINES`, `GL_LINE_LOOP` and `GL_LINE_STRIP`. In order to support this, `LibSoftGPU`s rasterization logic was reworked. Now, any primitive can be drawn by invoking `rasterize()` which takes care of the quad loop and fragment testing logic. Three callbacks need to be passed: * `set_coverage_mask`: the primitive needs to provide initial coverage mask information so fragments can be discarded early. * `set_quad_depth`: fragments survived stencil testing, so depth values need to be set so depth testing can take place. * `set_quad_attributes`: fragments survived depth testing, so fragment shading is going to take place. All attributes like color, tex coords and fog depth need to be set so alpha testing and eventually, fragment rasterization can take place. As of this commit, there are four instantiations of this function: * Triangle rasterization * Points - aliased * Points - anti-aliased * Lines - anti-aliased In order to standardize vertex processing for all primitive types, things like vertex transformation, lighting and tex coord generation are now taking place before clipping.
2022-05-09LibSoftGPU: Mention correct `i686` target in `Device` commentJelle Raaijmakers