diff options
Diffstat (limited to 'Kernel/Graphics/Console')
-rw-r--r-- | Kernel/Graphics/Console/Console.h | 4 | ||||
-rw-r--r-- | Kernel/Graphics/Console/FramebufferConsole.cpp | 20 | ||||
-rw-r--r-- | Kernel/Graphics/Console/FramebufferConsole.h | 2 |
3 files changed, 20 insertions, 6 deletions
diff --git a/Kernel/Graphics/Console/Console.h b/Kernel/Graphics/Console/Console.h index c391dc32fb..448f1c7df6 100644 --- a/Kernel/Graphics/Console/Console.h +++ b/Kernel/Graphics/Console/Console.h @@ -74,8 +74,8 @@ protected: Atomic<bool> m_enabled; Color m_default_foreground_color { Color::White }; Color m_default_background_color { Color::Black }; - const size_t m_width; - const size_t m_height; + size_t m_width; + size_t m_height; mutable size_t m_x { 0 }; mutable size_t m_y { 0 }; }; diff --git a/Kernel/Graphics/Console/FramebufferConsole.cpp b/Kernel/Graphics/Console/FramebufferConsole.cpp index 8ae2e3122e..5c960913c9 100644 --- a/Kernel/Graphics/Console/FramebufferConsole.cpp +++ b/Kernel/Graphics/Console/FramebufferConsole.cpp @@ -5,6 +5,7 @@ */ #include <Kernel/Graphics/Console/FramebufferConsole.h> +#include <Kernel/TTY/ConsoleManagement.h> namespace Kernel::Graphics { @@ -204,17 +205,28 @@ NonnullRefPtr<FramebufferConsole> FramebufferConsole::initialize(PhysicalAddress return adopt_ref(*new FramebufferConsole(framebuffer_address, width, height, pitch)); } -FramebufferConsole::FramebufferConsole(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch) - : Console(width, height) - , m_framebuffer_address(framebuffer_address) - , m_pitch(pitch) +void FramebufferConsole::set_resolution(size_t width, size_t height, size_t pitch) { + m_width = width; + m_height = height; + m_pitch = pitch; + dbgln("Framebuffer Console: taking {} bytes", page_round_up(pitch * height)); m_framebuffer_region = MM.allocate_kernel_region(m_framebuffer_address, page_round_up(pitch * height), "Framebuffer Console", Region::Access::Read | Region::Access::Write, Region::Cacheable::Yes); VERIFY(m_framebuffer_region); // Just to start cleanly, we clean the entire framebuffer memset(m_framebuffer_region->vaddr().as_ptr(), 0, pitch * height); + + ConsoleManagement::the().resolution_was_changed(); +} + +FramebufferConsole::FramebufferConsole(PhysicalAddress framebuffer_address, size_t width, size_t height, size_t pitch) + : Console(width, height) + , m_framebuffer_address(framebuffer_address) + , m_pitch(pitch) +{ + set_resolution(width, height, pitch); } size_t FramebufferConsole::bytes_per_base_glyph() const diff --git a/Kernel/Graphics/Console/FramebufferConsole.h b/Kernel/Graphics/Console/FramebufferConsole.h index 48574768b7..7e141cef9a 100644 --- a/Kernel/Graphics/Console/FramebufferConsole.h +++ b/Kernel/Graphics/Console/FramebufferConsole.h @@ -16,6 +16,8 @@ class FramebufferConsole final : public Console { public: static NonnullRefPtr<FramebufferConsole> initialize(PhysicalAddress, size_t width, size_t height, size_t pitch); + void set_resolution(size_t width, size_t height, size_t pitch); + virtual size_t bytes_per_base_glyph() const override; virtual size_t chars_per_line() const override; |