Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/vstgui4/vstgui/lib/coffscreencontext.h
T
2026-08-16 18:24:52 +07:00

100 lines
3.0 KiB
C++

// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
#pragma once
#include "vstguifwd.h"
#include "cdrawcontext.h"
namespace VSTGUI {
//-----------------------------------------------------------------------------
// COffscreenContext Declaration
//! @brief A draw context using a bitmap as it's back buffer
/*! @class COffscreenContext
There are two usage scenarios :
@section offscreen_usage1 Drawing into a bitmap and then push the contents into another draw context
@code
if (auto offscreen = COffscreenContext::create (frame, 100, 100))
{
offscreen->beginDraw ();
// ...
// draw into offscreen
// ...
offscreen->endDraw ();
offscreen->copyFrom (otherContext, destRect);
}
@endcode
@section offscreen_usage2 Drawing static content into a bitmap and reuse the bitmap for drawing
@code
if (cachedBitmap == 0)
{
if (auto offscreen = COffscreenContext::create (frame, 100, 100))
{
offscreen->beginDraw ();
// ...
// draw into offscreen
// ...
offscreen->endDraw ();
cachedBitmap = offscreen->getBitmap ();
if (cachedBitmap)
cachedBitmap->remember ();
}
}
if (cachedBitmap)
{
// ...
}
@endcode
*/
//-----------------------------------------------------------------------------
class COffscreenContext : public CDrawContext
{
public:
static SharedPointer<COffscreenContext> create (const CPoint& size, double scaleFactor = 1.);
VSTGUI_DEPRECATED (static SharedPointer<COffscreenContext> create (CFrame* frame, CCoord width,
CCoord height,
double scaleFactor = 1.);)
//-----------------------------------------------------------------------------
/// @name COffscreenContext Methods
//-----------------------------------------------------------------------------
//@{
/** copy from offscreen to pContext */
void copyFrom (CDrawContext *pContext, CRect destRect, CPoint srcOffset = CPoint (0, 0));
CCoord getWidth () const;
CCoord getHeight () const;
//@}
CBitmap* getBitmap () const { return bitmap; }
COffscreenContext (const PlatformGraphicsDeviceContextPtr device, const CRect& surfaceRect,
const PlatformBitmapPtr& platformBitmap);
protected:
explicit COffscreenContext (CBitmap* bitmap);
explicit COffscreenContext (const CRect& surfaceRect);
SharedPointer<CBitmap> bitmap;
};
//-----------------------------------------------------------------------------
/** Render a bitmap offscreen
* @param size size of the bitmap
* @param scaleFactor scale factor (bitmap size will be scaled by this)
* @param drawFunction user supplied draw function
* @return bitmap pointer on success and nullptr on failure
*/
SharedPointer<CBitmap> renderBitmapOffscreen (
const CPoint& size, double scaleFactor,
const std::function<void (CDrawContext& drawContext)> drawFunction);
} // VSTGUI