Console.h 2.1 KB

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