1 /* 2 * DISTRHO Plugin Framework (DPF) 3 * Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any purpose with 6 * or without fee is hereby granted, provided that the above copyright notice and this 7 * permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD 10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN 11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef DGL_APP_PRIVATE_DATA_HPP_INCLUDED 18 #define DGL_APP_PRIVATE_DATA_HPP_INCLUDED 19 20 #include "../Application.hpp" 21 #include "../../distrho/extra/Sleep.hpp" 22 23 #include <list> 24 25 START_NAMESPACE_DGL 26 27 // ----------------------------------------------------------------------- 28 29 struct Application::PrivateData { 30 bool doLoop; 31 uint visibleWindows; 32 std::list<Window*> windows; 33 std::list<IdleCallback*> idleCallbacks; 34 PrivateDataApplication::PrivateData35 PrivateData() 36 : doLoop(true), 37 visibleWindows(0), 38 windows(), 39 idleCallbacks() {} 40 ~PrivateDataApplication::PrivateData41 ~PrivateData() 42 { 43 DISTRHO_SAFE_ASSERT(! doLoop); 44 DISTRHO_SAFE_ASSERT(visibleWindows == 0); 45 46 windows.clear(); 47 idleCallbacks.clear(); 48 } 49 oneShownApplication::PrivateData50 void oneShown() noexcept 51 { 52 if (++visibleWindows == 1) 53 doLoop = true; 54 } 55 oneHiddenApplication::PrivateData56 void oneHidden() noexcept 57 { 58 DISTRHO_SAFE_ASSERT_RETURN(visibleWindows > 0,); 59 60 if (--visibleWindows == 0) 61 doLoop = false; 62 } 63 64 DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) 65 }; 66 67 // ----------------------------------------------------------------------- 68 69 END_NAMESPACE_DGL 70 71 #endif // DGL_APP_PRIVATE_DATA_HPP_INCLUDED 72