|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- * 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_SUBWIDGET_HPP_INCLUDED
- #define DGL_SUBWIDGET_HPP_INCLUDED
-
- #include "Widget.hpp"
-
- START_NAMESPACE_DGL
-
- // --------------------------------------------------------------------------------------------------------------------
-
- /**
- Sub-Widget class.
-
- This class is the main entry point for creating any reusable widgets from within DGL.
- It can be freely positioned from within a parent widget, thus being named subwidget.
-
- Many subwidgets can share the same parent, and subwidgets themselves can also have its own subwidgets.
- It is subwidgets all the way down.
-
- TODO check absolute vs relative position and see what makes more sense.
-
- @see CairoSubWidget
- */
- class SubWidget : public Widget
- {
- public:
- /**
- Constructor.
- */
- explicit SubWidget(Widget* parentWidget);
-
- /**
- Destructor.
- */
- ~SubWidget() override;
-
- /**
- Check if this widget contains the point defined by @a x and @a y.
- */
- // TODO rename as containsRelativePos
- template<typename T>
- bool contains(T x, T y) const noexcept;
-
- /**
- Check if this widget contains the point @a pos.
- */
- // TODO rename as containsRelativePos
- template<typename T>
- bool contains(const Point<T>& pos) const noexcept;
-
- /**
- Get absolute X.
- */
- int getAbsoluteX() const noexcept;
-
- /**
- Get absolute Y.
- */
- int getAbsoluteY() const noexcept;
-
- /**
- Get absolute position.
- */
- Point<int> getAbsolutePos() const noexcept;
-
- /**
- Get absolute area of this subwidget.
- This is the same as `Rectangle<int>(getAbsolutePos(), getSize());`
- @see getConstrainedAbsoluteArea()
- */
- Rectangle<int> getAbsoluteArea() const noexcept;
-
- /**
- Get absolute area of this subwidget, with special consideration for not allowing negative values.
- @see getAbsoluteArea()
- */
- Rectangle<uint> getConstrainedAbsoluteArea() const noexcept;
-
- /**
- Set absolute X.
- */
- void setAbsoluteX(int x) noexcept;
-
- /**
- Set absolute Y.
- */
- void setAbsoluteY(int y) noexcept;
-
- /**
- Set absolute position using @a x and @a y values.
- */
- void setAbsolutePos(int x, int y) noexcept;
-
- /**
- Set absolute position.
- */
- void setAbsolutePos(const Point<int>& pos) noexcept;
-
- /**
- Get the margin currently in use for widget coordinates.
- By default this value is (0,0).
- */
- Point<int> getMargin() const noexcept;
-
- /**
- Set a margin to be used for widget coordinates using @a x and @a y values.
- */
- void setMargin(int x, int y) noexcept;
-
- /**
- Set a margin to be used for widget coordinates.
- */
- void setMargin(const Point<int>& offset) noexcept;
-
- /**
- Get parent Widget, as passed in the constructor.
- */
- Widget* getParentWidget() const noexcept;
-
- /**
- Request repaint of this subwidget's area to the window this widget belongs to.
- */
- void repaint() noexcept override;
-
- /**
- Bring this widget to the "front" of the parent widget.
- Makes the widget behave as if it was the last to be registered on the parent widget, thus being "in front".
- */
- virtual void toFront();
-
- /**
- Indicate that this subwidget will draw out of bounds, and thus needs the entire viewport available for drawing.
- */
- void setNeedsFullViewportDrawing(bool needsFullViewportForDrawing = true);
-
- /**
- Indicate that this subwidget will always draw at its own internal size and needs scaling to fit target size.
- */
- void setNeedsViewportScaling(bool needsViewportScaling = true, double autoScaleFactor = 0.0);
-
- /**
- Indicate that this subwidget should not be drawn on screen, typically because it is managed by something else.
- */
- void setSkipDrawing(bool skipDrawing = true);
-
- protected:
- /**
- A function called when the subwidget's absolute position is changed.
- */
- virtual void onPositionChanged(const PositionChangedEvent&);
-
- private:
- struct PrivateData;
- PrivateData* const pData;
- friend class Widget;
- DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SubWidget)
- };
-
- // --------------------------------------------------------------------------------------------------------------------
-
- END_NAMESPACE_DGL
-
- #endif // DGL_SUBWIDGET_HPP_INCLUDED
-
|