diff DPF-Prymula-audioplugins/dpf/dgl/TopLevelWidget.hpp @ 3:84e66ea83026

DPF-Prymula-audioplugins-0.231015-2
author prymula <prymula76@outlook.com>
date Mon, 16 Oct 2023 21:53:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DPF-Prymula-audioplugins/dpf/dgl/TopLevelWidget.hpp	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,146 @@
+/*
+ * DISTRHO Plugin Framework (DPF)
+ * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with
+ * or without fee is hereby granted, provided that the above copyright notice and this
+ * permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef DGL_TOP_LEVEL_WIDGET_HPP_INCLUDED
+#define DGL_TOP_LEVEL_WIDGET_HPP_INCLUDED
+
+#include "Widget.hpp"
+
+#ifdef DISTRHO_DEFINES_H_INCLUDED
+START_NAMESPACE_DISTRHO
+class UI;
+END_NAMESPACE_DISTRHO
+#endif
+
+START_NAMESPACE_DGL
+
+class Window;
+
+// -----------------------------------------------------------------------
+
+/**
+   Top-Level Widget class.
+
+   This is the only Widget class that is allowed to be used directly on a Window.
+
+   This widget takes the full size of the Window it is mapped to.
+   Sub-widgets can be added on top of this top-level widget, by creating them with this class as parent.
+   Doing so allows for custom position and sizes.
+
+   This class is used as the type for DPF Plugin UIs.
+   So anything that a plugin UI might need that does not belong in a simple Widget will go here.
+ */
+class TopLevelWidget : public Widget
+{
+public:
+   /**
+      Constructor.
+    */
+    explicit TopLevelWidget(Window& windowToMapTo);
+
+   /**
+      Destructor.
+    */
+    ~TopLevelWidget() override;
+
+   /**
+      Get the application associated with this top-level widget's window.
+    */
+    Application& getApp() const noexcept;
+
+   /**
+      Get the window associated with this top-level widget.
+    */
+    Window& getWindow() const noexcept;
+
+   /**
+      Set width of this widget's window.
+      @note This will not change the widget's size right away, but be pending on the OS resizing the window
+    */
+    void setWidth(uint width);
+
+   /**
+      Set height of this widget's window.
+      @note This will not change the widget's size right away, but be pending on the OS resizing the window
+    */
+    void setHeight(uint height);
+
+   /**
+      Set size of this widget's window, using @a width and @a height values.
+      @note This will not change the widget's size right away, but be pending on the OS resizing the window
+    */
+    void setSize(uint width, uint height);
+
+   /**
+      Set size of this widget's window.
+      @note This will not change the widget's size right away, but be pending on the OS resizing the window
+    */
+    void setSize(const Size<uint>& size);
+
+   /**
+      TODO document this.
+    */
+    void repaint() noexcept override;
+
+   /**
+      TODO document this.
+    */
+    void repaint(const Rectangle<uint>& rect) noexcept;
+
+    // TODO group stuff after here, convenience functions present in Window class
+    const void* getClipboard(size_t& dataSize);
+    bool setClipboard(const char* mimeType, const void* data, size_t dataSize);
+    bool setCursor(MouseCursor cursor);
+    bool addIdleCallback(IdleCallback* callback, uint timerFrequencyInMs = 0);
+    bool removeIdleCallback(IdleCallback* callback);
+    double getScaleFactor() const noexcept;
+    void setGeometryConstraints(uint minimumWidth,
+                                uint minimumHeight,
+                                bool keepAspectRatio = false,
+                                bool automaticallyScale = false,
+                                bool resizeNowIfAutoScaling = true);
+
+    DISTRHO_DEPRECATED_BY("getApp()")
+    Application& getParentApp() const noexcept { return getApp(); }
+
+    DISTRHO_DEPRECATED_BY("getWindow()")
+    Window& getParentWindow() const noexcept { return getWindow(); }
+
+protected:
+    bool onKeyboard(const KeyboardEvent&) override;
+    bool onCharacterInput(const CharacterInputEvent&) override;
+    bool onMouse(const MouseEvent&) override;
+    bool onMotion(const MotionEvent&) override;
+    bool onScroll(const ScrollEvent&) override;
+
+private:
+    struct PrivateData;
+    PrivateData* const pData;
+    friend class Window;
+#ifdef DISTRHO_DEFINES_H_INCLUDED
+    friend class DISTRHO_NAMESPACE::UI;
+#endif
+   /** @internal */
+    virtual void requestSizeChange(uint width, uint height);
+
+    DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TopLevelWidget)
+};
+
+// -----------------------------------------------------------------------
+
+END_NAMESPACE_DGL
+
+#endif // DGL_TOP_LEVEL_WIDGET_HPP_INCLUDED