Commit graph

272 commits

Author SHA1 Message Date
Andreas Kling c1474e594e LibHTML: Support the :first-child and :last-child pseudo classes 2019-12-16 19:34:52 +01:00
Andreas Kling e339c2bce8 WindowServer: Disambiguate "dragging" a bit, use "moving" more instead
Windows that are being moved around by the user are now called "moving"
windows instead of "dragging" windows, to avoid confusion with the
drag and drop stuff.
2019-12-08 23:41:02 +01:00
Andreas Kling 39c2d04a9b WindowServer: Add a dedicated drag cursor 2019-12-08 20:29:14 +01:00
Sergey Bugaev f2546d15ce Taskbar: Add a quick launch bar
This is a tiny bar at the left of the taskbar where you can put
your most used apps to launch them with a single click. In a way,
it's another replacement for the Launcher, in addition to the app
menu. Unlike the launcher and the menu, it's not meant to be the
primary way to launch apps; it's only a faster way to launch a few
most often used utilities.
2019-12-04 14:32:15 +01:00
Andreas Kling 6d1c4ae5a9 LibHTML: Implement basic <form> and <input> element support
This patch adds "submit" inputs and default (text box) inputs, as well
as form elements that can be submitted.

Layout of input elements is implemented via a new LayoutWidget class
that allows you to put an arbitrary GWidget in the layout tree.
At the moment, the DOM node sets the initial size of the LayoutWidget,
and then the positioning is done by the normal layout algorithm.

We also now support submitting a <form method="GET">, which does a full
replacing load with a URL based on the form's action + a query string
built from the name/value of input elements within the submitted form.

This is pretty neat! :^)
2019-11-25 21:21:55 +01:00
Andreas Kling 10d67879c3 Base: Import the 1st and 2nd Acid tests for web standards compliance
Getting these to work will take a lot of work, but most of it will be
pretty fun, so I guess we start by importing them. :^)
2019-11-25 17:48:51 +01:00
Andreas Kling 05b1ecf1b1 LibHTML: Draw each CSS border edge separately with their own style
The borders still look very wrong with any border-width other than 1,
but at least we can see that they have the right color, and end up in
mostly the right place :^)
2019-11-25 13:17:14 +01:00
Andreas Kling 61ba19f031 LibHTML: Handle stand-alone attribute selectors
A selector like "[foo]" is now parsed as a universal selector component
with an attribute match type. Pretty neat :^)
2019-11-21 20:19:00 +01:00
Andreas Kling 8946e50986 LibHTML: Implement some attribute selector support
This patch adds a[foo] and a[foo=bar] attribute selectors.

Note that an attribute selector is an optional part of a selector
component, and not a component on its own.
2019-11-21 20:07:43 +01:00
Andreas Kling 7b3f1218be little: Make this build by default, and add some curlies 2019-11-18 19:01:50 +01:00
Andreas Kling dd2900eda0 Launcher: Remove the Launcher app, and all hacks in support of it
The Launcher's functionality has been replaced by the app shortcuts in
the system menu.

