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

Module Name:
- ScreenBufferRenderTarget.hpp

Abstract:
Provides an encapsulation for all of the RenderTarget methods for the SCreenBuffer.
Unfortunately, these cannot be defined directly on the SCREEN_INFORMATION due to
MSFT 9358743.
Adding an interface to SCREEN_INFORMATION makes the ConsoleObjectHeader no
longer the first part of the SCREEN_INFORMATION.
The Screen buffer will pass this object to other objects that need to trigger
redrawing the buffer contents.

Author(s):
- Mike Griese (migrie) Nov 2018
--*/

#pragma once
#include "../renderer/inc/IRenderTarget.hpp"

// fwdecl
class SCREEN_INFORMATION;

class ScreenBufferRenderTarget final : public Microsoft::Console::Render::IRenderTarget
{
public:
    ScreenBufferRenderTarget(SCREEN_INFORMATION& owner);

    void TriggerRedraw(const Microsoft::Console::Types::Viewport& region) override;
    void TriggerRedraw(const COORD* const pcoord) override;
    void TriggerRedrawCursor(const COORD* const pcoord) override;
    void TriggerRedrawAll() override;
    void TriggerTeardown() override;
    void TriggerSelection() override;
    void TriggerScroll() override;
    void TriggerScroll(const COORD* const pcoordDelta) override;
    void TriggerCircling() override;
    void TriggerTitleChange() override;

private:
    SCREEN_INFORMATION& _owner;
};
