Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
@@ -1,228 +0,0 @@ | |||||
/* | |||||
* 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_EVENTS_HPP_INCLUDED | |||||
#define DGL_EVENTS_HPP_INCLUDED | |||||
#include "Geometry.hpp" | |||||
START_NAMESPACE_DGL | |||||
// -------------------------------------------------------------------------------------------------------------------- | |||||
namespace Events | |||||
{ | |||||
/** | |||||
Base event data. | |||||
These are the fields present on all Widget events. | |||||
@a mod Currently active keyboard modifiers, @see Modifier. | |||||
@a mod Event flags, @see Flag. | |||||
@a time Event timestamp (if any). | |||||
*/ | |||||
struct BaseEvent { | |||||
uint mod; | |||||
uint flags; | |||||
uint time; | |||||
/** Constuctor */ | |||||
BaseEvent() noexcept : mod(0x0), flags(0x0), time(0) {} | |||||
/** Destuctor */ | |||||
virtual ~BaseEvent() noexcept {} | |||||
}; | |||||
/** | |||||
Keyboard event. | |||||
This event represents low-level key presses and releases. | |||||
This can be used for "direct" keyboard handing like key bindings, but must not be interpreted as text input. | |||||
Keys are represented portably as Unicode code points, using the "natural" code point for the key. | |||||
The @a key field is the code for the pressed key, without any modifiers applied. | |||||
For example, a press or release of the 'A' key will have `key` 97 ('a') | |||||
regardless of whether shift or control are being held. | |||||
Alternatively, the raw @a keycode can be used to work directly with physical keys, | |||||
but note that this value is not portable and differs between platforms and hardware. | |||||
@a press True if the key was pressed, false if released. | |||||
@a key Unicode point of the key pressed. | |||||
@a keycode Raw keycode. | |||||
@see onKeyboard | |||||
*/ | |||||
struct KeyboardEvent : BaseEvent { | |||||
bool press; | |||||
uint key; | |||||
uint keycode; | |||||
/** Constuctor */ | |||||
KeyboardEvent() noexcept | |||||
: BaseEvent(), | |||||
press(false), | |||||
key(0), | |||||
keycode(0) {} | |||||
}; | |||||
/** | |||||
Special keyboard event. | |||||
This event allows the use of keys that do not have unicode points. | |||||
Note that some are non-printable keys. | |||||
@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)) {} | |||||
}; | |||||
/** | |||||
Character input event. | |||||
This event represents text input, usually as the result of a key press. | |||||
The text is given both as a Unicode character code and a UTF-8 string. | |||||
Note that this event is generated by the platform's input system, | |||||
so there is not necessarily a direct correspondence between text events and physical key presses. | |||||
For example, with some input methods a sequence of several key presses will generate a single character. | |||||
@a keycode Raw key code. | |||||
@a character Unicode character code. | |||||
@a string UTF-8 string. | |||||
@see onCharacterInput | |||||
*/ | |||||
struct CharacterInputEvent : BaseEvent { | |||||
uint keycode; | |||||
uint character; | |||||
char string[8]; | |||||
/** Constuctor */ | |||||
CharacterInputEvent() noexcept | |||||
: BaseEvent(), | |||||
keycode(0), | |||||
character(0), | |||||
string{'\0','\0','\0','\0','\0','\0','\0','\0'} {} | |||||
}; | |||||
/** | |||||
Mouse press or release event. | |||||
@a button The button number starting from 1 (1 = left, 2 = middle, 3 = right). | |||||
@a press True if the button was pressed, false if released. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@see onMouse | |||||
*/ | |||||
struct MouseEvent : BaseEvent { | |||||
uint button; | |||||
bool press; | |||||
Point<double> pos; | |||||
/** Constuctor */ | |||||
MouseEvent() noexcept | |||||
: BaseEvent(), | |||||
button(0), | |||||
press(false), | |||||
pos(0.0, 0.0) {} | |||||
}; | |||||
/** | |||||
Mouse motion event. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@see onMotion | |||||
*/ | |||||
struct MotionEvent : BaseEvent { | |||||
Point<double> pos; | |||||
/** Constuctor */ | |||||
MotionEvent() noexcept | |||||
: BaseEvent(), | |||||
pos(0.0, 0.0) {} | |||||
}; | |||||
/** | |||||
Mouse scroll event. | |||||
The scroll distance is expressed in "lines", | |||||
an arbitrary unit that corresponds to a single tick of a detented mouse wheel. | |||||
For example, `delta.y` = 1.0 scrolls 1 line up. | |||||
Some systems and devices support finer resolution and/or higher values for fast scrolls, | |||||
so programs should handle any value gracefully. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@a delta The scroll distance. | |||||
@a direction The direction of the scroll or "smooth". | |||||
@see onScroll | |||||
*/ | |||||
struct ScrollEvent : BaseEvent { | |||||
Point<double> pos; | |||||
Point<double> delta; | |||||
ScrollDirection direction; | |||||
/** Constuctor */ | |||||
ScrollEvent() noexcept | |||||
: BaseEvent(), | |||||
pos(0.0, 0.0), | |||||
delta(0.0, 0.0), | |||||
direction(kScrollSmooth) {} | |||||
}; | |||||
/** | |||||
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) {} | |||||
}; | |||||
/** | |||||
Widget position changed event. | |||||
@a pos The new absolute position of the widget. | |||||
@a oldPos The previous absolute position of the widget. | |||||
@see onPositionChanged | |||||
*/ | |||||
struct PositionChangedEvent { | |||||
Point<int> pos; | |||||
Point<int> oldPos; | |||||
/** Constuctor */ | |||||
PositionChangedEvent() noexcept | |||||
: pos(0, 0), | |||||
oldPos(0, 0) {} | |||||
}; | |||||
} | |||||
// -------------------------------------------------------------------------------------------------------------------- | |||||
END_NAMESPACE_DGL | |||||
#endif // DGL_EVENTS_HPP_INCLUDED |
@@ -17,7 +17,7 @@ | |||||
#ifndef DGL_WIDGET_HPP_INCLUDED | #ifndef DGL_WIDGET_HPP_INCLUDED | ||||
#define DGL_WIDGET_HPP_INCLUDED | #define DGL_WIDGET_HPP_INCLUDED | ||||
#include "Events.hpp" | |||||
#include "Geometry.hpp" | |||||
START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||
@@ -29,8 +29,6 @@ class SubWidget; | |||||
class TopLevelWidget; | class TopLevelWidget; | ||||
class Window; | class Window; | ||||
using namespace Events; | |||||
// -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
/** | /** | ||||
@@ -54,6 +52,203 @@ using namespace Events; | |||||
*/ | */ | ||||
class Widget | class Widget | ||||
{ | { | ||||
public: | |||||
/** | |||||
Base event data. | |||||
These are the fields present on all Widget events. | |||||
@a mod Currently active keyboard modifiers, @see Modifier. | |||||
@a mod Event flags, @see Flag. | |||||
@a time Event timestamp (if any). | |||||
*/ | |||||
struct BaseEvent { | |||||
uint mod; | |||||
uint flags; | |||||
uint time; | |||||
/** Constuctor */ | |||||
BaseEvent() noexcept : mod(0x0), flags(0x0), time(0) {} | |||||
/** Destuctor */ | |||||
virtual ~BaseEvent() noexcept {} | |||||
}; | |||||
/** | |||||
Keyboard event. | |||||
This event represents low-level key presses and releases. | |||||
This can be used for "direct" keyboard handing like key bindings, but must not be interpreted as text input. | |||||
Keys are represented portably as Unicode code points, using the "natural" code point for the key. | |||||
The @a key field is the code for the pressed key, without any modifiers applied. | |||||
For example, a press or release of the 'A' key will have `key` 97 ('a') | |||||
regardless of whether shift or control are being held. | |||||
Alternatively, the raw @a keycode can be used to work directly with physical keys, | |||||
but note that this value is not portable and differs between platforms and hardware. | |||||
@a press True if the key was pressed, false if released. | |||||
@a key Unicode point of the key pressed. | |||||
@a keycode Raw keycode. | |||||
@see onKeyboard | |||||
*/ | |||||
struct KeyboardEvent : BaseEvent { | |||||
bool press; | |||||
uint key; | |||||
uint keycode; | |||||
/** Constuctor */ | |||||
KeyboardEvent() noexcept | |||||
: BaseEvent(), | |||||
press(false), | |||||
key(0), | |||||
keycode(0) {} | |||||
}; | |||||
/** | |||||
Special keyboard event. | |||||
This event allows the use of keys that do not have unicode points. | |||||
Note that some are non-printable keys. | |||||
@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)) {} | |||||
}; | |||||
/** | |||||
Character input event. | |||||
This event represents text input, usually as the result of a key press. | |||||
The text is given both as a Unicode character code and a UTF-8 string. | |||||
Note that this event is generated by the platform's input system, | |||||
so there is not necessarily a direct correspondence between text events and physical key presses. | |||||
For example, with some input methods a sequence of several key presses will generate a single character. | |||||
@a keycode Raw key code. | |||||
@a character Unicode character code. | |||||
@a string UTF-8 string. | |||||
@see onCharacterInput | |||||
*/ | |||||
struct CharacterInputEvent : BaseEvent { | |||||
uint keycode; | |||||
uint character; | |||||
char string[8]; | |||||
/** Constuctor */ | |||||
CharacterInputEvent() noexcept | |||||
: BaseEvent(), | |||||
keycode(0), | |||||
character(0), | |||||
string{'\0','\0','\0','\0','\0','\0','\0','\0'} {} | |||||
}; | |||||
/** | |||||
Mouse press or release event. | |||||
@a button The button number starting from 1 (1 = left, 2 = middle, 3 = right). | |||||
@a press True if the button was pressed, false if released. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@see onMouse | |||||
*/ | |||||
struct MouseEvent : BaseEvent { | |||||
uint button; | |||||
bool press; | |||||
Point<double> pos; | |||||
/** Constuctor */ | |||||
MouseEvent() noexcept | |||||
: BaseEvent(), | |||||
button(0), | |||||
press(false), | |||||
pos(0.0, 0.0) {} | |||||
}; | |||||
/** | |||||
Mouse motion event. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@see onMotion | |||||
*/ | |||||
struct MotionEvent : BaseEvent { | |||||
Point<double> pos; | |||||
/** Constuctor */ | |||||
MotionEvent() noexcept | |||||
: BaseEvent(), | |||||
pos(0.0, 0.0) {} | |||||
}; | |||||
/** | |||||
Mouse scroll event. | |||||
The scroll distance is expressed in "lines", | |||||
an arbitrary unit that corresponds to a single tick of a detented mouse wheel. | |||||
For example, `delta.y` = 1.0 scrolls 1 line up. | |||||
Some systems and devices support finer resolution and/or higher values for fast scrolls, | |||||
so programs should handle any value gracefully. | |||||
@a pos The widget-relative coordinates of the pointer. | |||||
@a delta The scroll distance. | |||||
@a direction The direction of the scroll or "smooth". | |||||
@see onScroll | |||||
*/ | |||||
struct ScrollEvent : BaseEvent { | |||||
Point<double> pos; | |||||
Point<double> delta; | |||||
ScrollDirection direction; | |||||
/** Constuctor */ | |||||
ScrollEvent() noexcept | |||||
: BaseEvent(), | |||||
pos(0.0, 0.0), | |||||
delta(0.0, 0.0), | |||||
direction(kScrollSmooth) {} | |||||
}; | |||||
/** | |||||
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) {} | |||||
}; | |||||
/** | |||||
Widget position changed event. | |||||
@a pos The new absolute position of the widget. | |||||
@a oldPos The previous absolute position of the widget. | |||||
@see onPositionChanged | |||||
*/ | |||||
struct PositionChangedEvent { | |||||
Point<int> pos; | |||||
Point<int> oldPos; | |||||
/** Constuctor */ | |||||
PositionChangedEvent() noexcept | |||||
: pos(0, 0), | |||||
oldPos(0, 0) {} | |||||
}; | |||||
private: | |||||
/** | /** | ||||
Private constructor, reserved for TopLevelWidget class. | Private constructor, reserved for TopLevelWidget class. | ||||
*/ | */ | ||||
@@ -42,7 +42,7 @@ struct ButtonImpl { | |||||
self(s), | self(s), | ||||
callback_img(nullptr) {} | callback_img(nullptr) {} | ||||
bool onMouse(const Events::MouseEvent& ev) | |||||
bool onMouse(const Widget::MouseEvent& ev) | |||||
{ | { | ||||
// button was released, handle it now | // button was released, handle it now | ||||
if (button != -1 && ! ev.press) | if (button != -1 && ! ev.press) | ||||
@@ -83,7 +83,7 @@ struct ButtonImpl { | |||||
return false; | return false; | ||||
} | } | ||||
bool onMotion(const Events::MotionEvent& ev) | |||||
bool onMotion(const Widget::MotionEvent& ev) | |||||
{ | { | ||||
// keep pressed | // keep pressed | ||||
if (button != -1) | if (button != -1) | ||||
@@ -37,7 +37,7 @@ TopLevelWidget::PrivateData::~PrivateData() | |||||
window.pData->topLevelWidget = nullptr; | window.pData->topLevelWidget = nullptr; | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::keyboardEvent(const Events::KeyboardEvent& ev) | |||||
bool TopLevelWidget::PrivateData::keyboardEvent(const KeyboardEvent& ev) | |||||
{ | { | ||||
// give top-level widget chance to catch this event first | // give top-level widget chance to catch this event first | ||||
if (self->onKeyboard(ev)) | if (self->onKeyboard(ev)) | ||||
@@ -47,7 +47,7 @@ bool TopLevelWidget::PrivateData::keyboardEvent(const Events::KeyboardEvent& ev) | |||||
return selfw->pData->giveKeyboardEventForSubWidgets(ev); | return selfw->pData->giveKeyboardEventForSubWidgets(ev); | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::specialEvent(const Events::SpecialEvent& ev) | |||||
bool TopLevelWidget::PrivateData::specialEvent(const SpecialEvent& ev) | |||||
{ | { | ||||
// give top-level widget chance to catch this event first | // give top-level widget chance to catch this event first | ||||
if (self->onSpecial(ev)) | if (self->onSpecial(ev)) | ||||
@@ -57,7 +57,7 @@ bool TopLevelWidget::PrivateData::specialEvent(const Events::SpecialEvent& ev) | |||||
return selfw->pData->giveSpecialEventForSubWidgets(ev); | return selfw->pData->giveSpecialEventForSubWidgets(ev); | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::characterInputEvent(const Events::CharacterInputEvent& ev) | |||||
bool TopLevelWidget::PrivateData::characterInputEvent(const CharacterInputEvent& ev) | |||||
{ | { | ||||
// give top-level widget chance to catch this event first | // give top-level widget chance to catch this event first | ||||
if (self->onCharacterInput(ev)) | if (self->onCharacterInput(ev)) | ||||
@@ -67,9 +67,9 @@ bool TopLevelWidget::PrivateData::characterInputEvent(const Events::CharacterInp | |||||
return selfw->pData->giveCharacterInputEventForSubWidgets(ev); | return selfw->pData->giveCharacterInputEventForSubWidgets(ev); | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::mouseEvent(const Events::MouseEvent& ev) | |||||
bool TopLevelWidget::PrivateData::mouseEvent(const MouseEvent& ev) | |||||
{ | { | ||||
Events::MouseEvent rev = ev; | |||||
MouseEvent rev = ev; | |||||
if (window.pData->autoScaling) | if (window.pData->autoScaling) | ||||
{ | { | ||||
@@ -87,9 +87,9 @@ bool TopLevelWidget::PrivateData::mouseEvent(const Events::MouseEvent& ev) | |||||
return selfw->pData->giveMouseEventForSubWidgets(rev); | return selfw->pData->giveMouseEventForSubWidgets(rev); | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::motionEvent(const Events::MotionEvent& ev) | |||||
bool TopLevelWidget::PrivateData::motionEvent(const MotionEvent& ev) | |||||
{ | { | ||||
Events::MotionEvent rev = ev; | |||||
MotionEvent rev = ev; | |||||
if (window.pData->autoScaling) | if (window.pData->autoScaling) | ||||
{ | { | ||||
@@ -107,9 +107,9 @@ bool TopLevelWidget::PrivateData::motionEvent(const Events::MotionEvent& ev) | |||||
return selfw->pData->giveMotionEventForSubWidgets(rev); | return selfw->pData->giveMotionEventForSubWidgets(rev); | ||||
} | } | ||||
bool TopLevelWidget::PrivateData::scrollEvent(const Events::ScrollEvent& ev) | |||||
bool TopLevelWidget::PrivateData::scrollEvent(const ScrollEvent& ev) | |||||
{ | { | ||||
Events::ScrollEvent rev = ev; | |||||
ScrollEvent rev = ev; | |||||
if (window.pData->autoScaling) | if (window.pData->autoScaling) | ||||
{ | { | ||||
@@ -33,12 +33,12 @@ struct TopLevelWidget::PrivateData { | |||||
explicit PrivateData(TopLevelWidget* const s, Window& w); | explicit PrivateData(TopLevelWidget* const s, Window& w); | ||||
~PrivateData(); | ~PrivateData(); | ||||
void display(); | void display(); | ||||
bool keyboardEvent(const Events::KeyboardEvent& ev); | |||||
bool specialEvent(const Events::SpecialEvent& ev); | |||||
bool characterInputEvent(const Events::CharacterInputEvent& ev); | |||||
bool mouseEvent(const Events::MouseEvent& ev); | |||||
bool motionEvent(const Events::MotionEvent& ev); | |||||
bool scrollEvent(const Events::ScrollEvent& ev); | |||||
bool keyboardEvent(const KeyboardEvent& ev); | |||||
bool specialEvent(const SpecialEvent& ev); | |||||
bool characterInputEvent(const CharacterInputEvent& ev); | |||||
bool mouseEvent(const MouseEvent& ev); | |||||
bool motionEvent(const MotionEvent& ev); | |||||
bool scrollEvent(const ScrollEvent& ev); | |||||
void fallbackOnResize(); | void fallbackOnResize(); | ||||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PrivateData) | DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PrivateData) | ||||
@@ -69,7 +69,7 @@ void Widget::PrivateData::displaySubWidgets(const uint width, const uint height, | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
bool Widget::PrivateData::giveKeyboardEventForSubWidgets(const Events::KeyboardEvent& ev) | |||||
bool Widget::PrivateData::giveKeyboardEventForSubWidgets(const KeyboardEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -87,7 +87,7 @@ bool Widget::PrivateData::giveKeyboardEventForSubWidgets(const Events::KeyboardE | |||||
return false; | return false; | ||||
} | } | ||||
bool Widget::PrivateData::giveSpecialEventForSubWidgets(const Events::SpecialEvent& ev) | |||||
bool Widget::PrivateData::giveSpecialEventForSubWidgets(const SpecialEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -105,7 +105,7 @@ bool Widget::PrivateData::giveSpecialEventForSubWidgets(const Events::SpecialEve | |||||
return false; | return false; | ||||
} | } | ||||
bool Widget::PrivateData::giveCharacterInputEventForSubWidgets(const Events::CharacterInputEvent& ev) | |||||
bool Widget::PrivateData::giveCharacterInputEventForSubWidgets(const CharacterInputEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -123,7 +123,7 @@ bool Widget::PrivateData::giveCharacterInputEventForSubWidgets(const Events::Cha | |||||
return false; | return false; | ||||
} | } | ||||
bool Widget::PrivateData::giveMouseEventForSubWidgets(Events::MouseEvent& ev) | |||||
bool Widget::PrivateData::giveMouseEventForSubWidgets(MouseEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -150,7 +150,7 @@ bool Widget::PrivateData::giveMouseEventForSubWidgets(Events::MouseEvent& ev) | |||||
return false; | return false; | ||||
} | } | ||||
bool Widget::PrivateData::giveMotionEventForSubWidgets(Events::MotionEvent& ev) | |||||
bool Widget::PrivateData::giveMotionEventForSubWidgets(MotionEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -177,7 +177,7 @@ bool Widget::PrivateData::giveMotionEventForSubWidgets(Events::MotionEvent& ev) | |||||
return false; | return false; | ||||
} | } | ||||
bool Widget::PrivateData::giveScrollEventForSubWidgets(Events::ScrollEvent& ev) | |||||
bool Widget::PrivateData::giveScrollEventForSubWidgets(ScrollEvent& ev) | |||||
{ | { | ||||
if (! visible) | if (! visible) | ||||
return false; | return false; | ||||
@@ -43,12 +43,12 @@ struct Widget::PrivateData { | |||||
void displaySubWidgets(uint width, uint height, double autoScaleFactor); | void displaySubWidgets(uint width, uint height, double autoScaleFactor); | ||||
bool giveKeyboardEventForSubWidgets(const Events::KeyboardEvent& ev); | |||||
bool giveSpecialEventForSubWidgets(const Events::SpecialEvent& ev); | |||||
bool giveCharacterInputEventForSubWidgets(const Events::CharacterInputEvent& ev); | |||||
bool giveMouseEventForSubWidgets(Events::MouseEvent& ev); | |||||
bool giveMotionEventForSubWidgets(Events::MotionEvent& ev); | |||||
bool giveScrollEventForSubWidgets(Events::ScrollEvent& ev); | |||||
bool giveKeyboardEventForSubWidgets(const KeyboardEvent& ev); | |||||
bool giveSpecialEventForSubWidgets(const SpecialEvent& ev); | |||||
bool giveCharacterInputEventForSubWidgets(const CharacterInputEvent& ev); | |||||
bool giveMouseEventForSubWidgets(MouseEvent& ev); | |||||
bool giveMotionEventForSubWidgets(MotionEvent& ev); | |||||
bool giveScrollEventForSubWidgets(ScrollEvent& ev); | |||||
static TopLevelWidget* findTopLevelWidget(Widget* const w); | static TopLevelWidget* findTopLevelWidget(Widget* const w); | ||||
@@ -533,7 +533,7 @@ void Window::PrivateData::onPuglFocus(const bool focus, const CrossingMode mode) | |||||
self->onFocus(focus, mode); | self->onFocus(focus, mode); | ||||
} | } | ||||
void Window::PrivateData::onPuglKey(const Events::KeyboardEvent& ev) | |||||
void Window::PrivateData::onPuglKey(const Widget::KeyboardEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglKey : %i %u %u\n", ev.press, ev.key, ev.keycode); | DGL_DBGp("onPuglKey : %i %u %u\n", ev.press, ev.key, ev.keycode); | ||||
@@ -546,7 +546,7 @@ void Window::PrivateData::onPuglKey(const Events::KeyboardEvent& ev) | |||||
#endif | #endif | ||||
} | } | ||||
void Window::PrivateData::onPuglSpecial(const Events::SpecialEvent& ev) | |||||
void Window::PrivateData::onPuglSpecial(const Widget::SpecialEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglSpecial : %i %u\n", ev.press, ev.key); | DGL_DBGp("onPuglSpecial : %i %u\n", ev.press, ev.key); | ||||
@@ -559,7 +559,7 @@ void Window::PrivateData::onPuglSpecial(const Events::SpecialEvent& ev) | |||||
#endif | #endif | ||||
} | } | ||||
void Window::PrivateData::onPuglText(const Events::CharacterInputEvent& ev) | |||||
void Window::PrivateData::onPuglText(const Widget::CharacterInputEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglText : %u %u %s\n", ev.keycode, ev.character, ev.string); | DGL_DBGp("onPuglText : %u %u %s\n", ev.keycode, ev.character, ev.string); | ||||
@@ -572,7 +572,7 @@ void Window::PrivateData::onPuglText(const Events::CharacterInputEvent& ev) | |||||
#endif | #endif | ||||
} | } | ||||
void Window::PrivateData::onPuglMouse(const Events::MouseEvent& ev) | |||||
void Window::PrivateData::onPuglMouse(const Widget::MouseEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglMouse : %i %i %f %f\n", ev.button, ev.press, ev.pos.getX(), ev.pos.getY()); | DGL_DBGp("onPuglMouse : %i %i %f %f\n", ev.button, ev.press, ev.pos.getX(), ev.pos.getY()); | ||||
@@ -585,7 +585,7 @@ void Window::PrivateData::onPuglMouse(const Events::MouseEvent& ev) | |||||
#endif | #endif | ||||
} | } | ||||
void Window::PrivateData::onPuglMotion(const Events::MotionEvent& ev) | |||||
void Window::PrivateData::onPuglMotion(const Widget::MotionEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglMotion : %f %f\n", ev.pos.getX(), ev.pos.getY()); | DGL_DBGp("onPuglMotion : %f %f\n", ev.pos.getX(), ev.pos.getY()); | ||||
@@ -598,7 +598,7 @@ void Window::PrivateData::onPuglMotion(const Events::MotionEvent& ev) | |||||
#endif | #endif | ||||
} | } | ||||
void Window::PrivateData::onPuglScroll(const Events::ScrollEvent& ev) | |||||
void Window::PrivateData::onPuglScroll(const Widget::ScrollEvent& ev) | |||||
{ | { | ||||
DGL_DBGp("onPuglScroll : %f %f %f %f\n", ev.pos.getX(), ev.pos.getY(), ev.delta.getX(), ev.delta.getY()); | DGL_DBGp("onPuglScroll : %f %f %f %f\n", ev.pos.getX(), ev.pos.getY(), ev.delta.getX(), ev.delta.getY()); | ||||
@@ -684,7 +684,7 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu | |||||
{ | { | ||||
// unused x, y, xRoot, yRoot (double) | // unused x, y, xRoot, yRoot (double) | ||||
// TODO special keys? | // TODO special keys? | ||||
Events::KeyboardEvent ev; | |||||
Widget::KeyboardEvent ev; | |||||
ev.mod = event->key.state; | ev.mod = event->key.state; | ||||
ev.flags = event->key.flags; | ev.flags = event->key.flags; | ||||
ev.time = static_cast<uint>(event->key.time * 1000.0 + 0.5); | ev.time = static_cast<uint>(event->key.time * 1000.0 + 0.5); | ||||
@@ -701,7 +701,7 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu | |||||
case PUGL_TEXT: | case PUGL_TEXT: | ||||
{ | { | ||||
// unused x, y, xRoot, yRoot (double) | // unused x, y, xRoot, yRoot (double) | ||||
Events::CharacterInputEvent ev; | |||||
Widget::CharacterInputEvent ev; | |||||
ev.mod = event->text.state; | ev.mod = event->text.state; | ||||
ev.flags = event->text.flags; | ev.flags = event->text.flags; | ||||
ev.time = static_cast<uint>(event->text.time * 1000.0 + 0.5); | ev.time = static_cast<uint>(event->text.time * 1000.0 + 0.5); | ||||
@@ -724,7 +724,7 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu | |||||
///< Mouse button released, a #PuglEventButton | ///< Mouse button released, a #PuglEventButton | ||||
case PUGL_BUTTON_RELEASE: | case PUGL_BUTTON_RELEASE: | ||||
{ | { | ||||
Events::MouseEvent ev; | |||||
Widget::MouseEvent ev; | |||||
ev.mod = event->button.state; | ev.mod = event->button.state; | ||||
ev.flags = event->button.flags; | ev.flags = event->button.flags; | ||||
ev.time = static_cast<uint>(event->button.time * 1000.0 + 0.5); | ev.time = static_cast<uint>(event->button.time * 1000.0 + 0.5); | ||||
@@ -738,7 +738,7 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu | |||||
///< Pointer moved, a #PuglEventMotion | ///< Pointer moved, a #PuglEventMotion | ||||
case PUGL_MOTION: | case PUGL_MOTION: | ||||
{ | { | ||||
Events::MotionEvent ev; | |||||
Widget::MotionEvent ev; | |||||
ev.mod = event->motion.state; | ev.mod = event->motion.state; | ||||
ev.flags = event->motion.flags; | ev.flags = event->motion.flags; | ||||
ev.time = static_cast<uint>(event->motion.time * 1000.0 + 0.5); | ev.time = static_cast<uint>(event->motion.time * 1000.0 + 0.5); | ||||
@@ -750,7 +750,7 @@ PuglStatus Window::PrivateData::puglEventCallback(PuglView* const view, const Pu | |||||
///< Scrolled, a #PuglEventScroll | ///< Scrolled, a #PuglEventScroll | ||||
case PUGL_SCROLL: | case PUGL_SCROLL: | ||||
{ | { | ||||
Events::ScrollEvent ev; | |||||
Widget::ScrollEvent ev; | |||||
ev.mod = event->scroll.state; | ev.mod = event->scroll.state; | ||||
ev.flags = event->scroll.flags; | ev.flags = event->scroll.flags; | ||||
ev.time = static_cast<uint>(event->scroll.time * 1000.0 + 0.5); | ev.time = static_cast<uint>(event->scroll.time * 1000.0 + 0.5); | ||||
@@ -18,7 +18,7 @@ | |||||
#define DGL_WINDOW_PRIVATE_DATA_HPP_INCLUDED | #define DGL_WINDOW_PRIVATE_DATA_HPP_INCLUDED | ||||
#include "../Window.hpp" | #include "../Window.hpp" | ||||
#include "../Events.hpp" | |||||
#include "../Widget.hpp" | |||||
#include "ApplicationPrivateData.hpp" | #include "ApplicationPrivateData.hpp" | ||||
#include "pugl.hpp" | #include "pugl.hpp" | ||||
@@ -149,12 +149,12 @@ struct Window::PrivateData : IdleCallback { | |||||
void onPuglExpose(); | void onPuglExpose(); | ||||
void onPuglClose(); | void onPuglClose(); | ||||
void onPuglFocus(bool focus, CrossingMode mode); | void onPuglFocus(bool focus, CrossingMode mode); | ||||
void onPuglKey(const Events::KeyboardEvent& ev); | |||||
void onPuglSpecial(const Events::SpecialEvent& ev); | |||||
void onPuglText(const Events::CharacterInputEvent& ev); | |||||
void onPuglMouse(const Events::MouseEvent& ev); | |||||
void onPuglMotion(const Events::MotionEvent& ev); | |||||
void onPuglScroll(const Events::ScrollEvent& ev); | |||||
void onPuglKey(const Widget::KeyboardEvent& ev); | |||||
void onPuglSpecial(const Widget::SpecialEvent& ev); | |||||
void onPuglText(const Widget::CharacterInputEvent& ev); | |||||
void onPuglMouse(const Widget::MouseEvent& ev); | |||||
void onPuglMotion(const Widget::MotionEvent& ev); | |||||
void onPuglScroll(const Widget::ScrollEvent& ev); | |||||
// Pugl event handling entry point | // Pugl event handling entry point | ||||
static PuglStatus puglEventCallback(PuglView* view, const PuglEvent* event); | static PuglStatus puglEventCallback(PuglView* view, const PuglEvent* event); | ||||