There were various window management hacks to ensure that the launcher
stayed below all other windows while also being movable, etc.
2019-11-11 13:13:08 +01:00
Marcel Schneider edd0959c83 Base: Add link to bettermotherfuckingwebsite in welcome.html 2019-11-10 12:52:23 +01:00
Hüseyin ASLITÜRK aba6e6de6a FileManager: Remember my last position and size. 2019-11-09 20:50:53 +01:00
Andreas Kling d016d5e365 HackStudio: Start fleshing out the GUI for a GUI designer :^)
I'll be reconstructing parts of the VisualBuilder application here and
then we can retire VisualBuilder entirely once all the functionality
is available in HackStudio.
2019-11-09 00:41:00 +01:00
Andreas Kling 306cd0d840 Base: Add a local copy of bettermotherfuckingwebsite.com for testing 2019-11-07 21:40:04 +01:00
Hüseyin ASLITÜRK e2f0ac13a4 FileManager: Remember my last view mode (#731) 2019-11-04 17:27:56 +01:00
Andreas Kling 7c71040ba9 HackStudio: Show documentation preview in tooltip on identifier hover
When hovering over a C++ token that we have a man page for, we now show
the man page in a tooltip window.

This feels rather bulky at the moment, but the basic mechanism is quite
neat and just needs a bunch of tuning.
2019-10-30 20:28:44 +01:00
Andreas Kling 307cbf83c3 HackStudio: Start building a C++ lexer to help with syntax highlighting 2019-10-25 19:52:44 +02:00
Andreas Kling 5a2dd451b5 HackStudio: Add "little" test project file list 2019-10-23 12:28:25 +02:00
Andreas Kling 708543c3d6 HackStudio: Add a simple "Run" action
Ctrl+R will now execute "make run" in the project directory. :^)
2019-10-22 22:18:46 +02:00
Andreas Kling a6b153abf1 HackStudio: Show the currently open file in bold (in the project list)
Also import a little default C++ project called "little" :^)
2019-10-22 21:38:58 +02:00
Andreas Kling eb77e680ed LibHTML: Implement "text-align: justify"
In order for this to work nicely, I made the line box classes use float
instead of int for its geometry information.

Justification works by distributing all of the whitespace on the line
(including the trailing whitespace before the line break) evenly across
the spaces in-between words.

We should probably use floating point (or maybe fixed point?) for all
the layout metrics stuff. But one thing at a time. :^)
2019-10-20 12:55:55 +02:00
Andreas Kling c41bae3d54 LibHTML+Browser: Support scrolling to anchor with <a href="#foo">
This patch implements basic support for <a href="#foo"> fragment links.

To figure out where we actually want to scroll to, we have to do
something different based on the layout node's box type. So if it's a
regular LayoutBox we can just use the LayoutBox::position().

However, if it's an inline layout node, we use the position of the
first line box fragment in the containing block contributed by this
layout node or one of its descendants.
2019-10-20 10:07:26 +02:00
Andreas Kling 5a34225999 LibHTML: Implement basic tiled background image support
It's now possible to set a page background image via <body background>.
Also, HtmlView now officially handles rendering the body element's
background (color, image or both.) LayoutBox is responsible for all
other background rendering.

Note that it's not yet possible to use CSS background-image properties
directly, since we can't parse them yet. :^)
2019-10-19 11:49:46 +02:00
Andreas Kling 06f084fedd LibHTML: Add the <center> element
This is really just "center { display: block; text-align: center; }" in
the default stylesheet, but it totally works!
2019-10-16 20:33:00 +02:00
Andreas Kling 6dbba6ad85 LibHTML: Implement CSS text-align: left/center/right
This was easier than I imagined; we just shift each line box to the
left based on the alignment and the remaining space on each line. :^)
2019-10-16 20:32:17 +02:00
Andreas Kling 61ef17b87a LibHTML: Implement basic :hover pseudo-class support
This is currently very aggressive. Whenever the Document's hovered node
changes, we invalidate all style and do a full relayout.

It does look cool though. So cool that I'm adding it to the default
stylesheet. :^)
2019-10-14 17:55:04 +02:00
Andreas Kling 08209cc665 LibHTML: Handle comments in the CSS parser
Turn consume_whitespace() into consume_whitespace_or_comments() and
have it swallow /* comments */ as well.
2019-10-13 00:28:15 +02:00
Andreas Kling b083a233d8 LibHTML: Add Comment and CharacterData nodes and improve HTML parsing
This patch adds the CharacterData subclass of Node, which is now the
parent class of Text and a new Comment class.

A Comment node is one of these in HTML: <!--hello friends-->
Since these occur somewhat frequently on the web, we need to be able
to parse them.

This patch also adds a child rejection mechanism to the DOM tree.
Nodes can now override is_child_allowed(Node) and return false if they
don't want a particular Node to become a child of theirs. This is used
to prevent Document from taking on unwanted children.
2019-10-12 23:34:05 +02:00
Andreas Kling 6242459c0f LibHTML: Implement the <br> element for line breaking
The <br> element will produce a special LayoutBreak node in the layout
tree, which forces a break in the line layout whenever encountered.

