Console.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) 2021, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/RefCounted.h>
  8. #include <AK/Types.h>
  9. #include <Kernel/Graphics/GenericGraphicsAdapter.h>
  10. namespace Kernel::Graphics {
  11. class Console : public RefCounted<Console> {
  12. public:
  13. // Stanadard VGA text mode colors
  14. enum Color : u8 {
  15. Black = 0,
  16. Blue,
  17. Green,
  18. Cyan,
  19. Red,
  20. Magenta,
  21. Brown,
  22. LightGray,
  23. DarkGray,
  24. BrightBlue,
  25. BrightGreen,
  26. BrightCyan,
  27. BrightRed,
  28. BrightMagenta,
  29. Yellow,
  30. White,
  31. };
  32. public:
  33. size_t width() const { return m_width; }
  34. size_t height() const { return m_height; }
  35. size_t pitch() const { return bytes_per_base_glyph() * width(); }
  36. virtual size_t max_column() const { return m_width; }
  37. virtual size_t max_row() const { return m_height; }
  38. virtual size_t bytes_per_base_glyph() const = 0;
  39. virtual size_t chars_per_line() const = 0;
  40. virtual void enable() = 0;
  41. virtual void disable() = 0;
  42. virtual bool is_hardware_paged_capable() const = 0;
  43. virtual bool has_hardware_cursor() const = 0;
  44. virtual void set_cursor(size_t x, size_t y) = 0;
  45. virtual void hide_cursor() = 0;
  46. virtual void show_cursor() = 0;
  47. virtual void clear(size_t x, size_t y, size_t length) = 0;
  48. virtual void write(size_t x, size_t y, char ch, Color background, Color foreground, bool critical = false) = 0;
  49. virtual void write(size_t x, size_t y, char ch, bool critical = false) = 0;
  50. virtual void write(char ch, bool critical = false) = 0;
  51. virtual void flush(size_t x, size_t y, size_t width, size_t height) = 0;
  52. virtual ~Console() { }
  53. protected:
  54. Console(size_t width, size_t height)
  55. : m_width(width)
  56. , m_height(height)
  57. {
  58. m_enabled.store(true);
  59. }
  60. Atomic<bool> m_enabled;
  61. Color m_default_foreground_color { Color::White };
  62. Color m_default_background_color { Color::Black };
  63. size_t m_width;
  64. size_t m_height;
  65. mutable size_t m_x { 0 };
  66. mutable size_t m_y { 0 };
  67. };
  68. }