Serenity Operating System
at master 47 lines 1.6 kB view raw
1/* 2 * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/Types.h> 10#include <Kernel/Graphics/Console/Console.h> 11#include <Kernel/Locking/Spinlock.h> 12 13namespace Kernel::Graphics { 14class VGATextModeConsole final : public Console { 15public: 16 static NonnullLockRefPtr<VGATextModeConsole> initialize(); 17 virtual size_t chars_per_line() const override { return width(); }; 18 19 virtual bool has_hardware_cursor() const override { return true; } 20 virtual bool is_hardware_paged_capable() const override { return true; } 21 22 virtual size_t bytes_per_base_glyph() const override { return 2; } 23 virtual void set_cursor(size_t x, size_t y) override; 24 virtual void clear(size_t x, size_t y, size_t length) override; 25 virtual void write(size_t x, size_t y, char ch, bool critical = false) override; 26 virtual void write(size_t x, size_t y, char ch, Color background, Color foreground, bool critical = false) override; 27 virtual void write(char ch, bool critical = false) override; 28 virtual void flush(size_t, size_t, size_t, size_t) override { } 29 30 virtual void enable() override { } 31 virtual void disable() override { } 32 33private: 34 virtual void hide_cursor() override; 35 virtual void show_cursor() override; 36 37 void clear_vga_row(u16 row); 38 39 explicit VGATextModeConsole(NonnullOwnPtr<Memory::Region>); 40 41 mutable Spinlock<LockRank::None> m_vga_lock {}; 42 43 NonnullOwnPtr<Memory::Region> m_vga_window_region; 44 VirtualAddress m_current_vga_window; 45}; 46 47}