134 lines
5.6 KiB
C++
134 lines
5.6 KiB
C++
//------------------------------------------------------------------------
|
|
// Project : VST SDK
|
|
//
|
|
// Category : Interfaces
|
|
// Filename : pluginterfaces/gui/iwaylandframe.h
|
|
// Created by : Steinberg, 10/2025
|
|
// Originally written and contributed to VST SDK by PreSonus Software Ltd.
|
|
// Description : Wayland Support.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// This file is part of a Steinberg SDK. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this distribution
|
|
// and at www.steinberg.net/sdklicenses.
|
|
// No part of the SDK, including this file, may be copied, modified, propagated,
|
|
// or distributed except according to the terms contained in the LICENSE file.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "pluginterfaces/base/funknown.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
#include "pluginterfaces/base/falignpush.h"
|
|
//------------------------------------------------------------------------
|
|
|
|
struct wl_display;
|
|
struct wl_surface;
|
|
struct xdg_surface;
|
|
struct xdg_toplevel;
|
|
|
|
namespace Steinberg {
|
|
struct ViewRect;
|
|
|
|
/** \defgroup waylandFrame Wayland Frame
|
|
*
|
|
* The following interfaces allow querying information about the host plug-in frame when running in
|
|
* a Wayland session.
|
|
*
|
|
* A native Wayland host application acts as both a Wayland client and a Wayland compositor.
|
|
* The host application connects to the system compositor and creates application windows etc. using
|
|
* this compositor connection.\n
|
|
* A plug-in does not connect to the system compositor, but connects to the host application by
|
|
* calling IWaylandHost::openWaylandConnection().\n
|
|
* The IWaylandHost interface can be created via IHostApplication::createInstance. As the interface
|
|
* may be required early, the host should pass IHostApplication to the plug-in using
|
|
* IPluginFactory3::setHostContext.\n
|
|
* When opening a plug-in window, the host calls IPlugView::attached() with the parent pointer set
|
|
* to the wl_surface of the parent frame (with an unknown surface role).
|
|
* The plug-in creates a wl_surface and must assign the wl_subsurface role using the given parent
|
|
* pointer.\n
|
|
* The plug-in is responsible for resizing the subsurface accordingly.\n
|
|
* In order to create additional windows (dialogs, menus, tooltips etc.), the plug-in can use the
|
|
* IWaylandFrame interface, which is implemented by the host's IPlugFrame object.\n
|
|
* The plug-in can use IWaylandFrame::getParentSurface() to query an xdg_surface, which can in turn
|
|
* be used as a parent in xdg_surface_get_popup. Likewise, the plug-in can use
|
|
* IWaylandFrame::getParentToplevel() to query an xdg_toplevel, which can be used in
|
|
* xdg_toplevel_set_parent.
|
|
*/
|
|
|
|
//------------------------------------------------------------------------
|
|
/** IWaylandHost: Wayland host interface
|
|
Implemented as a singleton in the host application.
|
|
Created via IHostApplication::createInstance.
|
|
|
|
\ingroup waylandFrame pluginGUI vst380
|
|
- [host imp]
|
|
- [released: 3.8.0]
|
|
*/
|
|
class IWaylandHost : public FUnknown
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------------
|
|
/** Open a Wayland connection to the host.
|
|
* \note [UI-thread & Initialized] */
|
|
virtual wl_display* PLUGIN_API openWaylandConnection () = 0;
|
|
|
|
/** Close a previously created connection.
|
|
* \note [UI-thread & Initialized] */
|
|
virtual tresult PLUGIN_API closeWaylandConnection (wl_display* display) = 0;
|
|
|
|
//------------------------------------------------------------------------
|
|
static const FUID iid;
|
|
};
|
|
|
|
DECLARE_CLASS_IID (IWaylandHost, 0x5E9582EE, 0x86594652, 0xB213678E, 0x7F1A705E)
|
|
|
|
//------------------------------------------------------------------------
|
|
/** IWaylandFrame interface
|
|
Interface to query additional information about the host plug-in frame in a Wayland session.
|
|
To be implemented by the VST3 IPlugFrame class.
|
|
|
|
\ingroup waylandFrame pluginGUI vst380
|
|
- [host imp]
|
|
- [released: 3.8.0]
|
|
\see IPlugFrame
|
|
*/
|
|
class IWaylandFrame : public FUnknown
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------------
|
|
/** Get the parent Wayland surface.
|
|
* The plug-in must not change the state of the parent surface.
|
|
* \note [UI-thread & plugView] */
|
|
virtual wl_surface* PLUGIN_API getWaylandSurface (wl_display* display) = 0;
|
|
|
|
/** Get the parent XDG surface for creating popup windows.
|
|
* If the parent surface is not an xdg_surface,
|
|
* this returns the first xdg_surface that can be found in the surface hierarchy,
|
|
* starting the search with the parent surface.
|
|
* The plug-in must not change the state of the parent surface.
|
|
* The size and position of the parent surface, relative to the top left corner of
|
|
* the plug-in surface, is returned in parentSize.
|
|
* \note [UI-thread & plugView] */
|
|
virtual xdg_surface* PLUGIN_API getParentSurface (ViewRect& parentSize,
|
|
wl_display* display) = 0;
|
|
|
|
/** Get the XDG toplevel surface containing the plug-in frame.
|
|
* The plug-in must not change the state of the returned xdg_toplevel.
|
|
* \note [UI-thread & plugView] */
|
|
virtual xdg_toplevel* PLUGIN_API getParentToplevel (wl_display* display) = 0;
|
|
|
|
//------------------------------------------------------------------------
|
|
static const FUID iid;
|
|
};
|
|
|
|
DECLARE_CLASS_IID (IWaylandFrame, 0x809FAEC6, 0x231C4FFA, 0x98ED046C, 0x6E9E2003)
|
|
|
|
//------------------------------------------------------------------------
|
|
} // namespace Steinberg
|
|
|
|
//------------------------------------------------------------------------
|
|
#include "pluginterfaces/base/falignpop.h"
|
|
//------------------------------------------------------------------------
|