1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-08-05 19:17:46 +00:00
Commit graph

23541 commits

Author SHA1 Message Date
Andreas Kling
2905e10513 LibGUI+TextEditor: Make TextDocument modified state track undo stack
This was quite unreliable before. Changes to the undo stack's modified
state are now reflected in the document's modified state, and the
GUI::TextEditor widget has its undo/redo actions updated automatically.

UndoStack is still a bit hard to understand due to the lazy coalescing
of commands, and that's something we should improve upon (e.g with more
explicit, incremental command merging.) But for now, this is a nice
improvement and undo/redo finally behaves in a way that feels natural.
2021-05-08 13:49:34 +02:00
Andreas Kling
ee19f7c0aa LibGUI: Use UndoStack::on_state_change inside TextDocument/TextEditor
Have TextDocument listen for state changes on the internal undo stack,
and forward those to all clients via a new virtual function.

This simplifies updating the can_undo / can_redo states of TextEditor.
2021-05-08 13:49:34 +02:00
Andreas Kling
0cb6103928 LibGUI: Add UndoStack::on_state_change hook
This will allow clients to react to the undo stack changing state.
It's invoked when the stack or clean index are changed.
2021-05-08 13:49:34 +02:00
Andreas Kling
74a4571f02 LibGUI: Reverse internal direction of GUI::UndoStack
The undo stack was very difficult to understand as it grew by adding
new undo commands to the front of the internal vector. This meant we
had to keep updating indices as the stack grew and shrank.

This patch makes the internal vector grow by appending instead.
2021-05-08 13:49:34 +02:00
Andreas Kling
2ef4fbc5c1 Revert "LibGUI: Fix undo stack reporting wrong modified state"
This reverts commit 0b7e19e2bb.

Let's reverse the direction of the undo stack to fix the confusion.
2021-05-08 13:48:15 +02:00
Linus Groh
67b47013d2 LibWeb: Use list-style-type circle/square for nested unordered lists
An idea shamelessly stolen from other UAs :^)
2021-05-08 10:49:16 +01:00
Carlos César Neves Enumo
0b7e19e2bb LibGUI: Fix undo stack reporting wrong modified state
Since the `redo` action never goes back to `index: 0`,
we have to mark the clean index as being the current
non-empty index for the undo/redo navigation to work properly.

The problem is that if we never `undo`, the stack index stays at zero,
which is the empty container waiting for commands. In that situation,
if we save the document, it registers the clean index as being 1
(the non-empty index) but because the stack index has never left zero,
the document was being reported as modified, being out of sync with
the window modified state.
2021-05-08 09:55:45 +01:00
Jesse Buhagiar
e8cd89a538 LibGL: Move polygon clipping to Clipper class
This code has also been optimised to be much more memory
friendly by removing a _lot_ of extraneous copies. The result
is that, when profiled, it's around 8x faster than the previous
implementation.

Co-Authored-By: Ali Mohammad Pur <ali.mpfard@gmail.com>
2021-05-08 10:13:22 +02:00
Stephan Unverwerth
5ff248649b LibGL: Add software rasterizer
This is based mostly on Fabian "ryg" Giesen's 2011 blog series
"A trip through the Graphics Pipeline" and Scratchapixel's
"Rasterization: a Practical Implementation".

The rasterizer processes triangles in grid aligned 16x16 pixel blocks,
calculates barycentric coordinates and edge derivatives and interpolates
bilinearly across each block.

This will theoretically allow for better utilization of modern processor
features such as SMT and SIMD, as opposed to a classic scanline based
triangle rasterizer.

This serves as a starting point to get something on the screen.
In the future we might look into properly pipelining the main loop to
make the rasterizer more flexible, enabling us to enable/disable
certain features at the block rather than the pixel level.
2021-05-08 10:13:22 +02:00
Stephan Unverwerth
e6c0600499 LibGL: Add back face culling functions
Adds all needed functions to support back face culling
and implements back face culling in the SoftwareGLContext.
2021-05-08 10:13:22 +02:00
Ali Mohammad Pur
eff3c8a954 LibGL: Implement glColor4(ub,f)v 2021-05-08 10:13:22 +02:00
Ali Mohammad Pur
193b53344a LibGL: Implement glVertex2f(v) 2021-05-08 10:13:22 +02:00
Ali Mohammad Pur
6b11a5688d LibGL: Implement glVertex3fv 2021-05-08 10:13:22 +02:00
Ali Mohammad Pur
f601f12801 LibGL: Implement glOrtho and underlying functions 2021-05-08 10:13:22 +02:00
Jesse Buhagiar
f07a7f7b94 LibGL: Impement glLoadMatrixf and underlying function 2021-05-08 10:13:22 +02:00
Jesse Buhagiar
ea0df0b5da LibGL: Implement glScalef 2021-05-08 10:13:22 +02:00
Jesse Buhagiar
55b3ecfbd3 LibGL: Check for matrix stack over/underflow
We now correctly set the gloabl error if we detect that
a matrix stack overflow will occur in `glPushMatrix` or
`glPopMatrix`
2021-05-08 10:13:22 +02:00
Jesse Buhagiar
1959efe063 LibGL: Set GL error on some calls during begin/end
According to the OpenGL 2.x spec, some calls will set the current
global error to `GL_INVALID_OPERATION` if they are used during
a `glBegin`/`glEnd` block.
2021-05-08 10:13:22 +02:00
Jesse Buhagiar
e537e2690a LibGL: Implement glGetError and underlying function
This implements `glGetError` and correctly sets the state machine's
error macro (similar to LibC `errno`) when an invalid operation is
performed. This is reset on completion of a successful operation.
2021-05-08 10:13:22 +02:00
Jesse Buhagiar
4807d32139 LibGL: Implement a basic OpenGL 1.x compatible library
This currently (obviously) doesn't support any actual 3D hardware,
hence all calls are done via software rendering.

