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

147 lines
4.5 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 <cstdint>
#include <functional>
//------------------------------------------------------------------------
namespace VSTGUI {
namespace ExternalView {
//------------------------------------------------------------------------
enum class PlatformViewType : uint32_t
{
HWND,
NSView,
Unknown
};
//------------------------------------------------------------------------
struct IntPoint
{
int64_t x {0};
int64_t y {0};
};
//------------------------------------------------------------------------
struct IntSize
{
int64_t width {0};
int64_t height {0};
};
//------------------------------------------------------------------------
struct IntRect
{
IntPoint origin;
IntSize size;
};
//------------------------------------------------------------------------
/** interface for embedding views from external view systems
*
* @ingroup new_in_4_13
*/
struct IView
{
virtual ~IView () noexcept = default;
/** check if the view supports the platform view type */
virtual bool platformViewTypeSupported (PlatformViewType type) = 0;
/** attach the view to the parent */
virtual bool attach (void* parent, PlatformViewType parentViewType) = 0;
/** remove the view from its parent */
virtual bool remove () = 0;
/** set the size and position of the view
*
* the coordinate system for the parameters used are system native,
* this means on Windows the scale factor is already applied to the coordinates
* and on macOS they are not (as with all NSViews)
*
* the visible rectangle is the rectangle clipped to all its parent views
* while the frame rectangle is the full size of the view if it would not
* be clipped. this way it is possible to support views inside of scroll views
* and the like. See the examples how this is done.
*/
virtual void setViewSize (IntRect frame, IntRect visible) = 0;
/** set the scale factor in use */
virtual void setContentScaleFactor (double scaleFactor) = 0;
/** enable or disable mouse handling for the view */
virtual void setMouseEnabled (bool state) = 0;
/** the view should take focus */
virtual void takeFocus () = 0;
/** the view should loose focus */
virtual void looseFocus () = 0;
using TookFocusCallback = std::function<void ()>;
/** a callback the embedder sets on the view to get notified when the view took focus */
virtual void setTookFocusCallback (const TookFocusCallback& callback) = 0;
};
//------------------------------------------------------------------------
struct IControlViewExtension
{
using ValueBeginEditCallback = std::function<void ()>;
using ValueEndEditCallback = std::function<void ()>;
using ValuePerformEditCallback = std::function<void (double newValue)>;
struct EditCallbacks
{
ValueBeginEditCallback beginEdit;
ValuePerformEditCallback performEdit;
ValueEndEditCallback endEdit;
};
virtual bool setValue (double value) = 0;
virtual bool setEditCallbacks (const EditCallbacks& callbacks) = 0;
};
//------------------------------------------------------------------------
/** interface for view embedder classes
*
* @ingroup new_in_4_13
*/
struct IViewEmbedder
{
virtual ~IViewEmbedder () noexcept = default;
/** returns the embedded view or nullptr if it has none */
virtual IView* getExternalView () const = 0;
};
//------------------------------------------------------------------------
/** adapter for the IView interface
*
* @ingroup new_in_4_13
*/
struct ViewAdapter : IView
{
bool platformViewTypeSupported (PlatformViewType type) override { return false; }
bool attach (void* parent, PlatformViewType parentViewType) override { return false; }
bool remove () override { return false; }
void setViewSize (IntRect frame, IntRect visible) override {}
void setContentScaleFactor (double scaleFactor) override {}
void setMouseEnabled (bool state) override {}
void takeFocus () override {}
void looseFocus () override {}
void setTookFocusCallback (const TookFocusCallback& callback) override {}
};
//------------------------------------------------------------------------
struct ControlViewAdapter : ViewAdapter,
IControlViewExtension
{
bool setValue (double value) override { return false; }
bool setEditCallbacks (const EditCallbacks& callbacks) override { return false; }
};
//------------------------------------------------------------------------
} // ExternalView
} // VSTGUI