diff options
author | David Robillard <d@drobilla.net> | 2020-10-24 13:28:22 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-10-24 13:28:22 +0200 |
commit | 612aae5147abec2be9523c1d2858550e5d8a150d (patch) | |
tree | 2f88ed8d310af34e8c401dc14ed75f589b847a73 /include/pugl/pugl.hpp | |
parent | 9c2f1888f033dc577464d41cb18839b988de7987 (diff) | |
download | pugl-612aae5147abec2be9523c1d2858550e5d8a150d.tar.gz pugl-612aae5147abec2be9523c1d2858550e5d8a150d.tar.bz2 pugl-612aae5147abec2be9523c1d2858550e5d8a150d.zip |
Replace live resize with loop events
This allows the application to control how recursive loops are handled rather
than have Pugl impose behavior which can get in the way. For example, an
application may not want to continuously animate while being resized, or set up
its rendering differently in this situation. For example, with Vulkan, setting
up a different swapchain can be necessary for smooth performance while live
resizing on Windows, and Pugl has no ability to do this.
I think it was a mistake to add this timer to Pugl itself, because it was
always a bit of a leaky abstraction, and not very appropriate for a library
that is supposed to be a thin abstraction layer. Though it almost seemed like
things ran as usual while resizing on Windows and MacOS, the main event loop
being stalled can be confusing, and there was no way to detect this. This way,
applications must explicitly handle this situation and can implement the
behavior they want without Pugl getting in the way.
This also simplifies the Pugl implementation a bit, which is always nice.
Diffstat (limited to 'include/pugl/pugl.hpp')
-rw-r--r-- | include/pugl/pugl.hpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/pugl/pugl.hpp b/include/pugl/pugl.hpp index 2097534..7650b1f 100644 --- a/include/pugl/pugl.hpp +++ b/include/pugl/pugl.hpp @@ -176,6 +176,12 @@ using ClientEvent = Event<PUGL_CLIENT, PuglEventClient>; /// @copydoc PuglEventTimer using TimerEvent = Event<PUGL_TIMER, PuglEventTimer>; +/// @copydoc PuglEventLoopEnter +using LoopEnterEvent = Event<PUGL_LOOP_ENTER, PuglEventLoopEnter>; + +/// @copydoc PuglEventLoopLeave +using LoopLeaveEvent = Event<PUGL_LOOP_LEAVE, PuglEventLoopLeave>; + /** @} @name Status @@ -610,6 +616,8 @@ public: virtual Status onScroll(const ScrollEvent&) PUGL_CONST_FUNC; virtual Status onClient(const ClientEvent&) PUGL_CONST_FUNC; virtual Status onTimer(const TimerEvent&) PUGL_CONST_FUNC; + virtual Status onLoopEnter(const LoopEnterEvent&) PUGL_CONST_FUNC; + virtual Status onLoopLeave(const LoopLeaveEvent&) PUGL_CONST_FUNC; /** @} @@ -709,6 +717,12 @@ private: case PUGL_TIMER: return static_cast<PuglStatus>( onTimer(typedEventRef<TimerEvent>(event->timer))); + case PUGL_LOOP_ENTER: + return static_cast<PuglStatus>( + onLoopEnter(typedEventRef<LoopEnterEvent>(event->any))); + case PUGL_LOOP_LEAVE: + return static_cast<PuglStatus>( + onLoopLeave(typedEventRef<LoopLeaveEvent>(event->any))); } return PUGL_FAILURE; |