Kernel: Restructure terminal initialization
This is still very ugly and will be rewritten in the future :D
This commit is contained in:
@@ -9,10 +9,10 @@ namespace Kernel
|
||||
class FramebufferTerminalDriver final : public TerminalDriver
|
||||
{
|
||||
public:
|
||||
static FramebufferTerminalDriver* create(BAN::RefPtr<FramebufferDevice>);
|
||||
static BAN::ErrorOr<BAN::RefPtr<FramebufferTerminalDriver>> create(BAN::RefPtr<FramebufferDevice>);
|
||||
|
||||
virtual uint32_t width() const override { return m_framebuffer_device->width() / font().width(); }
|
||||
virtual uint32_t height() const override { return m_framebuffer_device->height() / font().height(); }
|
||||
virtual uint32_t width() const override { return m_framebuffer_device->width() / m_font.width(); }
|
||||
virtual uint32_t height() const override { return m_framebuffer_device->height() / m_font.height(); }
|
||||
|
||||
virtual void putchar_at(uint16_t, uint32_t, uint32_t, Color, Color) override;
|
||||
virtual bool scroll(Color) override;
|
||||
@@ -20,6 +20,11 @@ namespace Kernel
|
||||
|
||||
virtual void set_cursor_position(uint32_t, uint32_t) override;
|
||||
|
||||
virtual bool has_font() const override { return true; }
|
||||
|
||||
virtual void set_font(const LibFont::Font& font) override { m_font = font; };
|
||||
virtual const LibFont::Font& font() const override { return m_font; };
|
||||
|
||||
private:
|
||||
FramebufferTerminalDriver(BAN::RefPtr<FramebufferDevice> framebuffer_device)
|
||||
: m_framebuffer_device(framebuffer_device)
|
||||
@@ -27,6 +32,7 @@ namespace Kernel
|
||||
|
||||
private:
|
||||
BAN::RefPtr<FramebufferDevice> m_framebuffer_device;
|
||||
LibFont::Font m_font;
|
||||
static constexpr Color s_cursor_color = TerminalColor::BRIGHT_WHITE;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include <LibFont/Font.h>
|
||||
#include <BAN/RefPtr.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <LibFont/Font.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
|
||||
class TerminalDriver
|
||||
class TerminalDriver : public BAN::RefCounted<TerminalDriver>
|
||||
{
|
||||
public:
|
||||
struct Color
|
||||
@@ -25,7 +25,7 @@ namespace Kernel
|
||||
};
|
||||
|
||||
public:
|
||||
TerminalDriver() : m_font(MUST(LibFont::Font::prefs())) {}
|
||||
static BAN::ErrorOr<void> initialize_from_boot_info();
|
||||
virtual ~TerminalDriver() {}
|
||||
virtual uint32_t width() const = 0;
|
||||
virtual uint32_t height() const = 0;
|
||||
@@ -36,13 +36,13 @@ namespace Kernel
|
||||
|
||||
virtual void set_cursor_position(uint32_t, uint32_t) = 0;
|
||||
|
||||
void set_font(const LibFont::Font& font) { m_font = font; };
|
||||
const LibFont::Font& font() const { return m_font; }
|
||||
|
||||
private:
|
||||
LibFont::Font m_font;
|
||||
virtual bool has_font() const { return false; }
|
||||
virtual void set_font(const LibFont::Font&) { ASSERT_NOT_REACHED(); };
|
||||
virtual const LibFont::Font& font() const { ASSERT_NOT_REACHED(); };
|
||||
};
|
||||
|
||||
extern BAN::RefPtr<TerminalDriver> g_terminal_driver;
|
||||
|
||||
namespace TerminalColor
|
||||
{
|
||||
static constexpr TerminalDriver::Color BLACK = 0x000000;
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Kernel
|
||||
class VirtualTTY : public TTY
|
||||
{
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::RefPtr<VirtualTTY>> create(TerminalDriver*);
|
||||
static BAN::ErrorOr<BAN::RefPtr<VirtualTTY>> create(BAN::RefPtr<TerminalDriver>);
|
||||
|
||||
virtual void set_font(const LibFont::Font&) override;
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Kernel
|
||||
virtual void putchar_impl(uint8_t ch) override;
|
||||
|
||||
private:
|
||||
VirtualTTY(TerminalDriver*);
|
||||
VirtualTTY(BAN::RefPtr<TerminalDriver>);
|
||||
|
||||
void reset_ansi();
|
||||
void handle_ansi_csi(uint8_t ch);
|
||||
@@ -84,7 +84,7 @@ namespace Kernel
|
||||
Cell* m_buffer { nullptr };
|
||||
bool m_show_cursor { true };
|
||||
|
||||
TerminalDriver* m_terminal_driver { nullptr };
|
||||
BAN::RefPtr<TerminalDriver> m_terminal_driver;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user