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

LibVT+Kernel: Clean up scroll API

This commit cleans up some of the `#ifdef`-ed code smell in
`Terminal`, by extending the scroll APIs to take a range of lines as a
parameter. This makes it possible to use the same code for `IL`/`DL` as
for scrolling.

Note that the current scrolling implementation is very naive, and does
many insertions/deletions in the middle of arrays, whereas swaps should
be enough. This optimization will come in a later commit.

The `linefeed` override was removed from `VirtualConsole`. Previously,
it exhibited incorrect behavior by moving to column 0. Now that we use
the method defined in `Terminal`, code which relied on this behavior
stopped working. We go instead go through the TTY layer which handles
the various output flags. Passing the input character-by-character
seems a bit excessive, so a fix for it will come in another PR.
This commit is contained in:
Daniel Bertalan 2021-06-02 15:36:31 +02:00 committed by Andreas Kling
parent 5f92790489
commit ae6bdc4e29
5 changed files with 141 additions and 113 deletions

View file

@ -37,17 +37,12 @@ private:
virtual void clear() override;
virtual void clear_including_history() override;
virtual void scroll_up() override;
virtual void scroll_down() override;
virtual void linefeed() override;
virtual void scroll_up(u16 region_top, u16 region_bottom, size_t count) override;
virtual void scroll_down(u16 region_top, u16 region_bottom, size_t count) override;
virtual void put_character_at(unsigned row, unsigned column, u32 ch) override;
virtual void set_window_title(const String&) override;
virtual void ICH(Parameters) override;
virtual void IL(Parameters) override;
virtual void DCH(Parameters) override;
virtual void DL(Parameters) override;
};
class VirtualConsole final : public TTY
@ -140,8 +135,8 @@ private:
void on_code_point(u32);
void scroll_down();
void scroll_up();
void scroll_down(u16 region_top, u16 region_bottom, size_t count);
void scroll_up(u16 region_top, u16 region_bottom, size_t count);
void clear_line(size_t index);
void put_character_at(unsigned row, unsigned column, u32 ch, const VT::Attribute&);