/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.

Module Name:
- Xterm256Engine.hpp

Abstract:
- This is the definition of the VT specific implementation of the renderer.
    This is the xterm-256color implementation, which supports advanced sequences such as
    inserting and deleting lines, and true rgb color.

Author(s):
- Mike Griese (migrie) 01-Sept-2017
--*/

#pragma once

#include "XtermEngine.hpp"

namespace Microsoft::Console::Render
{
    class Xterm256Engine : public XtermEngine
    {
    public:
        Xterm256Engine(_In_ wil::unique_hfile hPipe,
                       wil::shared_event shutdownEvent,
                       const Microsoft::Console::IDefaultColorProvider& colorProvider,
                       const Microsoft::Console::Types::Viewport initialViewport,
                       _In_reads_(cColorTable) const COLORREF* const ColorTable,
                       const WORD cColorTable);

        virtual ~Xterm256Engine() override = default;

        [[nodiscard]] HRESULT UpdateDrawingBrushes(const COLORREF colorForeground,
                                                   const COLORREF colorBackground,
                                                   const WORD legacyColorAttribute,
                                                   const bool isBold,
                                                   const bool isSettingDefaultBrushes) noexcept override;

    private:
#ifdef UNIT_TESTING
        friend class VtRendererTest;
#endif
    };
}
