Browse Source

Make CairoWidget a templated class, just like done with NanoVG

pull/272/head
falkTX 4 years ago
parent
commit
f55f3c85ae
5 changed files with 94 additions and 40 deletions
  1. +44
    -28
      dgl/Cairo.hpp
  2. +7
    -1
      dgl/NanoVG.hpp
  3. +2
    -2
      dgl/StandaloneWindow.hpp
  4. +31
    -0
      dgl/src/Cairo.cpp
  5. +10
    -9
      dgl/src/NanoVG.cpp

+ 44
- 28
dgl/Cairo.hpp View File

@@ -20,7 +20,6 @@
#include "ImageBase.hpp" #include "ImageBase.hpp"
#include "ImageBaseWidgets.hpp" #include "ImageBaseWidgets.hpp"
#include "SubWidget.hpp" #include "SubWidget.hpp"
#include "TopLevelWidget.hpp"


#include <cairo/cairo.h> #include <cairo/cairo.h>


@@ -86,49 +85,66 @@ public:
// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------


/** /**
Cairo SubWidget, handy class that takes graphics context during onDisplay and passes it in a new function.
CairoWidget, handy class that takes graphics context during onDisplay and passes it in a new function.
*/ */
class CairoSubWidget : public SubWidget
template <class BaseWidget>
class CairoWidget : public BaseWidget
{ {
public: public:
CairoSubWidget(Widget* widgetToGroupTo)
: SubWidget(widgetToGroupTo) {}

protected:
void onDisplay() override
{
const CairoGraphicsContext& context((const CairoGraphicsContext&)getGraphicsContext());
onCairoDisplay(context);
}
/**
Constructor for a CairoSubWidget.
@see CreateFlags
*/
explicit CairoWidget(Widget* const parentGroupWidget);


virtual void onCairoDisplay(const CairoGraphicsContext& context) = 0;
/**
Constructor for a CairoTopLevelWidget.
@see CreateFlags
*/
explicit CairoWidget(Window& windowToMapTo);


DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CairoSubWidget);
};
/**
Constructor for a CairoStandaloneWindow without parent window.
@see CreateFlags
*/
explicit CairoWidget(Application& app);


// --------------------------------------------------------------------------------------------------------------------
/**
Constructor for a CairoStandaloneWindow with parent window.
@see CreateFlags
*/
explicit CairoWidget(Application& app, Window& parentWindow);


/**
Cairo TopLevelWidget, handy class that takes graphics context during onDisplay and passes it in a new function.
*/
class CairoTopLevelWidget : public TopLevelWidget
{
public:
CairoTopLevelWidget(Window& windowToMapTo)
: TopLevelWidget(windowToMapTo) {}
/**
Destructor.
*/
virtual ~CairoWidget() {}


protected: protected:
/**
New virtual onDisplay function.
@see onDisplay
*/
virtual void onCairoDisplay(const CairoGraphicsContext& context) = 0;

private:
/**
Widget display function.
Implemented internally to wrap begin/endFrame() automatically.
*/
void onDisplay() override void onDisplay() override
{ {
const CairoGraphicsContext& context((const CairoGraphicsContext&)getGraphicsContext());
const CairoGraphicsContext& context((const CairoGraphicsContext&)BaseWidget::getGraphicsContext());
onCairoDisplay(context); onCairoDisplay(context);
} }


virtual void onCairoDisplay(const CairoGraphicsContext& context) = 0;

DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CairoTopLevelWidget);
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CairoWidget);
}; };


typedef CairoWidget<SubWidget> CairoSubWidget;
typedef CairoWidget<TopLevelWidget> CairoTopLevelWidget;
typedef CairoWidget<StandaloneWindow> CairoStandaloneWindow;

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


typedef ImageBaseAboutWindow<CairoImage> CairoImageAboutWindow; typedef ImageBaseAboutWindow<CairoImage> CairoImageAboutWindow;


+ 7
- 1
dgl/NanoVG.hpp View File

@@ -895,11 +895,17 @@ public:
explicit NanoWidget(Window& windowToMapTo, int flags = CREATE_ANTIALIAS); explicit NanoWidget(Window& windowToMapTo, int flags = CREATE_ANTIALIAS);


