summaryrefslogtreecommitdiff
path: root/LibGUI
AgeCommit message (Collapse)Author
2019-04-10Introduce LibCore and move GElapsedTimer => CElapsedTimer.Andreas Kling
I need a layer somewhere between AK (usable both by userspace and kernel) and LibGUI (usable by userspace except WindowServer.) So here's LibCore.
2019-04-10LibGUI+WindowServer: Coalesce paints and resizes on the client side.Andreas Kling
Only process paint and resize events on the GUI client side if those events have the latest up-to-date window size. This drastically reduces async overdraw during interactive resize.
2019-04-10GWindow: Discard wrongly-sized backing stores in set_rect().Andreas Kling
The WindowServer still holds on to at least one backing store in case it needs to paint us again before we can render a new one. This ensures that we don't end up stuck with an undersized backing store.
2019-04-10WindowServer: Give windows a "background color" to use for missing parts.Andreas Kling
When resizing a window, we often end up having to paint some part of it without coverage in the current backing store. This patch makes those cases look nicer by having a fallback background color for each window, passed along with the CreateWindow client message.
2019-04-10LibGUI: Add a simple GGroupBox widget.Andreas Kling
This needs some work on the visual side, but it gets the job done already.
2019-04-10GCheckBox: Paint the box part as a container frame.Andreas Kling
2019-04-10LibGUI: Move frame painting from GFrame to StylePainter.Andreas Kling
This way it can be used by others who might not have a GFrame object.
2019-04-10LibGUI: Turn GTextBox into a wrapper around a single-line GTextEditor.Andreas Kling
2019-04-10GSpinBox: Move increment/decrement button within the widget frame.Andreas Kling
2019-04-10GWidget: Make hit testing respect child z-order.Andreas Kling
This was as simple as iterating the children in reverse order. Duh. :^)
2019-04-10LibGUI: Repaint GScrollBar without hover highlight immediately on leave.Andreas Kling
2019-04-10GSpinBox: Put nice little arrow glyphs on the buttons.Andreas Kling
2019-04-09LibGUI: Add a spinbox widget.Andreas Kling
This is essentially a combo widget containing a single-line GTextEditor and two buttons for increment and decrement. The GTextEditor::on_change callback is hooked to prevent non-numeric input but it's not entirely perfect since that callback is asynchronous. This will work until we have some more sophisticated input validation mechanism though.
2019-04-09GTextEditor: Add GTextEditor::on_change callback for when content changes.Andreas Kling
2019-04-08LibGUI+WindowServer: Add support for GWidget tooltips.Andreas Kling
Any GWidget can have a tooltip and it will automatically pop up below the center of the widget when hovered. GActions added to GToolBars will use the action text() as their tooltip automagically. :^)
2019-04-08LibGUI: Move GSocketAddress to its own file.Andreas Kling
2019-04-08Taskbar: Replace TaskbarWidget with a simple GFrame.Andreas Kling
There's no need for a custom widget here, at least not now.
2019-04-08LibGUI: Make GSocket connection asynchronous.Andreas Kling
Now connect() will return immediately. Later on, when the socket is actually connected, it will call GSocket::on_connected from the event loop. :^)
2019-04-08GHttp: Rename GHttpNetworkJob => GHttpJob. And tidy up a little bit.Andreas Kling
2019-04-07GHttp: Fix little bug in HTTP header parsing.Andreas Kling
2019-04-07GIODevice: Remove accidentally committed debug spam.Andreas Kling
2019-04-07GHttp: Work on bringing this up.Andreas Kling
2019-04-07Start working on a Downloader app and backing classes in LibGUI.Andreas Kling
LibGUI is slowly becoming LibKitchensink but I'm okay with this for now.
2019-04-06LibGUI: Always invalidate layout on GWidget child removal.Andreas Kling
This code can get a bit confused when the child is destroyed before we handle the ChildRemoved event. In those cases, the GChildEvent::child() getter will return nullptr as it's backed by a WeakPtr. To work around this issue, just always invalidate the layout for now. This can be made a lot tighter in the future.
2019-04-06GScrollBar: Add the same hover highlight effect as GButton.Andreas Kling
2019-04-06Taskbar: Show minimized window titles in [brackets].Andreas Kling
Had to plumb the minimization state from WindowServer to Toolbar in order to implement this.
2019-04-06LibGUI: GButton's caption should be drawn in the foreground color.Andreas Kling
2019-04-05WindowServer: Merge WM_WindowAdded and WM_WindowStateChanged.Andreas Kling
These events are identical, so it's silly to send both. Just broadcast window state changes everywhere instead, it doesn't matter when it was added as clients are learning about this asynchronously anyway.
2019-04-05AK: Revert Eternal<T> for now since it doesn't work as intended.Andreas Kling
2019-04-04Taskbar: Only include "Normal" windows in the taskbar window list.Andreas Kling
2019-04-04LibGUI: Use TextElision::Right for GButton captions.Andreas Kling
2019-04-04LibGUI: Allow specifying GButton text alignment.Andreas Kling
2019-04-04Taskbar: Plumb window active state from the WindowServer to the taskbar.Andreas Kling
2019-04-04LibGUI: Make it possible for GButton to be checkable.Andreas Kling
2019-04-04Taskbar: More bringup work. We now see a basic window list.Andreas Kling
2019-04-03Taskbar+LibGUI: More work on bringup.Andreas Kling
2019-04-03Taskbar: Start working on a taskbar app.Andreas Kling
I originally thought I would do this inside WindowServer, but let's try to make it as a standalone app that communicates with WindowServer instead. That will allow us to use LibGUI. :^)
2019-04-03WindowServer: Broadcast screen rect changes to all clients.Andreas Kling
GUI clients can now obtain the screen rect via GDesktop::rect().
2019-04-03AK: Add Eternal<T> and use it in various places.Andreas Kling
This is useful for static locals that never need to be destroyed: Thing& Thing::the() { static Eternal<Thing> the; return the; } The object will be allocated in data segment memory and will never have its destructor invoked.
2019-04-03GWindow: Don't ignore update(), it should repaint the whole window.Andreas Kling
This was causing some apps to have an empty window on startup since the call to update() in show() was effectively a no-op.
2019-04-02GInputBox: Make the input text box a bit taller.Andreas Kling
2019-04-02GSocket: Add a connect() overload that takes a hostname instead of an IP.Andreas Kling
2019-04-02Move NetworkOrdered.h to AK/ since it's used in both kernel and userspace.Andreas Kling
2019-04-02GTreeView: Support navigating the tree with the up/down keys.Andreas Kling
2019-04-02LibGUI: Switch to a resizing cursor when hovering or using a GSplitter.Andreas Kling
Also expose the various standard cursors on WSWindowManager so they can be reused by the override mechanism.
2019-04-01LibGUI: Fix broken doubleclick detection due to uninitialized GElapsedTimer.Andreas Kling
2019-03-31WindowServer: Add support for per-window override cursors.Andreas Kling
Use this to implement automatic switching to an I-beam cursor when hovering over a GTextEditor. :^)
2019-03-30Terminal+LibGUI: Make the terminal cursor blink.Andreas Kling
Added a GTimer class to help with this. It's just a simple GObject subclass that sets up an event loop timer and invokes a callback on timeout.
2019-03-30LibGUI: Fix bad initial layout of GScrollableWidget's scrollbars.Andreas Kling
If it's the first time we're laying these out, we can't rely on the width() or height() to be set, so instead use preferred_size().
2019-03-30LibGUI: Highlight the GSplitter when hovering over it.Andreas Kling