Browse Source

Wrap the entire pugl in a cpp file so we can namespace it

Signed-off-by: falkTX <falktx@falktx.com>
pull/272/head
falkTX 4 years ago
parent
commit
cbb95d5855
5 changed files with 115 additions and 10 deletions
  1. +2
    -1
      dgl/Makefile
  2. +9
    -6
      dgl/src/ApplicationPrivateData.cpp
  3. +2
    -3
      dgl/src/ApplicationPrivateData.hpp
  4. +65
    -0
      dgl/src/pugl.cpp
  5. +37
    -0
      dgl/src/pugl.hpp

+ 2
- 1
dgl/Makefile View File

@@ -9,7 +9,8 @@ include ../Makefile.base.mk
# ---------------------------------------------------------------------------------------------------------------------

BUILD_C_FLAGS += $(DGL_FLAGS) -I. -Isrc
BUILD_CXX_FLAGS += $(DGL_FLAGS) -I. -Isrc -Isrc/pugl-upstream/include -DDONT_SET_USING_DGL_NAMESPACE -Wno-unused-parameter
BUILD_CXX_FLAGS += $(DGL_FLAGS) -I. -Isrc -DDONT_SET_USING_DGL_NAMESPACE -Wno-unused-parameter
# -Isrc/pugl-upstream/include
LINK_FLAGS += $(DGL_LIBS)

# TODO fix these after pugl-upstream is done


+ 9
- 6
dgl/src/ApplicationPrivateData.cpp View File

@@ -17,7 +17,7 @@
#include "ApplicationPrivateData.hpp"
#include "../Window.hpp"

#include "pugl-upstream/include/pugl/pugl.h"
#include "pugl.hpp"

START_NAMESPACE_DGL

@@ -27,10 +27,11 @@ Application::PrivateData::PrivateData(const bool standalone)
: world(puglNewWorld(standalone ? PUGL_PROGRAM : PUGL_MODULE,
standalone ? PUGL_WORLD_THREADS : 0x0)),
isStandalone(standalone),
isStarting(true),
isQuitting(false),
visibleWindows(0),
#ifndef DPF_TEST_APPLICATION_CPP
windows(),
#endif
idleCallbacks()
{
DISTRHO_SAFE_ASSERT_RETURN(world != nullptr,);
@@ -44,11 +45,12 @@ Application::PrivateData::PrivateData(const bool standalone)

Application::PrivateData::~PrivateData()
{
DISTRHO_SAFE_ASSERT(!isStarting);
DISTRHO_SAFE_ASSERT(isQuitting);
DISTRHO_SAFE_ASSERT(visibleWindows == 0);

#ifndef DPF_TEST_APPLICATION_CPP
windows.clear();
#endif
idleCallbacks.clear();

if (world != nullptr)
@@ -62,10 +64,7 @@ void Application::PrivateData::oneWindowShown() noexcept
DISTRHO_SAFE_ASSERT_RETURN(isStandalone,);

if (++visibleWindows == 1)
{
isStarting = false;
isQuitting = false;
}
}

void Application::PrivateData::oneWindowHidden() noexcept
@@ -81,11 +80,13 @@ void Application::PrivateData::idle(const uint timeoutInMs)
{
puglUpdate(world, timeoutInMs == 0 ? 0.0 : static_cast<double>(timeoutInMs) / 1000.0);

#ifndef DPF_TEST_APPLICATION_CPP
for (std::list<Window*>::iterator it = windows.begin(), ite = windows.end(); it != ite; ++it)
{
Window* const window(*it);
window->_idle();
}
#endif

for (std::list<IdleCallback*>::iterator it = idleCallbacks.begin(), ite = idleCallbacks.end(); it != ite; ++it)
{
@@ -98,11 +99,13 @@ void Application::PrivateData::quit()
{
isQuitting = true;

#ifndef DPF_TEST_APPLICATION_CPP
for (std::list<Window*>::reverse_iterator rit = windows.rbegin(), rite = windows.rend(); rit != rite; ++rit)
{
Window* const window(*rit);
window->close();
}
#endif
}

// --------------------------------------------------------------------------------------------------------------------


+ 2
- 3
dgl/src/ApplicationPrivateData.hpp View File

@@ -36,9 +36,6 @@ struct Application::PrivateData {
/** Whether the application is running as standalone, otherwise it is part of a plugin. */
const bool isStandalone;

/** Whether the applicating is starting up, not yet fully initialized. Defaults to true. */
bool isStarting;

/** Whether the applicating is about to quit, or already stopped. Defaults to false. */
bool isQuitting;

@@ -46,8 +43,10 @@ struct Application::PrivateData {
If 0->1, application is starting. If 1->0, application is quitting/stopping. */
uint visibleWindows;

#ifndef DPF_TEST_APPLICATION_CPP
/** List of windows for this application. Used as a way to call each window `idle`. */
std::list<Window*> windows;
#endif

/** List of idle callbacks for this application. Run after all windows `idle`. */
std::list<IdleCallback*> idleCallbacks;


+ 65
- 0
dgl/src/pugl.cpp View File

@@ -0,0 +1,65 @@
/*
* 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.
*/

#include "pugl.hpp"

/* we will include all header files used in pugl in their C++ friendly form, then pugl stuff in custom namespace */
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>

#if defined(DISTRHO_OS_HAIKU)
#elif defined(DISTRHO_OS_MAC)
#elif defined(DISTRHO_OS_WINDOWS)
#else
# include <sys/select.h>
# include <sys/time.h>
# include <X11/X.h>
# include <X11/Xatom.h>
# include <X11/Xlib.h>
# include <X11/Xutil.h>
# include <X11/keysym.h>
# ifdef HAVE_XRANDR
# include <X11/extensions/Xrandr.h>
# endif
# ifdef HAVE_XSYNC
# include <X11/extensions/sync.h>
# include <X11/extensions/syncconst.h>
# endif
# ifdef HAVE_XCURSOR
# include <X11/Xcursor/Xcursor.h>
# include <X11/cursorfont.h>
# endif
#endif

START_NAMESPACE_DGL

// --------------------------------------------------------------------------------------------------------------------

#if defined(DISTRHO_OS_HAIKU)
#elif defined(DISTRHO_OS_MAC)
#elif defined(DISTRHO_OS_WINDOWS)
#else
# include "pugl-upstream/src/x11.c"
#endif

#include "pugl-upstream/src/implementation.c"

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

+ 37
- 0
dgl/src/pugl.hpp View File

@@ -0,0 +1,37 @@
/*
* 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_PUGL_HPP_INCLUDED
#define DGL_PUGL_HPP_INCLUDED

#include "../Base.hpp"

/* we will include all header files used in pugl in their C++ friendly form, then pugl stuff in custom namespace */
#include <cstdbool>
#include <cstddef>
#include <cstdint>

START_NAMESPACE_DGL

// --------------------------------------------------------------------------------------------------------------------

#include "pugl-upstream/include/pugl/pugl.h"

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

#endif // DGL_PUGL_HPP_INCLUDED

Loading…
Cancel
Save