This patch also makes LayoutBlock use the current line-height as the
minimum effective height for each line box. This ensures that having
multiple <br> elements in a row doesn't create 0-height line boxes.
2019-10-12 13:47:49 +02:00
Andreas Kling 76266862d1 LibGUI+WindowServer: Add a "Hand" cursor to the standard cursors 2019-10-10 21:35:12 +02:00
Andreas Kling fdbad6284c LibHTML: Implement the <blink> element
Just in time for Serenity's 1st birthday, here is the <blink> element!

This patch adds a bunch of different mechanisms to enable partial
repaints of the layout tree (LayoutNode::set_needs_display()))
It also adds LayoutNode::is_visible(), which can be toggled to prevent
a LayoutNode from rendering anything (it still takes up space though.)
2019-10-09 21:25:29 +02:00
Andreas Kling 3be6d1aff0 LibHTML: Add ResourceLoader to support protocol-agnostic URL loading
We now support loading both file:// and http:// URLs. Feel free to
visit http://www.serenityos.org/ and enjoy the fancy good times. :^)
2019-10-08 19:37:15 +02:00
Andreas Kling 71e8ddcd1c LibHTML: Start adding support for <link rel="stylesheet">
This patch adds basic support for external stylesheets. It currently
only works with file:// URLs.

We do a synchronous full relayout after loading a stylesheet, which is
definitely on the aggressive side, but it gives us something to work
on improving. :^)
2019-10-07 19:06:47 +02:00
Andreas Kling 122d12e617 LibDraw: Parse some more color string formats found on the web
This patch adds the 17 color names from CSS2.1, as well as support for
the "#rgb" shorthand where each component is a hex digit that gets
multiplied by 17.
2019-10-06 21:40:14 +02:00
Andreas Kling bedb00603c LibHTML: Add adjacent (+) and general (~) sibling combinators
This patch implements two more selector features:

- "div + p" matches the <p> sibling immediately after a <div>.
- "div ~ p" matches all <p> siblings after a <div>.
2019-10-06 19:59:07 +02:00
Andreas Kling cad326f323 LibHTML: Implement immediate-child selectors (#foo > #bar) 2019-10-06 15:41:16 +02:00
Andreas Kling 156b35742a LibHTML: Implement matching for descendant selectors
The CSS engine now correctly matches selectors like "#foo #bar #baz".
2019-10-06 15:34:42 +02:00
Conrad Pankoff 6eef6f4f1d Base: Add a page for image features to the www directory 2019-10-06 14:33:00 +02:00
Andreas Kling 31e361b827 Base: Add a little welcome page for the browser at ~/www/welcome.html 2019-10-05 10:29:52 +02:00
Andreas Kling 3feb452bf4 Base: Add a little HTML test for presentational hints 2019-10-04 21:15:52 +02:00
Andreas Kling 53db492aba Base: Rename the "html" test directory to "www"
It was conflicting with the html program and I'm too lazy to deal with
that right now. :^)
2019-10-01 20:16:09 +02:00
Andreas Kling 17c06d7c9a Base: Move HTML test pages into /home/anon/html
Also add a simple test page for inline style sheets.
2019-09-29 18:07:36 +02:00
Andreas Kling b5c587a106 Base: Add some title attributes to the small HTML test file :^) 2019-09-29 12:26:15 +02:00
Andreas Kling 3ed41abba4 Base: Add a little hyperlink to the small HTML test page
This will be useful for testing rendering, hit testing, etc.
2019-09-28 23:00:47 +02:00
Sergey Bugaev cbdda91065 ProcessManager: Rename it to SystemMonitor
This is a more appropriate name now that it does a lot
more than just manage processes ^)
2019-08-14 14:28:45 +02:00
Andreas Kling 57c92f943b Base: Draw some new icons for various apps, tweak others
The following apps get new icons:

