Commit graph

252 commits

Author SHA1 Message Date
Andreas Kling
383b2efc1f VisualBuilder: Remove debug spam. 2019-04-11 21:47:50 +02:00
Andreas Kling
707bfe848d VisualBuilder: Add a table view with the selected widget's properties. 2019-04-11 21:41:09 +02:00
Andreas Kling
f52e66ceda VisualBuilder: Add a widget registry and a property class.
I need somewhere to centralize the knowledge about the different widget
types available. And VBProperty represents a property key/value of arbitrary
type (it uses a GVariant for the value.)
2019-04-11 16:13:19 +02:00
Andreas Kling
ba4a726e8b VisualBuilder: Add a properties window. 2019-04-11 15:43:26 +02:00
Andreas Kling
93b76628a5 GGroupBox: Improve appearance with new FrameShape::Box style. 2019-04-11 14:27:31 +02:00
Andreas Kling
f0501a0102 VisualBuilder: Add GGroupBox.
The icon currently looks better than a real GGroupBox. I have to fix that.
2019-04-11 13:46:25 +02:00
Andreas Kling
07a9b2c4e6 VisualBuilder: Let's use 5 pixels for the grid size for now. 2019-04-11 13:16:18 +02:00
Andreas Kling
3f67298dad VisualBuilder: Add GScrollBar (and yes, an icon for it, too.) 2019-04-11 06:42:07 +02:00
Andreas Kling
f25c524f20 VisualBuilder: Add GCheckBox and GLabel, and draw icons for them, too. 2019-04-11 06:32:27 +02:00
Andreas Kling
b5d1cfef58 VisualBuilder: Add icons to the toolbox, and support for GProgressBar. 2019-04-11 06:08:06 +02:00
Andreas Kling
75c76f6692 VisualBuilder: Make it possible to insert widgets from the toolbox. 2019-04-11 04:13:11 +02:00
Andreas Kling
c71ece77fa VisualBuilder: Tweak grid size and add an (empty) toolbox window. 2019-04-11 04:01:17 +02:00
Andreas Kling
c6ffb3e2b8 VisualBuilder: Use real GWidgets instead of pretend VBWidgets.
That first design was the wrong idea. Instead, have VBWidget instantiate
a GWidget of the appropriate type and parent it to the VBForm.
We then use a new "greedy hit-testing" mechanism in GWidget to prevent any
mouse events from reaching the VBForm's children.

