Commit graph

8909 commits

Author SHA1 Message Date
Brendan Coles
f8e3aa1ad9 Base: Add Redmond theme 2020-04-18 17:49:50 +02:00
Andreas Kling
e3b450005f Kernel: Remove CommandLine::get() in favor of lookup()
lookup() returns an Optional<String> which allows us to implement easy
default values using lookup(key).value_or(default_value);
2020-04-18 14:22:42 +02:00
Stephan Unverwerth
cebb619f8e LibJS: Fix parsing of IfStatement, fixes #1829 2020-04-18 14:04:24 +02:00
Andreas Kling
3072f9fd82 LibJS: Move the empty object shape from Interpreter to GlobalObject
The big remaining hurdle before a GlobalObject-agnostic Interpreter is
the fact that Interpreter owns and vends the GlobalObject :^)
2020-04-18 13:59:20 +02:00
wilsonk
75f6454de7
AK: Dual pivot quicksort implementation (#1838) 2020-04-18 13:58:49 +02:00
Sergey Bugaev
54550365eb Kernel: Use shared locking mode in some places
The notable piece of code that remains to be converted is Ext2FS.
2020-04-18 13:58:29 +02:00
Sergey Bugaev
05ba4295e9 Kernel: Introduce shared locking mode
A Lock can now be held either in shared or exclusive mode. Multiple threads can
hold the same lock in shared mode at one time, but if any thread holds the lock
in exclusive mode, no other thread can hold it at the same time in either mode.
2020-04-18 13:58:29 +02:00
Sergey Bugaev
2f15449531 Kernel: Compactify FileDescrption
The next commit is going to make it bigger again by increasing the size of Lock,
so make use of bitfields to make sure FileDescription still fits into 64 bytes,
and so can still be allocated with the SlabAllocator.
2020-04-18 13:58:29 +02:00
Andreas Kling
9a109128f8 Cube: Two small tweaks
I noticed these when playing with the demo locally:

- Use RGB32 instead of RGBA32 for the bitmap buffer. This avoids some
  flickering that would sometimes occur.

- Clip the gradient fill to the widget rect rather than the painter
  clip rect. In practice, the painter was always clipped to the widget
  rect here, but it seems logical to say "fill widget with gradient."
2020-04-18 13:46:55 +02:00
Andreas Kling
fca08bd000 LibJS: Move builtin prototypes to the global object
This moves us towards being able to run JavaScript in different global
objects without allocating a separate GC heap.
2020-04-18 13:24:45 +02:00
Stephan Unverwerth
cbcf317e76 LibGfx: Fix draw_triangle() clipping calculations 2020-04-18 13:24:34 +02:00
bcoles
e2f0e36bdb
Base: Add Browser to QuickLaunch (#1836) 2020-04-18 12:36:00 +02:00
Linus Groh
d14ddb6461 LibJS: Implement nullish coalescing operator (??) 2020-04-18 12:34:13 +02:00
Stephan Unverwerth
1806592d58 Demos: Add 3D Cube Demo
This renders a spinning 3D cube and demonstrates the 3D math classes
from LibGfx.
2020-04-18 12:28:54 +02:00
Stephan Unverwerth
2dcc38d7bf LibGfx: Add Vector3 and Matrix4x4 classes
This adds two templated 3D math classes. They have already been typedf'd
as FloatVector3, DoubleVector3, FloatMatrix4x4 and DoubleMatrix4x4
2020-04-18 12:28:54 +02:00
Stephan Unverwerth
acd4676803 LibGfx: Add draw_triangle() for drawing filled triangles 2020-04-18 12:28:54 +02:00
Andreas Kling
2b7fc08db3 Documentation: Add section about structs vs. classes to CodingStyle.md 2020-04-18 11:14:05 +02:00
Andreas Kling
30de1f610d LibJS: Use enumerator macro to mark all constructors in GlobalObject
We were forgetting to mark the String constructor! So this patch fixes
that and ensures we won't forget anyone in the future.
2020-04-18 11:02:05 +02:00
Andreas Kling
bc1ece7f37 LibJS+LibWeb: Pass prototype to Object constructor
Everyone who constructs an Object must now pass a prototype object when
applicable. There's still a fair amount of code that passes something
fetched from the Interpreter, but this brings us closer to being able
to detach prototypes from Interpreter eventually.
2020-04-18 11:00:55 +02:00
Andreas Kling
f6d57c82f6 LibJS: Pass prototype to Function constructors 2020-04-18 10:28:22 +02:00
Andreas Kling
205ac0090d LibJS: Pass prototype to Error constructors 2020-04-18 10:28:22 +02:00
Andreas Kling
0df4d2823a LibJS: Pass prototype to Date constructor 2020-04-18 10:28:22 +02:00
Andreas Kling
2a15323029 LibJS: Pass prototype to BooleanObject constructor 2020-04-18 10:28:22 +02:00
Andreas Kling
298c606200 LibJS: Pass prototype to StringObject constructor 2020-04-18 10:28:22 +02:00
Andreas Kling
cf702a13b9 LibJS: Pass prototype to NumberObject constructor 2020-04-18 10:28:22 +02:00
Andreas Kling
2d7b495244 LibJS: Make Array constructor take its prototype
Let's start moving towards native JS objects taking their prototype as
a constructor argument.

This will eventually allow us to move prototypes off of Interpreter and
into GlobalObject.
2020-04-18 10:28:22 +02:00
Read H
ee5816b9c8 LibC: getprotoent() family of functions
This commit implements the getprotoent() family of functions, including

getprotoent()
getprotobyname()
getprotobynumber()
setprotoent()
endprotoent()

This implementation is very similar to the getservent family of functions,
which is what led to the discovery of a bug in the process of reading the aliases.
The ByteBuffer for the alias strings didn't include a null terminating character,
this was fixed for both the protoent and servent family of functions by appending a
null character to the end of them before adding them to the alias lists.
2020-04-18 10:11:55 +02:00
Read H
0ef2efac7c Base files: Add protocols file
This commit adds the standard /etc/protocols file to
the base files to be used by netdb's protoent family of functions.
2020-04-18 10:11:55 +02:00
Kesse Jones
4931c0feda LibJS: Add Array.prototype.concat 2020-04-17 16:14:28 +02:00
Stephan Unverwerth
63e1ea7819
LibJS: Add test for semicolon insertion (#1828) 2020-04-17 15:52:38 +02:00
Stephan Unverwerth
19cdda8000 LibJS: Fix semicolon insertion 2020-04-17 15:32:20 +02:00
Stephan Unverwerth
07f838dc4e LibJS: Implement automatic semicolon insertion 2020-04-17 15:22:31 +02:00
Stephan Unverwerth
b77ceecb02 AK: Add StringView::contains(char) 2020-04-17 15:22:31 +02:00
Nick Tiberi
1f6578ee0a LibWeb: Implement JS confirm() 2020-04-17 13:41:03 +02:00
Brendan Coles
0a483cf677 ProtocolServer: did_finish_download: Do not create 0 byte shared buffer
`PSClientConnection::did_finish_download()` no longer tries to create
a zero byte shared buffer when `download.payload().data()` is zero
bytes in length.

Fixes #1821
2020-04-17 13:30:13 +02:00
Andreas Kling
d5fb916bf0 LibWeb: Implement CanvasRenderingContext2D::stroke_rect() with lines
Stroking rects by drawing individual lines gives us line width support
without having to extend the Painter::draw_rect() code. :^)
2020-04-16 21:12:14 +02:00
Andreas Kling
ecd900b4b4 LibGfx: Add FloatPoint::to_int_point() 2020-04-16 21:11:13 +02:00
Andreas Kling
0d93e249c3 LibWeb: Add some basic path drawing functionality to the canvas element
This patch adds the following methods to CanvasRenderingContext2D:

- beginPath()
- moveTo(x, y)
- lineTo(x, y)
- closePath()
- stroke()

We also add the lineWidth property. :^)
2020-04-16 21:06:03 +02:00
Andreas Kling
60c2e41079 LibGfx: Add Gfx::Path, a basic 2D path with <canvas> semantics
This will be used to implement painting of 2D paths. This first patch
adds support for line_to(), move_to() and close().

It will try to have the same semantics as the HTML <canvas> element.

To stroke a Path, simply pass it to Painter::stroke_path().
2020-04-16 21:04:46 +02:00
Andreas Kling
72df9c7417 LibJS: Dump a JavaScript backtrace when throwing exceptions 2020-04-16 20:23:03 +02:00
Andreas Kling
2db2b8b0ef AK: Add FlyString::is_empty() 2020-04-16 20:22:54 +02:00
Andreas Kling
905519bc76 Kernel: Fix dumb logic typo in HardwareTimer::handle_irq() 2020-04-16 18:53:38 +02:00
Andreas Kling
c891c87cb5 Kernel: Rename HardwareTimer::change_function() => set_callback()
Also make it non-virtual since nothing needs to override it.
2020-04-16 18:51:39 +02:00
Andreas Kling
b035267afa Kernel: Remove "stale callback" concept from time management
If a hardware timer doesn't have a callback registered, it's now simply
represented by a null m_callback.
2020-04-16 18:50:22 +02:00
Andreas Kling
4b1f056e3a Kernel: Rename HardwareTimer::m_function_to_call => m_callback 2020-04-16 18:49:20 +02:00
Andreas Kling
1e89f7d64e Kernel: Remove an unnecessary indirection between timer and scheduler
We don't need a wrapper Function object that just forwards the timer
callback to the scheduler tick function. It already has the same
signature, so we can just plug it in directly. :^)

Same with the clock updating function.
2020-04-16 18:49:20 +02:00
Andreas Kling
44d58b85ef Kernel: Simplify the way we pass HardwareTimers around a bit
Instead of passing around indices into the m_hardware_timers vector,
just pass around a HardwareTimer* instead.
2020-04-16 18:49:20 +02:00
Kesse Jones
b0b204822f LibJS: Add String.prototype.substring 2020-04-16 18:47:24 +02:00
Andreas Kling
60d1ef6af4 LibJS: Remove no-op code in ScriptFunction constructor 2020-04-16 16:58:44 +02:00
Andreas Kling
6833004a45 js: Tweak the live syntax highlighting colors a bit 2020-04-16 16:37:32 +02:00