/* ------------------------------------------- Copyright Mahrouss Logic File: Framebuffer.hpp Purpose: Framebuffer object. ------------------------------------------- */ #ifndef __INC_FB_HPP__ #define __INC_FB_HPP__ #include #include namespace NewOS { enum class FramebufferColorKind : UChar { RGB32, RGB16, RGB8, INVALID, }; class FramebufferContext final { public: UIntPtr fBase; UIntPtr fBpp; UInt fWidth; UInt fHeight; }; class Framebuffer final { public: explicit Framebuffer(Ref &addr) : fFrameBufferAddr(addr) {} ~Framebuffer() {} Framebuffer &operator=(const Framebuffer &) = delete; Framebuffer(const Framebuffer &) = default; volatile UIntPtr *operator[](const UIntPtr &pos); operator bool(); const FramebufferColorKind &Color( const FramebufferColorKind &colour = FramebufferColorKind::INVALID); Ref &Leak(); /// @brief Draws a rectangle inside the fb. /// @param width the width of it /// @param height the height of it /// @param x its x coord. /// @param y its y coord. /// @param color the color of it. /// @return the framebuffer object. Framebuffer &DrawRect(SizeT width, SizeT height, SizeT x, SizeT y, UInt32 color); /// @brief Puts a pixel on the screen. /// @param x where in X /// @param y where in Y /// @param color the color of it. /// @return the framebuffer object. Framebuffer &PutPixel(SizeT x, SizeT y, UInt32 color); private: Ref fFrameBufferAddr; FramebufferColorKind fColour; }; /***********************************************************************************/ /// Some common colors. /***********************************************************************************/ extern const UInt32 kRgbRed; extern const UInt32 kRgbGreen; extern const UInt32 kRgbBlue; extern const UInt32 kRgbBlack; extern const UInt32 kRgbWhite; } // namespace NewOS #endif /* ifndef __INC_FB_HPP__ */