To paint the grabbers above the child widgets, I added a slightly hackish
but kind of neat second_paint_event() that is called after a widget has
painted all of his children. :^)
2019-04-11 03:34:37 +02:00
Andreas Kling
ead6524c0a VisualBuilder: Add the first VBWidget subclass: VBButtonWidget. :^) 2019-04-11 02:49:10 +02:00
Andreas Kling
d73f79a2d2 VisualBuilder: Allow resizing widgets using their grabbers. 2019-04-11 02:35:30 +02:00
Andreas Kling
3c8e53ef2b VisualBuilder: Work on selecting a widget and moving it around. 2019-04-11 01:59:07 +02:00
Andreas Kling
8268ece1bd VisualBuilder: Start working on an interface builder application.
It's tedious making interfaces programmatically. Let's make a program to
help us with this. :^)
2019-04-11 00:05:47 +02:00
Andreas Kling
d8e1545783 LibCore: Move LibGUI/GLock to LibCore/CLock. 2019-04-10 22:39:59 +02:00
Andreas Kling
ab1c84cf53 LibCore: Move HTTP classes from LibGUI to LibCore. 2019-04-10 22:28:10 +02:00
Andreas Kling
cfd6e6cc36 LibCore: Move GIODevice hierarchy from LibGUI to LibCore. 2019-04-10 20:22:23 +02:00
Andreas Kling
fc1d3074de LibCore: Move LibGUI/GNotifier to LibCore/CNotifier. 2019-04-10 17:35:43 +02:00
Andreas Kling
2f1f51b8ab LibCore: Move LibGUI/GObject to LibCore/CObject. 2019-04-10 17:01:54 +02:00
Andreas Kling
b8062f69d8 LibCore: Add CEvent and make LibGUI/GEvent inherit from it. 2019-04-10 16:56:55 +02:00
Andreas Kling
696ada2810 Taskbar: Don't unconditionally update buttons on every state change. 2019-04-10 16:39:23 +02:00
Andreas Kling
5e0577a042 Introduce LibCore and move GElapsedTimer => CElapsedTimer.
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-10 16:14:44 +02:00
Andreas Kling
d4818dd2dd WindowServer: Give windows a "background color" to use for missing parts.
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-10 14:29:47 +02:00
Andreas Kling
f6543c5946 LibGUI: Add a simple GGroupBox widget.
This needs some work on the visual side, but it gets the job done already.
2019-04-10 05:52:15 +02:00
Andreas Kling
b980c32662 FontEditor: Update the glyph map when changing a glyph's width. 2019-04-10 04:02:20 +02:00
Andreas Kling
f5c295ecc5 FontEditor: Add a "Glyph width:" label and align some things. 2019-04-10 03:51:03 +02:00
Andreas Kling
4ab0cd5d4c LibGUI: Move frame painting from GFrame to StylePainter.
This way it can be used by others who might not have a GFrame object.
2019-04-10 03:43:46 +02:00
Andreas Kling
e61dd994df FontEditor: Tighten the window size a bit. 2019-04-10 03:14:17 +02:00
Andreas Kling
313ac51832 LibGUI: Turn GTextBox into a wrapper around a single-line GTextEditor. 2019-04-10 03:08:29 +02:00
Andreas Kling
981623f4ee FontEditor: Convert the glyph map and editor widgets to be GFrames. 2019-04-10 02:43:57 +02:00
Andreas Kling
4c0f586f2b LibGUI: Add a spinbox widget.
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-09 16:29:00 +02:00
Andreas Kling
d6ff64db00 Launcher: Add tooltips to LauncherButtons. 2019-04-09 02:21:24 +02:00
Andreas Kling
93a4a4c597 Taskbar: Replace TaskbarWidget with a simple GFrame.
There's no need for a custom widget here, at least not now.
2019-04-08 17:17:16 +02:00
Andreas Kling
6d5a54690e LibGUI: Make GSocket connection asynchronous.
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-08 04:56:11 +02:00
Andreas Kling
8f30657390 Start working on a Downloader app and backing classes in LibGUI.
LibGUI is slowly becoming LibKitchensink but I'm okay with this for now.
2019-04-07 14:36:10 +02:00
Andreas Kling
f2580dcfeb FontEditor: Remove weird focus rects and optimize repaint while drawing.
I added focus rects to these widgets because I had just started working on
focus support and I was excited but it doesn't really make sense for these
things to have focus rects. :^)

While I was here I also optimized the repaint code to only update the edited
glyph in the glyph map when editing its pixels.
2019-04-06 15:28:06 +02:00
Andreas Kling
ef9fbef4c6 Taskbar: Show minimized window titles in [brackets].
Had to plumb the minimization state from WindowServer to Toolbar in order
to implement this.
2019-04-06 00:58:30 +02:00
Andreas Kling
99b98dc653 WindowServer: Merge WM_WindowAdded and WM_WindowStateChanged.
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-05 15:01:28 +02:00
Andreas Kling
6280dee625 Taskbar: Make the window buttons slightly wider. 2019-04-04 20:12:09 +02:00
Andreas Kling
64a5abf8db Taskbar: Only include "Normal" windows in the taskbar window list. 2019-04-04 16:23:23 +02:00
Andreas Kling
ce7341be87 WindowServer: Add WM_SetActiveWindow client request and use it in Taskbar.
This makes it possible for Taskbar to switch windows. :^)
2019-04-04 14:38:53 +02:00
Andreas Kling
8a50218190 Taskbar: Left-align the text on taskbar window buttons. 2019-04-04 14:16:09 +02:00
Andreas Kling
7b1384c4ef Taskbar: Plumb window active state from the WindowServer to the taskbar. 2019-04-04 13:19:26 +02:00
Andreas Kling
5ec121e194 Taskbar: Tweak margins to look just right. 2019-04-04 01:51:11 +02:00
Andreas Kling
e785dda3e7 Taskbar: TaskbarWidget doesn't need a custom paint_event(). 2019-04-04 01:50:04 +02:00
Andreas Kling
96104b5524 Taskbar: More bringup work. We now see a basic window list. 2019-04-04 01:44:35 +02:00
Andreas Kling
f1c5ee2c10 Taskbar: Remove an accidentally committed dependency file. 2019-04-03 23:48:40 +02:00