- IRCClient
- ProcessManager
- Snake
- Terminal
- TextEditor

...and the PaintBrush icon has its saturation increased a bit.
Also remove FontEditor from the Launcher default settings since it
doesn't really belong in the set of commonly used apps.
2019-08-11 21:07:47 +02:00
Andreas Kling fdd9aa959b ChanViewer: Make a 32x32 icon :^) 2019-08-11 21:07:47 +02:00
Conrad Pankoff 6f75d96689 Launcher: Add ChanViewer to default config 2019-08-06 15:05:56 +02:00
Andreas Kling 173edcc5ae Piano: Add to Launcher with a new 32x32 icon. :^) 2019-07-13 23:01:47 +02:00
Christopher Dumas e9ab282cfd Launcher: Reformat config a little bit (#279) 2019-07-03 05:53:44 +02:00
Andreas Kling d2ec64ace0 Launcher: The "Launcher" config file group shouldn't take up visual space.
Also tweak Launcher.ini since CConfigFile bools are 1/0 rather than
true/false. We should probably use true/false. Or switch over to JSON.
2019-07-02 21:49:00 +02:00
Christopher Dumas 8a2123e385 Launcher: Vertical/Horizontal option 2019-07-02 13:29:14 +02:00
Andreas Kling 77dc11f481 ProcessManager: Add app icon. 2019-06-30 09:31:47 +02:00
Andreas Kling 806b91b444 PaintBrush: Add a simple app icon.
I ended up drawing four crayons for the app icon. This is not a great fit
for the app name. But uh, we'll figure this out somehow. :^)
2019-06-29 22:32:34 +02:00
Andreas Kling b1d113e32a AK: Make a tiny JSON unit test based on a saved VisualBuilder form. 2019-06-29 12:07:42 +02:00
Andreas Kling f8a86b5164 LibHTML: Basic element attribute parsing. 2019-06-15 21:08:36 +02:00
Andreas Kling 581d6b00c8 LibHTML: Start working on a very simplified HTML parser. 2019-06-15 20:21:57 +02:00
Andreas Kling 4edc73ad1f Terminal: Use the visual bell by default. 2019-06-07 08:45:39 +02:00
Christopher Dumas 908d9458c7 WindowServer: New API for Scaled Blit 2019-06-06 18:35:00 +02:00
Christopher Dumas 77185c1541 fixed ini WM config 2019-05-27 21:40:53 +02:00
Christopher Dumas 3e26faa226 removed extra impl of scaling 2019-05-27 21:40:53 +02:00
Christopher Dumas da9c70598f centered backgrounds are now an option 2019-05-27 21:40:53 +02:00
Christopher Dumas aa50e5bb13 tiled backgrounds no longer has strange off-by-one pixel errors 2019-05-27 21:40:53 +02:00
Christopher Dumas c23882dde1 can now tile background and made sure the IRC choose server popup still works 2019-05-27 21:40:53 +02:00
Christopher Dumas e3f81bce49 IRC client setttings, Terminal settings, more WM settings 2019-05-27 21:40:53 +02:00
Christopher Dumas 63486b8438 implemented settings for window manager. 2019-05-27 21:40:53 +02:00
Christopher Dumas d4a16d6031 Network stack is now configurable, and resolution is also configurable, but loading cursors causes a page-fault? 2019-05-27 21:40:53 +02:00
Andreas Kling e1f922ded2 Base: Add a 32x32 icon for Minesweeper. 2019-05-25 18:46:25 +02:00
Andreas Kling 9cfd674a75 Base: Make a 32x32 icon for Snake. 2019-05-25 14:21:08 +02:00
Christopher Dumas dd84dcf31f Launcher loads applications from Launcher.ini, is started by default, and is resized automatically
Co-Authored-By: Andreas Kling <awesomekling@gmail.com>
2019-05-24 20:40:09 +02:00
Andreas Kling 5e8d6b1bf4 Base: Rename /users to /home.
I didn't like seeing /users next to /usr. /home looks nicer.
2019-02-10 11:18:12 +01:00