diff options
Diffstat (limited to 'libs/dgl/Widget.hpp')
-rw-r--r-- | libs/dgl/Widget.hpp | 387 |
1 files changed, 0 insertions, 387 deletions
diff --git a/libs/dgl/Widget.hpp b/libs/dgl/Widget.hpp deleted file mode 100644 index faed6b5..0000000 --- a/libs/dgl/Widget.hpp +++ /dev/null @@ -1,387 +0,0 @@ -/* - * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2014 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_WIDGET_HPP_INCLUDED -#define DGL_WIDGET_HPP_INCLUDED - -#include "Geometry.hpp" - -START_NAMESPACE_DGL - -// ----------------------------------------------------------------------- -// Forward class names - -class App; -class Window; -class StandaloneWindow; - -// ----------------------------------------------------------------------- - -/** - Base DGL Widget class. - - This is the base Widget class, from which all widgets are built. - - All widgets have a parent Window where they'll be drawn. - This parent is never changed during the widget lifetime. - - Widgets receive events in relative coordinates. - (0, 0) means its top-left position. - - Windows paint widgets in the order they are constructed. - Early widgets are drawn first, at the bottom, then newer ones on top. - Events are sent in the inverse order so that the top-most widget gets - a chance to catch the event and stop its propagation. - - All widget event callbacks do nothing by default. - */ -class Widget -{ -public: - /** - Base event data. - @a mod The currently active keyboard modifiers, @see Modifier. - @a time The timestamp (if any). - */ - struct BaseEvent { - uint mod; - uint32_t time; - - /** Constuctor */ - BaseEvent() noexcept : mod(0x0), time(0) {} - /** Destuctor */ - virtual ~BaseEvent() noexcept {} - }; - - /** - Keyboard event. - @a press True if the key was pressed, false if released. - @a key Unicode point of the key pressed. - @see onKeyboard - */ - struct KeyboardEvent : BaseEvent { - bool press; - uint key; - - /** Constuctor */ - KeyboardEvent() noexcept - : BaseEvent(), - press(false), - key(0) {} - }; - - /** - Special keyboard event. - @a press True if the key was pressed, false if released. - @a key The key pressed. - @see onSpecial - */ - struct SpecialEvent : BaseEvent { - bool press; - Key key; - - /** Constuctor */ - SpecialEvent() noexcept - : BaseEvent(), - press(false), - key(Key(0)) {} - }; - - /** - Mouse event. - @a button The button number (1 = left, 2 = middle, 3 = right). - @a press True if the key was pressed, false if released. - @a pos The widget-relative coordinates of the pointer. - @see onMouse - */ - struct MouseEvent : BaseEvent { - int button; - bool press; - Point<int> pos; - - /** Constuctor */ - MouseEvent() noexcept - : BaseEvent(), - button(0), - press(false), - pos(0, 0) {} - }; - - /** - Mouse motion event. - @a pos The widget-relative coordinates of the pointer. - @see onMotion - */ - struct MotionEvent : BaseEvent { - Point<int> pos; - - /** Constuctor */ - MotionEvent() noexcept - : BaseEvent(), - pos(0, 0) {} - }; - - /** - Mouse scroll event. - @a pos The widget-relative coordinates of the pointer. - @a delta The scroll distance. - @see onScroll - */ - struct ScrollEvent : BaseEvent { - Point<int> pos; - Point<float> delta; - - /** Constuctor */ - ScrollEvent() noexcept - : BaseEvent(), - pos(0, 0), - delta(0.0f, 0.0f) {} - }; - - /** - Resize event. - @a size The new widget size. - @a oldSize The previous size, may be null. - @see onResize - */ - struct ResizeEvent { - Size<uint> size; - Size<uint> oldSize; - - /** Constuctor */ - ResizeEvent() noexcept - : size(0, 0), - oldSize(0, 0) {} - }; - - /** - Constructor. - */ - explicit Widget(Window& parent); - - /** - Destructor. - */ - virtual ~Widget(); - - /** - Check if this widget is visible within its parent window. - Invisible widgets do not receive events except resize. - */ - bool isVisible() const noexcept; - - /** - Set widget visible (or not) according to @a yesNo. - */ - void setVisible(bool yesNo); - - /** - Show widget. - This is the same as calling setVisible(true). - */ - void show(); - - /** - Hide widget. - This is the same as calling setVisible(false). - */ - void hide(); - - /** - Get width. - */ - uint getWidth() const noexcept; - - /** - Get height. - */ - uint getHeight() const noexcept; - - /** - Get size. - */ - const Size<uint>& getSize() const noexcept; - - /** - Set width. - */ - void setWidth(uint width) noexcept; - - /** - Set height. - */ - void setHeight(uint height) noexcept; - - /** - Set size using @a width and @a height values. - */ - void setSize(uint width, uint height) noexcept; - - /** - Set size. - */ - void setSize(const Size<uint>& size) noexcept; - - /** - Get absolute X. - */ - int getAbsoluteX() const noexcept; - - /** - Get absolute Y. - */ - int getAbsoluteY() const noexcept; - - /** - Get absolute position. - */ - const Point<int>& getAbsolutePos() 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 this widget's window application. - Same as calling getParentWindow().getApp(). - */ - App& getParentApp() const noexcept; - - /** - Get parent window, as passed in the constructor. - */ - Window& getParentWindow() const noexcept; - - /** - Check if this widget contains the point defined by @a x and @a y. - */ - bool contains(int x, int y) const noexcept; - - /** - Check if this widget contains the point @a pos. - */ - bool contains(const Point<int>& pos) const noexcept; - - /** - Tell this widget's window to repaint itself. - */ - void repaint() noexcept; - - /** - Get the Id associated with this widget. - @see setId - */ - uint getId() const noexcept; - - /** - Set an Id to be associated with this widget. - @see getId - */ - void setId(uint id) noexcept; - -protected: - /** - A function called to draw the view contents with OpenGL. - */ - virtual void onDisplay() = 0; - - /** - A function called when a key is pressed or released. - @return True to stop event propagation, false otherwise. - */ - virtual bool onKeyboard(const KeyboardEvent&); - - /** - A function called when a special key is pressed or released. - @return True to stop event propagation, false otherwise. - */ - virtual bool onSpecial(const SpecialEvent&); - - /** - A function called when a mouse button is pressed or released. - @return True to stop event propagation, false otherwise. - */ - virtual bool onMouse(const MouseEvent&); - - /** - A function called when the pointer moves. - @return True to stop event propagation, false otherwise. - */ - virtual bool onMotion(const MotionEvent&); - - /** - A function called on scrolling (e.g. mouse wheel or track pad). - @return True to stop event propagation, false otherwise. - */ - virtual bool onScroll(const ScrollEvent&); - - /** - A function called when the widget is resized. - */ - virtual void onResize(const ResizeEvent&); - - /** - Tell the parent window this widget needs the full viewport. - When enabled, the local widget coordinates are ignored. - @note: This is an internal function; - You do not need it under normal circumstances. - */ - void setNeedsFullViewport(bool yesNo) noexcept; - - /** - Tell the parent window this widget needs scaling. - When enabled, the widget viewport is scaled to match width and height. - @note: This is an internal function; - You do not need it under normal circumstances. - */ - void setNeedsScaling(bool yesNo) noexcept; - -private: - Window& fParent; - bool fNeedsFullViewport; - bool fNeedsScaling; - bool fVisible; - uint fId; - Point<int> fAbsolutePos; - Size<uint> fSize; - - friend class Window; - friend class StandaloneWindow; - - DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Widget) -}; - -// ----------------------------------------------------------------------- - -END_NAMESPACE_DGL - -#endif // DGL_WIDGET_HPP_INCLUDED |