TGUI/include/TGUI/Clipping.hpp

86 lines
3.7 KiB
C++

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// TGUI - Texus' Graphical User Interface
// Copyright (C) 2012-2019 Bruno Van de Velde (vdv_b@tgui.eu)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef TGUI_CLIPPING_HPP
#define TGUI_CLIPPING_HPP
#include <TGUI/Global.hpp>
#include <TGUI/Vector2f.hpp>
#include <SFML/Graphics/RenderTarget.hpp>
#include <SFML/Graphics/View.hpp>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace tgui
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class TGUI_API Clipping
{
public:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Creates a clipping object which will define a clipping region until the object is destroyed
///
/// @param target Target to which we are drawing
/// @param states Current render states
/// @param topLeft Position of the top left corner of the clipping area relative to the view
/// @param size Size of the clipping area relative to the view
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Clipping(sf::RenderTarget& target, const sf::RenderStates& states, Vector2f topLeft, Vector2f size);
// The clipping object cannot be copied
Clipping(const Clipping& copy) = delete;
Clipping& operator=(const Clipping& right) = delete;
// When the clipping object is destroyed, the old clipping is restored
~Clipping();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
// Sets the view used by the gui, which the calculations have to take into account when changing the view for clipping
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void setGuiView(const sf::View& view);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private:
sf::RenderTarget& m_target;
sf::View m_oldView;
static sf::View m_originalView;
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#endif // TGUI_CLIPPING_HPP