1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 02:47:35 +00:00

LibWeb: Frame/Position: Implement cursor increment/decrement methods

This introduces methods to increment and decrement the cursor position.
This is non-trivial as the cursor position is specified in bytes rather
than codepoints. Thus, it sometimes needs to be incremented or
decremented by more than one, depending on the codepoint to "jump over".

Because the cursor blink cycle needs to be reset after moving the
cursor, methods calling the ones in DOM::Position are implemented in
Frame. Furthermore, this allows the cursor_position() getter to stay
const. :^)

Additionally, it adds a offset_is_at_end_of_node() method which checks
if the current offset points to the end of the node.
This commit is contained in:
Max Wipfli 2021-05-18 22:01:12 +02:00 committed by Andreas Kling
parent 08d09c4afb
commit 7181cb3a9c
4 changed files with 77 additions and 0 deletions

View file

@ -297,4 +297,20 @@ bool Frame::is_frame_nesting_allowed(URL const& url) const
return m_frame_nesting_levels.get(url).value_or(0) < 3;
}
bool Frame::increment_cursor_position_offset()
{
if (!m_cursor_position.increment_offset())
return false;
reset_cursor_blink_cycle();
return true;
}
bool Frame::decrement_cursor_position_offset()
{
if (!m_cursor_position.decrement_offset())
return false;
reset_cursor_blink_cycle();
return true;
}
}