Note that any modern constructs such as shaders are unsupported,
as this driver only implements Fixed Function Pipeline functionality.

The library is split into a base GLContext interface and a software
based renderer implementation of said interface. The global glXXX
functions serve as an OpenGL compatible c-style interface to the
currently bound context instance.

Co-authored-by: Stephan Unverwerth <s.unverwerth@gmx.de>
2021-05-08 10:13:22 +02:00
Hendiadyoin1
1424c4651f LibGfx: Constexpr Matrices and Vectors 2021-05-08 10:13:22 +02:00
Stephan Unverwerth
09f850728a LibGfx: Add some missing operators to Vector3 Vector4 and Matrix4x4 2021-05-08 10:13:22 +02:00
Stephan Unverwerth
0c5d61ae88 LibGfx: Add Vector4 class 2021-05-08 10:13:22 +02:00
Stephan Unverwerth
b0e5e78a01 LibGfx: Mark Vector3 class final 2021-05-08 10:13:22 +02:00
Gunnar Beutner
eed6ce8b8b Profiler: Fix scrolling behavior
When resizing the timeline view the timelines should scroll to the
bottom when the resize operation reveals space that is beyond the
view.
2021-05-08 09:55:24 +02:00
Andreas Kling
295cc123c7 LibGUI: Rename UndoStack internals
Since we keep a stack of command combos, let's call entries on the
stack "Combo" instead of "UndoCommandsContainer".

And since it has a vector of commands, let's call it "commands"
instead of "m_undo_vector".
2021-05-08 08:53:37 +02:00
Brian Gianforcaro
4b8b8b91c2 LibTest: Convert Crash test runner to outln(..) 2021-05-08 00:04:10 +01:00
Brian Gianforcaro
7f51754780 LibTest: Expose new EXPECT_CRASH(..) macro for unit test assertions
Utilize the Crash type we imported into LibTest to support testing
of crash scenarios when testing all other components.
2021-05-08 00:04:10 +01:00
Brian Gianforcaro
4c0d3f47e1 LibTest: Move Crash testing facility from crash.cpp to LibTest 2021-05-08 00:04:10 +01:00
Idan Horowitz
2119e0fb3f LibCompress: Add a method that describes a Gzip Header
This can be used to display information about a gzip file that is
stored in it's header.
2021-05-07 23:22:07 +02:00
Tobias Christiansen
1b6824d296 LibWeb: Make frames nesting-aware and disallow deep nesting
A Frame now knows about its nesting-level.

The FrameLoader checks whether the recursion level of the current
frame allows it to be displayed and if not doesn't even load the
requested resource.

The nesting-check is done on a per-URL-basis, so there can be many many
nested Frames as long as they have different URLs.
If there are however Frames with the same URL nested inside each other
we only allow this to happen 3 times.

This mitigates infinetely recursing <iframe>s in an HTML-document
crashing the browser with an OOM.
2021-05-07 22:34:34 +02:00
Egor Ananyin
d2b6148787 LibWeb: Make painting order more spec-compliant
Now our painting order inside stacking contexts is closer to the
algorithm specified by CSS 2.1 (see section 9.9 and Appendix E)
2021-05-07 22:27:48 +02:00
Andreas Kling
406c876fce LibCore: Remove Core::IODevice::printf() 2021-05-07 22:11:50 +02:00
Andreas Kling
05dbf3891a LibCrypto: Fix a mistake in appendff() conversion 2021-05-07 21:57:29 +02:00
Andreas Kling
730ed465fe LibMarkdown: Convert StringBuilder::appendf() => AK::Format
These are the last ones in the codebase. :^)
2021-05-07 21:12:09 +02:00
Andreas Kling
32080452e3 LibX86: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
c1967fca0d LibLine: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
c7e9b6d00f LibWeb: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
eb05931ab5 LibGfx: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
ea027834df LibELF: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
79ff1902aa LibRegex: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
8d5eb075d8 LibGUI: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
5b87276841 LibDiff: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
f1c6288803 LibC: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
72259d5cee LibJS: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
e76956f712 LibCrypto: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
c2a8869c1f LibGemini: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:09 +02:00
Andreas Kling
24c149b013 LibCore: Convert StringBuilder::appendf() => AK::Format 2021-05-07 21:12:08 +02:00
Valtteri Koskivuori
00de3b53c8 LibCore+Userland: Add more detectable types
More binary format detectors and descriptions
2021-05-07 11:46:53 +01:00
Valtteri Koskivuori
cf5f3a9874 LibCore: Implement basic mime type guessing based on binary patterns
This attempts to guess the mime-type from a given set of bytes from the
start of a file. It only supports a few well-defined patterns for now,
but it's a start!
2021-05-07 11:46:53 +01:00