/** /**
Constructor for a NanoStandaloneWindow.
Constructor for a NanoStandaloneWindow without parent window.
@see CreateFlags @see CreateFlags
*/ */
explicit NanoWidget(Application& app, int flags = CREATE_ANTIALIAS); explicit NanoWidget(Application& app, int flags = CREATE_ANTIALIAS);


/**
Constructor for a NanoStandaloneWindow with parent window.
@see CreateFlags
*/
explicit NanoWidget(Application& app, Window& parentWindow, int flags = CREATE_ANTIALIAS);

/** /**
Destructor. Destructor.
*/ */


+ 2
- 2
dgl/StandaloneWindow.hpp View File

@@ -38,8 +38,8 @@ public:
/** /**
Constructor with parent window, typically used to run as modal. Constructor with parent window, typically used to run as modal.
*/ */
StandaloneWindow(Application& app, Window& parent)
: Window(app, parent),
StandaloneWindow(Application& app, Window& parentWindow)
: Window(app, parentWindow),
TopLevelWidget((Window&)*this) {} TopLevelWidget((Window&)*this) {}


/** /**


+ 31
- 0
dgl/src/Cairo.cpp View File

@@ -144,6 +144,37 @@ void CairoImage::drawAt(const GraphicsContext&, const Point<int>&)
{ {
} }


// -----------------------------------------------------------------------
// CairoSubWidget

template <>
CairoWidget<SubWidget>::CairoWidget(Widget* const parent)
: SubWidget(parent) {}

template class CairoWidget<SubWidget>;

// -----------------------------------------------------------------------
// CairoTopLevelWidget

template <>
CairoWidget<TopLevelWidget>::CairoWidget(Window& windowToMapTo)
: TopLevelWidget(windowToMapTo) {}

template class CairoWidget<TopLevelWidget>;

// -----------------------------------------------------------------------
// CairoStandaloneWindow

template <>
CairoWidget<StandaloneWindow>::CairoWidget(Application& app)
: StandaloneWindow(app) {}

template <>
CairoWidget<StandaloneWindow>::CairoWidget(Application& app, Window& parentWindow)
: StandaloneWindow(app, parentWindow) {}

template class CairoWidget<StandaloneWindow>;

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


template <> template <>


+ 10
- 9
dgl/src/NanoVG.cpp View File

@@ -943,7 +943,7 @@ bool NanoVG::loadSharedResources()
#endif #endif


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// SubWidget
// NanoSubWidget


template <> template <>
NanoWidget<SubWidget>::NanoWidget(Widget* const parent, int flags) NanoWidget<SubWidget>::NanoWidget(Widget* const parent, int flags)
@@ -956,26 +956,27 @@ NanoWidget<SubWidget>::NanoWidget(Widget* const parent, int flags)
template class NanoWidget<SubWidget>; template class NanoWidget<SubWidget>;


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// TopLevelWidget
// NanoTopLevelWidget


template <> template <>
NanoWidget<TopLevelWidget>::NanoWidget(Window& windowToMapTo, int flags) NanoWidget<TopLevelWidget>::NanoWidget(Window& windowToMapTo, int flags)
: TopLevelWidget(windowToMapTo), : TopLevelWidget(windowToMapTo),
NanoVG(flags)
{
}
NanoVG(flags) {}


template class NanoWidget<TopLevelWidget>; template class NanoWidget<TopLevelWidget>;


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// StandaloneWindow
// NanoStandaloneWindow


template <> template <>
NanoWidget<StandaloneWindow>::NanoWidget(Application& app, int flags) NanoWidget<StandaloneWindow>::NanoWidget(Application& app, int flags)
: StandaloneWindow(app), : StandaloneWindow(app),
NanoVG(flags)
{
}
NanoVG(flags) {}

template <>
NanoWidget<StandaloneWindow>::NanoWidget(Application& app, Window& parentWindow, int flags)
: StandaloneWindow(app, parentWindow),
NanoVG(flags) {}


template class NanoWidget<StandaloneWindow>; template class NanoWidget<StandaloneWindow>;




Loading…
Cancel
Save