@@ -91,6 +91,11 @@ public: | |||||
*/ | */ | ||||
void moveBy(const Point<T>& pos) noexcept; | void moveBy(const Point<T>& pos) noexcept; | ||||
/** | |||||
Return true if point is (0, 0). | |||||
*/ | |||||
bool isZero() const noexcept; | |||||
Point<T> operator+(const Point<T>& pos) noexcept; | Point<T> operator+(const Point<T>& pos) noexcept; | ||||
Point<T> operator-(const Point<T>& pos) noexcept; | Point<T> operator-(const Point<T>& pos) noexcept; | ||||
Point<T>& operator=(const Point<T>& pos) noexcept; | Point<T>& operator=(const Point<T>& pos) noexcept; | ||||
@@ -169,6 +174,16 @@ public: | |||||
*/ | */ | ||||
void shrinkBy(const T& divider) noexcept; | void shrinkBy(const T& divider) noexcept; | ||||
/** | |||||
Return true if size is null (0x0). | |||||
*/ | |||||
bool isNull() const noexcept; | |||||
/** | |||||
Return true if size is not null (0x0). | |||||
*/ | |||||
bool isNotNull() const noexcept; | |||||
Size<T> operator+(const Size<T>& size) noexcept; | Size<T> operator+(const Size<T>& size) noexcept; | ||||
Size<T> operator-(const Size<T>& size) noexcept; | Size<T> operator-(const Size<T>& size) noexcept; | ||||
Size<T>& operator=(const Size<T>& size) noexcept; | Size<T>& operator=(const Size<T>& size) noexcept; | ||||
@@ -47,13 +47,13 @@ public: | |||||
Constructor using raw image data. | Constructor using raw image data. | ||||
@note: @a rawData must remain valid for the lifetime of this Image. | @note: @a rawData must remain valid for the lifetime of this Image. | ||||
*/ | */ | ||||
Image(const char* const rawData, const int width, const int height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); | |||||
Image(const char* const rawData, const uint width, const uint height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); | |||||
/** | /** | ||||
Constructor using raw image data. | Constructor using raw image data. | ||||
@note: @a rawData must remain valid for the lifetime of this Image. | @note: @a rawData must remain valid for the lifetime of this Image. | ||||
*/ | */ | ||||
Image(const char* const rawData, const Size<int>& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); | |||||
Image(const char* const rawData, const Size<uint>& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE); | |||||
/** | /** | ||||
Constructor using another image data. | Constructor using another image data. | ||||
@@ -69,13 +69,13 @@ public: | |||||
Load image data from memory. | Load image data from memory. | ||||
@note: @a rawData must remain valid for the lifetime of this Image. | @note: @a rawData must remain valid for the lifetime of this Image. | ||||
*/ | */ | ||||
void loadFromMemory(const char* const rawData, const int width, const int height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||||
void loadFromMemory(const char* const rawData, const uint width, const uint height, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||||
/** | /** | ||||
Load image data from memory. | Load image data from memory. | ||||
@note: @a rawData must remain valid for the lifetime of this Image. | @note: @a rawData must remain valid for the lifetime of this Image. | ||||
*/ | */ | ||||
void loadFromMemory(const char* const rawData, const Size<int>& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||||
void loadFromMemory(const char* const rawData, const Size<uint>& size, const GLenum format = GL_BGRA, const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||||
/** | /** | ||||
Check if this image is valid. | Check if this image is valid. | ||||
@@ -85,17 +85,17 @@ public: | |||||
/** | /** | ||||
Get width. | Get width. | ||||
*/ | */ | ||||
int getWidth() const noexcept; | |||||
uint getWidth() const noexcept; | |||||
/** | /** | ||||
Get height. | Get height. | ||||
*/ | */ | ||||
int getHeight() const noexcept; | |||||
uint getHeight() const noexcept; | |||||
/** | /** | ||||
Get size. | Get size. | ||||
*/ | */ | ||||
const Size<int>& getSize() const noexcept; | |||||
const Size<uint>& getSize() const noexcept; | |||||
/** | /** | ||||
Get the raw image data. | Get the raw image data. | ||||
@@ -133,7 +133,7 @@ public: | |||||
private: | private: | ||||
const char* fRawData; | const char* fRawData; | ||||
Size<int> fSize; | |||||
Size<uint> fSize; | |||||
GLenum fFormat; | GLenum fFormat; | ||||
GLenum fType; | GLenum fType; | ||||
GLuint fTextureId; | GLuint fTextureId; | ||||
@@ -38,7 +38,7 @@ protected: | |||||
void onDisplay() override; | void onDisplay() override; | ||||
bool onKeyboard(const KeyboardEvent&) override; | bool onKeyboard(const KeyboardEvent&) override; | ||||
bool onMouse(const MouseEvent&) override; | bool onMouse(const MouseEvent&) override; | ||||
void onReshape(int width, int height) override; | |||||
void onReshape(uint width, uint height) override; | |||||
private: | private: | ||||
Image fImgBackground; | Image fImgBackground; | ||||
@@ -45,7 +45,7 @@ public: | |||||
/** | /** | ||||
Get size. | Get size. | ||||
*/ | */ | ||||
Size<int> getSize() const noexcept; | |||||
Size<uint> getSize() const noexcept; | |||||
/** | /** | ||||
Update image data. | Update image data. | ||||
@@ -62,7 +62,7 @@ protected: | |||||
private: | private: | ||||
NVGcontext* fContext; | NVGcontext* fContext; | ||||
int fImageId; | int fImageId; | ||||
Size<int> fSize; | |||||
Size<uint> fSize; | |||||
friend class NanoVG; | friend class NanoVG; | ||||
void _updateSize(); | void _updateSize(); | ||||
@@ -273,7 +273,7 @@ public: | |||||
Begin drawing a new frame. | Begin drawing a new frame. | ||||
@param withAlha Controls if drawing the shapes to the render target should be done using straight or pre-multiplied alpha. | @param withAlha Controls if drawing the shapes to the render target should be done using straight or pre-multiplied alpha. | ||||
*/ | */ | ||||
void beginFrame(const int width, const int height, const float scaleFactor = 1.0f, const Alpha alpha = PREMULTIPLIED_ALPHA); | |||||
void beginFrame(const uint width, const uint height, const float scaleFactor = 1.0f, const Alpha alpha = PREMULTIPLIED_ALPHA); | |||||
/** | /** | ||||
Begin drawing a new frame inside a widget. | Begin drawing a new frame inside a widget. | ||||
@@ -505,7 +505,7 @@ public: | |||||
/** | /** | ||||
Creates image from specified image data. | Creates image from specified image data. | ||||
*/ | */ | ||||
NanoImage* createImageRGBA(int w, int h, const uchar* data); | |||||
NanoImage* createImageRGBA(uint w, uint h, const uchar* data); | |||||
/* -------------------------------------------------------------------- | /* -------------------------------------------------------------------- | ||||
* Paints */ | * Paints */ | ||||
@@ -122,8 +122,8 @@ public: | |||||
@see onResize | @see onResize | ||||
*/ | */ | ||||
struct ResizeEvent { | struct ResizeEvent { | ||||
Size<int> size; | |||||
Size<int> oldSize; | |||||
Size<uint> size; | |||||
Size<uint> oldSize; | |||||
}; | }; | ||||
/** | /** | ||||
@@ -162,37 +162,37 @@ public: | |||||
/** | /** | ||||
Get width. | Get width. | ||||
*/ | */ | ||||
int getWidth() const noexcept; | |||||
uint getWidth() const noexcept; | |||||
/** | /** | ||||
Get height. | Get height. | ||||
*/ | */ | ||||
int getHeight() const noexcept; | |||||
uint getHeight() const noexcept; | |||||
/** | /** | ||||
Get size. | Get size. | ||||
*/ | */ | ||||
const Size<int>& getSize() const noexcept; | |||||
const Size<uint>& getSize() const noexcept; | |||||
/** | /** | ||||
Set width. | Set width. | ||||
*/ | */ | ||||
virtual void setWidth(int width) noexcept; | |||||
virtual void setWidth(uint width) noexcept; | |||||
/** | /** | ||||
Set height. | Set height. | ||||
*/ | */ | ||||
virtual void setHeight(int height) noexcept; | |||||
virtual void setHeight(uint height) noexcept; | |||||
/** | /** | ||||
Set size using @a width and @a height values. | Set size using @a width and @a height values. | ||||
*/ | */ | ||||
virtual void setSize(int width, int height) noexcept; | |||||
virtual void setSize(uint width, uint height) noexcept; | |||||
/** | /** | ||||
Set size. | Set size. | ||||
*/ | */ | ||||
virtual void setSize(const Size<int>& size) noexcept; | |||||
virtual void setSize(const Size<uint>& size) noexcept; | |||||
/** | /** | ||||
Get absolute X. | Get absolute X. | ||||
@@ -317,7 +317,8 @@ private: | |||||
bool fNeedsFullViewport; | bool fNeedsFullViewport; | ||||
bool fNeedsScaling; | bool fNeedsScaling; | ||||
bool fVisible; | bool fVisible; | ||||
Rectangle<int> fArea; | |||||
Point<int> fAbsolutePos; | |||||
Size<uint> fSize; | |||||
friend class CairoWidget; | friend class CairoWidget; | ||||
friend class Window; | friend class Window; | ||||
@@ -48,8 +48,8 @@ public: | |||||
bool isResizable() const noexcept; | bool isResizable() const noexcept; | ||||
void setResizable(bool yesNo); | void setResizable(bool yesNo); | ||||
int getWidth() const noexcept; | |||||
int getHeight() const noexcept; | |||||
uint getWidth() const noexcept; | |||||
uint getHeight() const noexcept; | |||||
Size<uint> getSize() const noexcept; | Size<uint> getSize() const noexcept; | ||||
void setSize(uint width, uint height); | void setSize(uint width, uint height); | ||||
void setSize(Size<uint> size); | void setSize(Size<uint> size); | ||||
@@ -67,7 +67,7 @@ public: | |||||
protected: | protected: | ||||
virtual void onDisplayBefore(); | virtual void onDisplayBefore(); | ||||
virtual void onDisplayAfter(); | virtual void onDisplayAfter(); | ||||
virtual void onReshape(int width, int height); | |||||
virtual void onReshape(uint width, uint height); | |||||
virtual void onClose(); | virtual void onClose(); | ||||
private: | private: | ||||
@@ -90,6 +90,11 @@ void Point<T>::moveBy(const Point<T>& pos) noexcept | |||||
fY = static_cast<T>(fY+pos.fY); | fY = static_cast<T>(fY+pos.fY); | ||||
} | } | ||||
template<typename T> | |||||
bool Point<T>::isZero() const noexcept | |||||
{ | |||||
return fX == 0 && fY == 0; | |||||
} | |||||
template<typename T> | template<typename T> | ||||
Point<T> Point<T>::operator+(const Point<T>& pos) noexcept | Point<T> Point<T>::operator+(const Point<T>& pos) noexcept | ||||
@@ -209,6 +214,19 @@ void Size<T>::shrinkBy(const T& divider) noexcept | |||||
fHeight = static_cast<T>(fHeight/divider); | fHeight = static_cast<T>(fHeight/divider); | ||||
} | } | ||||
template<typename T> | |||||
bool Size<T>::isNull() const noexcept | |||||
{ | |||||
return fWidth == 0 && fHeight == 0; | |||||
} | |||||
template<typename T> | |||||
bool Size<T>::isNotNull() const noexcept | |||||
{ | |||||
return fWidth != 0 || fHeight != 0; | |||||
} | |||||
template<typename T> | template<typename T> | ||||
Size<T> Size<T>::operator+(const Size<T>& size) noexcept | Size<T> Size<T>::operator+(const Size<T>& size) noexcept | ||||
{ | { | ||||
@@ -31,7 +31,7 @@ Image::Image() | |||||
glGenTextures(1, &fTextureId); | glGenTextures(1, &fTextureId); | ||||
} | } | ||||
Image::Image(const char* const rawData, const int width, const int height, const GLenum format, const GLenum type) | |||||
Image::Image(const char* const rawData, const uint width, const uint height, const GLenum format, const GLenum type) | |||||
: fRawData(rawData), | : fRawData(rawData), | ||||
fSize(width, height), | fSize(width, height), | ||||
fFormat(format), | fFormat(format), | ||||
@@ -42,7 +42,7 @@ Image::Image(const char* const rawData, const int width, const int height, const | |||||
glGenTextures(1, &fTextureId); | glGenTextures(1, &fTextureId); | ||||
} | } | ||||
Image::Image(const char* const rawData, const Size<int>& size, const GLenum format, const GLenum type) | |||||
Image::Image(const char* const rawData, const Size<uint>& size, const GLenum format, const GLenum type) | |||||
: fRawData(rawData), | : fRawData(rawData), | ||||
fSize(size), | fSize(size), | ||||
fFormat(format), | fFormat(format), | ||||
@@ -73,12 +73,12 @@ Image::~Image() | |||||
} | } | ||||
} | } | ||||
void Image::loadFromMemory(const char* const rawData, const int width, const int height, const GLenum format, const GLenum type) noexcept | |||||
void Image::loadFromMemory(const char* const rawData, const uint width, const uint height, const GLenum format, const GLenum type) noexcept | |||||
{ | { | ||||
loadFromMemory(rawData, Size<int>(width, height), format, type); | |||||
loadFromMemory(rawData, Size<uint>(width, height), format, type); | |||||
} | } | ||||
void Image::loadFromMemory(const char* const rawData, const Size<int>& size, const GLenum format, const GLenum type) noexcept | |||||
void Image::loadFromMemory(const char* const rawData, const Size<uint>& size, const GLenum format, const GLenum type) noexcept | |||||
{ | { | ||||
fRawData = rawData; | fRawData = rawData; | ||||
fSize = size; | fSize = size; | ||||
@@ -92,17 +92,17 @@ bool Image::isValid() const noexcept | |||||
return (fRawData != nullptr && fSize.getWidth() > 0 && fSize.getHeight() > 0); | return (fRawData != nullptr && fSize.getWidth() > 0 && fSize.getHeight() > 0); | ||||
} | } | ||||
int Image::getWidth() const noexcept | |||||
uint Image::getWidth() const noexcept | |||||
{ | { | ||||
return fSize.getWidth(); | return fSize.getWidth(); | ||||
} | } | ||||
int Image::getHeight() const noexcept | |||||
uint Image::getHeight() const noexcept | |||||
{ | { | ||||
return fSize.getHeight(); | return fSize.getHeight(); | ||||
} | } | ||||
const Size<int>& Image::getSize() const noexcept | |||||
const Size<uint>& Image::getSize() const noexcept | |||||
{ | { | ||||
return fSize; | return fSize; | ||||
} | } | ||||
@@ -157,7 +157,7 @@ void Image::drawAt(const Point<int>& pos) | |||||
fIsReady = true; | fIsReady = true; | ||||
} | } | ||||
Rectangle<int>(pos, fSize).draw(); | |||||
Rectangle<int>(pos, fSize.getWidth(), fSize.getHeight()).draw(); | |||||
glBindTexture(GL_TEXTURE_2D, 0); | glBindTexture(GL_TEXTURE_2D, 0); | ||||
glDisable(GL_TEXTURE_2D); | glDisable(GL_TEXTURE_2D); | ||||
@@ -78,7 +78,7 @@ bool ImageAboutWindow::onMouse(const MouseEvent& ev) | |||||
return false; | return false; | ||||
} | } | ||||
void ImageAboutWindow::onReshape(int width, int height) | |||||
void ImageAboutWindow::onReshape(uint width, uint height) | |||||
{ | { | ||||
Widget::setSize(width, height); | Widget::setSize(width, height); | ||||
Window::onReshape(width, height); | Window::onReshape(width, height); | ||||
@@ -86,7 +86,7 @@ NanoImage::~NanoImage() | |||||
nvgDeleteImage(fContext, fImageId); | nvgDeleteImage(fContext, fImageId); | ||||
} | } | ||||
Size<int> NanoImage::getSize() const noexcept | |||||
Size<uint> NanoImage::getSize() const noexcept | |||||
{ | { | ||||
return fSize; | return fSize; | ||||
} | } | ||||
@@ -107,8 +107,13 @@ void NanoImage::_updateSize() | |||||
int w=0, h=0; | int w=0, h=0; | ||||
if (fContext != nullptr && fImageId != 0) | if (fContext != nullptr && fImageId != 0) | ||||
{ | |||||
nvgImageSize(fContext, fImageId, &w, &h); | nvgImageSize(fContext, fImageId, &w, &h); | ||||
if (w < 0) w = 0; | |||||
if (h < 0) h = 0; | |||||
} | |||||
fSize.setSize(w, h); | fSize.setSize(w, h); | ||||
} | } | ||||
@@ -139,11 +144,9 @@ NanoVG::~NanoVG() | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
void NanoVG::beginFrame(const int width, const int height, const float scaleFactor, const Alpha alpha) | |||||
void NanoVG::beginFrame(const uint width, const uint height, const float scaleFactor, const Alpha alpha) | |||||
{ | { | ||||
if (fContext == nullptr) return; | if (fContext == nullptr) return; | ||||
DISTRHO_SAFE_ASSERT_RETURN(width > 0,); | |||||
DISTRHO_SAFE_ASSERT_RETURN(height > 0,); | |||||
DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,); | DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,); | ||||
DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,); | DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,); | ||||
@@ -419,11 +422,9 @@ NanoImage* NanoVG::createImageMem(uchar* data, int ndata) | |||||
return nullptr; | return nullptr; | ||||
} | } | ||||
NanoImage* NanoVG::createImageRGBA(int w, int h, const uchar* data) | |||||
NanoImage* NanoVG::createImageRGBA(uint w, uint h, const uchar* data) | |||||
{ | { | ||||
if (fContext == nullptr) return nullptr; | if (fContext == nullptr) return nullptr; | ||||
DISTRHO_SAFE_ASSERT_RETURN(w > 0, nullptr); | |||||
DISTRHO_SAFE_ASSERT_RETURN(h > 0, nullptr); | |||||
DISTRHO_SAFE_ASSERT_RETURN(data != nullptr, nullptr); | DISTRHO_SAFE_ASSERT_RETURN(data != nullptr, nullptr); | ||||
if (const int imageId = nvgCreateImageRGBA(fContext, w, h, data)) | if (const int imageId = nvgCreateImageRGBA(fContext, w, h, data)) | ||||
@@ -27,7 +27,8 @@ Widget::Widget(Window& parent) | |||||
fNeedsFullViewport(false), | fNeedsFullViewport(false), | ||||
fNeedsScaling(false), | fNeedsScaling(false), | ||||
fVisible(true), | fVisible(true), | ||||
fArea(), | |||||
fAbsolutePos(0, 0), | |||||
fSize(0, 0), | |||||
leakDetector_Widget() | leakDetector_Widget() | ||||
{ | { | ||||
fParent._addWidget(this); | fParent._addWidget(this); | ||||
@@ -62,66 +63,66 @@ void Widget::hide() | |||||
setVisible(false); | setVisible(false); | ||||
} | } | ||||
int Widget::getWidth() const noexcept | |||||
uint Widget::getWidth() const noexcept | |||||
{ | { | ||||
return fArea.getWidth(); | |||||
return fSize.getWidth(); | |||||
} | } | ||||
int Widget::getHeight() const noexcept | |||||
uint Widget::getHeight() const noexcept | |||||
{ | { | ||||
return fArea.getHeight(); | |||||
return fSize.getHeight(); | |||||
} | } | ||||
const Size<int>& Widget::getSize() const noexcept | |||||
const Size<uint>& Widget::getSize() const noexcept | |||||
{ | { | ||||
return fArea.getSize(); | |||||
return fSize; | |||||
} | } | ||||
void Widget::setWidth(int width) noexcept | |||||
void Widget::setWidth(uint width) noexcept | |||||
{ | { | ||||
if (fArea.getWidth() == width) | |||||
if (fSize.getWidth() == width) | |||||
return; | return; | ||||
ResizeEvent ev; | ResizeEvent ev; | ||||
ev.oldSize = fArea.getSize(); | |||||
ev.size = Size<int>(width, fArea.getHeight()); | |||||
ev.oldSize = fSize; | |||||
ev.size = Size<uint>(width, fSize.getHeight()); | |||||
fArea.setWidth(width); | |||||
fSize.setWidth(width); | |||||
onResize(ev); | onResize(ev); | ||||
fParent.repaint(); | fParent.repaint(); | ||||
} | } | ||||
void Widget::setHeight(int height) noexcept | |||||
void Widget::setHeight(uint height) noexcept | |||||
{ | { | ||||
if (fArea.getHeight() == height) | |||||
if (fSize.getHeight() == height) | |||||
return; | return; | ||||
ResizeEvent ev; | ResizeEvent ev; | ||||
ev.oldSize = fArea.getSize(); | |||||
ev.size = Size<int>(fArea.getWidth(), height); | |||||
ev.oldSize = fSize; | |||||
ev.size = Size<uint>(fSize.getWidth(), height); | |||||
fArea.setHeight(height); | |||||
fSize.setHeight(height); | |||||
onResize(ev); | onResize(ev); | ||||
fParent.repaint(); | fParent.repaint(); | ||||
} | } | ||||
void Widget::setSize(int width, int height) noexcept | |||||
void Widget::setSize(uint width, uint height) noexcept | |||||
{ | { | ||||
setSize(Size<int>(width, height)); | |||||
setSize(Size<uint>(width, height)); | |||||
} | } | ||||
void Widget::setSize(const Size<int>& size) noexcept | |||||
void Widget::setSize(const Size<uint>& size) noexcept | |||||
{ | { | ||||
if (fArea.getSize() == size) | |||||
if (fSize == size) | |||||
return; | return; | ||||
ResizeEvent ev; | ResizeEvent ev; | ||||
ev.oldSize = fArea.getSize(); | |||||
ev.size = size; | |||||
ev.oldSize = fSize; | |||||
ev.size = size; | |||||
fArea.setSize(size); | |||||
fSize = size; | |||||
onResize(ev); | onResize(ev); | ||||
fParent.repaint(); | fParent.repaint(); | ||||
@@ -129,34 +130,34 @@ void Widget::setSize(const Size<int>& size) noexcept | |||||
int Widget::getAbsoluteX() const noexcept | int Widget::getAbsoluteX() const noexcept | ||||
{ | { | ||||
return fArea.getX(); | |||||
return fAbsolutePos.getX(); | |||||
} | } | ||||
int Widget::getAbsoluteY() const noexcept | int Widget::getAbsoluteY() const noexcept | ||||
{ | { | ||||
return fArea.getY(); | |||||
return fAbsolutePos.getY(); | |||||
} | } | ||||
const Point<int>& Widget::getAbsolutePos() const noexcept | const Point<int>& Widget::getAbsolutePos() const noexcept | ||||
{ | { | ||||
return fArea.getPos(); | |||||
return fAbsolutePos; | |||||
} | } | ||||
void Widget::setAbsoluteX(int x) noexcept | void Widget::setAbsoluteX(int x) noexcept | ||||
{ | { | ||||
if (fArea.getX() == x) | |||||
if (fAbsolutePos.getX() == x) | |||||
return; | return; | ||||
fArea.setX(x); | |||||
fAbsolutePos.setX(x); | |||||
fParent.repaint(); | fParent.repaint(); | ||||
} | } | ||||
void Widget::setAbsoluteY(int y) noexcept | void Widget::setAbsoluteY(int y) noexcept | ||||
{ | { | ||||
if (fArea.getY() == y) | |||||
if (fAbsolutePos.getY() == y) | |||||
return; | return; | ||||
fArea.setY(y); | |||||
fAbsolutePos.setY(y); | |||||
fParent.repaint(); | fParent.repaint(); | ||||
} | } | ||||
@@ -167,10 +168,10 @@ void Widget::setAbsolutePos(int x, int y) noexcept | |||||
void Widget::setAbsolutePos(const Point<int>& pos) noexcept | void Widget::setAbsolutePos(const Point<int>& pos) noexcept | ||||
{ | { | ||||
if (fArea.getPos() == pos) | |||||
if (fAbsolutePos == pos) | |||||
return; | return; | ||||
fArea.setPos(pos); | |||||
fAbsolutePos = pos; | |||||
fParent.repaint(); | fParent.repaint(); | ||||
} | } | ||||
@@ -186,7 +187,7 @@ Window& Widget::getParentWindow() const noexcept | |||||
bool Widget::contains(int x, int y) const noexcept | bool Widget::contains(int x, int y) const noexcept | ||||
{ | { | ||||
return (x >= 0 && y >= 0 && x < fArea.getWidth() && y < fArea.getHeight()); | |||||
return (x >= 0 && y >= 0 && static_cast<uint>(x) < fSize.getWidth() && static_cast<uint>(y) < fSize.getHeight()); | |||||
} | } | ||||
bool Widget::contains(const Point<int>& pos) const noexcept | bool Widget::contains(const Point<int>& pos) const noexcept | ||||
@@ -580,7 +580,7 @@ struct Window::PrivateData { | |||||
// reset color | // reset color | ||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | ||||
if (widget->fNeedsFullViewport || widget->fArea == Rectangle<int>(0, 0, fView->width, fView->height)) | |||||
if (widget->fNeedsFullViewport || (widget->fAbsolutePos.isZero() && widget->fSize == Size<uint>(fView->width, fView->height))) | |||||
{ | { | ||||
// full viewport size | // full viewport size | ||||
glViewport(0, 0, fView->width, fView->height); | glViewport(0, 0, fView->width, fView->height); | ||||
@@ -919,13 +919,17 @@ void Window::setResizable(bool yesNo) | |||||
pData->setResizable(yesNo); | pData->setResizable(yesNo); | ||||
} | } | ||||
int Window::getWidth() const noexcept | |||||
uint Window::getWidth() const noexcept | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(pData->fView->width >= 0, 0); | |||||
return pData->fView->width; | return pData->fView->width; | ||||
} | } | ||||
int Window::getHeight() const noexcept | |||||
uint Window::getHeight() const noexcept | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(pData->fView->height >= 0, 0); | |||||
return pData->fView->height; | return pData->fView->height; | ||||
} | } | ||||
@@ -1009,7 +1013,7 @@ void Window::onDisplayAfter() | |||||
{ | { | ||||
} | } | ||||
void Window::onReshape(int width, int height) | |||||
void Window::onReshape(uint width, uint height) | |||||
{ | { | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
@@ -407,207 +407,209 @@ struct TimePosition { | |||||
class Plugin | class Plugin | ||||
{ | { | ||||
public: | public: | ||||
/** | |||||
Plugin class constructor. | |||||
*/ | |||||
/** | |||||
Plugin class constructor. | |||||
*/ | |||||
Plugin(const uint32_t parameterCount, const uint32_t programCount, const uint32_t stateCount); | Plugin(const uint32_t parameterCount, const uint32_t programCount, const uint32_t stateCount); | ||||
/** | |||||
Destructor. | |||||
*/ | |||||
/** | |||||
Destructor. | |||||
*/ | |||||
virtual ~Plugin(); | virtual ~Plugin(); | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Host state */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Host state */ | |||||
/** | |||||
Get the current buffer size that will probably be used during processing, in frames. | |||||
This value will remain constant between activate and deactivate. | |||||
@note: This value is only a hint! | |||||
Hosts might call d_run() with a higher or lower number of frames. | |||||
@see d_bufferSizeChanged() | |||||
*/ | |||||
/** | |||||
Get the current buffer size that will probably be used during processing, in frames. | |||||
This value will remain constant between activate and deactivate. | |||||
@note: This value is only a hint! | |||||
Hosts might call d_run() with a higher or lower number of frames. | |||||
@see d_bufferSizeChanged(uint32_t) | |||||
*/ | |||||
uint32_t d_getBufferSize() const noexcept; | uint32_t d_getBufferSize() const noexcept; | ||||
/** | |||||
Get the current sample rate that will be used during processing. | |||||
This value will remain constant between activate and deactivate. | |||||
@see d_sampleRateChanged() | |||||
*/ | |||||
/** | |||||
Get the current sample rate that will be used during processing. | |||||
This value will remain constant between activate and deactivate. | |||||
@see d_sampleRateChanged(double) | |||||
*/ | |||||
double d_getSampleRate() const noexcept; | double d_getSampleRate() const noexcept; | ||||
#if DISTRHO_PLUGIN_WANT_TIMEPOS | #if DISTRHO_PLUGIN_WANT_TIMEPOS | ||||
/** | |||||
Get the current host transport time position. | |||||
This function should only be called during d_run(). | |||||
You can call this during other times, but the returned position is not guaranteed to be in sync. | |||||
*/ | |||||
/** | |||||
Get the current host transport time position. | |||||
This function should only be called during d_run(). | |||||
You can call this during other times, but the returned position is not guaranteed to be in sync. | |||||
@note: TimePos is not supported in LADSPA and DSSI plugin formats. | |||||
*/ | |||||
const TimePos& d_getTimePos() const noexcept; | const TimePos& d_getTimePos() const noexcept; | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_WANT_LATENCY | #if DISTRHO_PLUGIN_WANT_LATENCY | ||||
/** | |||||
Change the plugin audio output latency to @a frames. | |||||
This function should only be called in the constructor, d_activate() and d_run(). | |||||
*/ | |||||
/** | |||||
Change the plugin audio output latency to @a frames. | |||||
This function should only be called in the constructor, d_activate() and d_run(). | |||||
*/ | |||||
void d_setLatency(const uint32_t frames) noexcept; | void d_setLatency(const uint32_t frames) noexcept; | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_HAS_MIDI_OUTPUT | #if DISTRHO_PLUGIN_HAS_MIDI_OUTPUT | ||||
/** | |||||
Write a MIDI output event. | |||||
This function must only be called during d_run(). | |||||
Returns false when the host buffer is full, in which case do not call this again until the next d_run(). | |||||
*/ | |||||
/** | |||||
Write a MIDI output event. | |||||
This function must only be called during d_run(). | |||||
Returns false when the host buffer is full, in which case do not call this again until the next d_run(). | |||||
*/ | |||||
bool d_writeMidiEvent(const MidiEvent& midiEvent) noexcept; | bool d_writeMidiEvent(const MidiEvent& midiEvent) noexcept; | ||||
#endif | #endif | ||||
protected: | protected: | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Information */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Information */ | |||||
/** | |||||
Get the plugin name. | |||||
Returns DISTRHO_PLUGIN_NAME by default. | |||||
*/ | |||||
/** | |||||
Get the plugin name. | |||||
Returns DISTRHO_PLUGIN_NAME by default. | |||||
*/ | |||||
virtual const char* d_getName() const { return DISTRHO_PLUGIN_NAME; } | virtual const char* d_getName() const { return DISTRHO_PLUGIN_NAME; } | ||||
/** | |||||
Get the plugin label. | |||||
A plugin label follows the same rules as Parameter::symbol, with the exception that it can start with numbers. | |||||
*/ | |||||
/** | |||||
Get the plugin label. | |||||
A plugin label follows the same rules as Parameter::symbol, with the exception that it can start with numbers. | |||||
*/ | |||||
virtual const char* d_getLabel() const = 0; | virtual const char* d_getLabel() const = 0; | ||||
/** | |||||
Get the plugin author/maker. | |||||
*/ | |||||
/** | |||||
Get the plugin author/maker. | |||||
*/ | |||||
virtual const char* d_getMaker() const = 0; | virtual const char* d_getMaker() const = 0; | ||||
/** | |||||
Get the plugin license name (a single line of text). | |||||
*/ | |||||
/** | |||||
Get the plugin license name (a single line of text). | |||||
*/ | |||||
virtual const char* d_getLicense() const = 0; | virtual const char* d_getLicense() const = 0; | ||||
/** | |||||
Get the plugin version, in hexadecimal. | |||||
TODO format to be defined | |||||
*/ | |||||
/** | |||||
Get the plugin version, in hexadecimal. | |||||
TODO format to be defined | |||||
*/ | |||||
virtual uint32_t d_getVersion() const = 0; | virtual uint32_t d_getVersion() const = 0; | ||||
/** | |||||
Get the plugin unique Id. | |||||
This value is used by LADSPA, DSSI and VST plugin formats. | |||||
*/ | |||||
/** | |||||
Get the plugin unique Id. | |||||
This value is used by LADSPA, DSSI and VST plugin formats. | |||||
*/ | |||||
virtual int64_t d_getUniqueId() const = 0; | virtual int64_t d_getUniqueId() const = 0; | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Init */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Init */ | |||||
/** | |||||
Initialize the parameter @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
*/ | |||||
/** | |||||
Initialize the parameter @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
*/ | |||||
virtual void d_initParameter(uint32_t index, Parameter& parameter) = 0; | virtual void d_initParameter(uint32_t index, Parameter& parameter) = 0; | ||||
#if DISTRHO_PLUGIN_WANT_PROGRAMS | #if DISTRHO_PLUGIN_WANT_PROGRAMS | ||||
/** | |||||
Set the name of the program @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. | |||||
*/ | |||||
/** | |||||
Set the name of the program @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. | |||||
*/ | |||||
virtual void d_initProgramName(uint32_t index, d_string& programName) = 0; | virtual void d_initProgramName(uint32_t index, d_string& programName) = 0; | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_WANT_STATE | #if DISTRHO_PLUGIN_WANT_STATE | ||||
/** | |||||
Set the key name of the state @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. | |||||
*/ | |||||
/** | |||||
Set the key name of the state @a index. | |||||
This function will be called once, shortly after the plugin is created. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. | |||||
*/ | |||||
virtual void d_initStateKey(uint32_t index, d_string& stateKey) = 0; | virtual void d_initStateKey(uint32_t index, d_string& stateKey) = 0; | ||||
#endif | #endif | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Internal data */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Internal data */ | |||||
/** | |||||
Get a parameter value. | |||||
The host may call this function from any context, including realtime processing. | |||||
*/ | |||||
/** | |||||
Get the current value of a parameter. | |||||
The host may call this function from any context, including realtime processing. | |||||
*/ | |||||
virtual float d_getParameterValue(uint32_t index) const = 0; | virtual float d_getParameterValue(uint32_t index) const = 0; | ||||
/** | |||||
Set a parameter value. | |||||
The host may call this function from any context, including realtime processing. | |||||
When a parameter is marked as automable, you must ensure no non-realtime operations are called. | |||||
@note This function will only be called for parameter inputs. | |||||
*/ | |||||
/** | |||||
Change a parameter value. | |||||
The host may call this function from any context, including realtime processing. | |||||
When a parameter is marked as automable, you must ensure no non-realtime operations are called. | |||||
@note This function will only be called for parameter inputs. | |||||
*/ | |||||
virtual void d_setParameterValue(uint32_t index, float value) = 0; | virtual void d_setParameterValue(uint32_t index, float value) = 0; | ||||
#if DISTRHO_PLUGIN_WANT_PROGRAMS | #if DISTRHO_PLUGIN_WANT_PROGRAMS | ||||
/** | |||||
Change the currently used program to @a index. | |||||
The host may call this function from any context, including realtime processing. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. | |||||
*/ | |||||
/** | |||||
Change the currently used program to @a index. | |||||
The host may call this function from any context, including realtime processing. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_PROGRAMS is enabled. | |||||
*/ | |||||
virtual void d_setProgram(uint32_t index) = 0; | virtual void d_setProgram(uint32_t index) = 0; | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_WANT_STATE | #if DISTRHO_PLUGIN_WANT_STATE | ||||
/** | |||||
Change an internal state @a key to @a value. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. | |||||
*/ | |||||
/** | |||||
Change an internal state @a key to @a value. | |||||
Must be implemented by your plugin class only if DISTRHO_PLUGIN_WANT_STATE is enabled. | |||||
*/ | |||||
virtual void d_setState(const char* key, const char* value) = 0; | virtual void d_setState(const char* key, const char* value) = 0; | ||||
#endif | #endif | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Process */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Process */ | |||||
/** | |||||
Activate this plugin. | |||||
*/ | |||||
/** | |||||
Activate this plugin. | |||||
*/ | |||||
virtual void d_activate() {} | virtual void d_activate() {} | ||||
/** | |||||
Deactivate this plugin. | |||||
*/ | |||||
/** | |||||
Deactivate this plugin. | |||||
*/ | |||||
virtual void d_deactivate() {} | virtual void d_deactivate() {} | ||||
#if DISTRHO_PLUGIN_HAS_MIDI_INPUT | #if DISTRHO_PLUGIN_HAS_MIDI_INPUT | ||||
/** | |||||
Run/process function for plugins with MIDI input. | |||||
@note: Some parameters might be null if there are no audio inputs/outputs or MIDI events. | |||||
*/ | |||||
virtual void d_run(const float** inputs, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount) = 0; | |||||
/** | |||||
Run/process function for plugins with MIDI input. | |||||
@note: Some parameters might be null if there are no audio inputs/outputs or MIDI events. | |||||
*/ | |||||
virtual void d_run(const float** inputs, float** outputs, uint32_t frames, | |||||
const MidiEvent* midiEvents, uint32_t midiEventCount) = 0; | |||||
#else | #else | ||||
/** | |||||
Run/process function for plugins without MIDI input. | |||||
@note: Some parameters might be null if there are no audio inputs or outputs. | |||||
*/ | |||||
/** | |||||
Run/process function for plugins without MIDI input. | |||||
@note: Some parameters might be null if there are no audio inputs or outputs. | |||||
*/ | |||||
virtual void d_run(const float** inputs, float** outputs, uint32_t frames) = 0; | virtual void d_run(const float** inputs, float** outputs, uint32_t frames) = 0; | ||||
#endif | #endif | ||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Callbacks (optional) */ | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Callbacks (optional) */ | |||||
/** | |||||
Optional callback to inform the plugin about a buffer size change. | |||||
This function will only be called when the plugin is deactivated. | |||||
@note: This value is only a hint! | |||||
Hosts might call d_run() with a higher or lower number of frames. | |||||
@see d_getBufferSize() | |||||
*/ | |||||
/** | |||||
Optional callback to inform the plugin about a buffer size change. | |||||
This function will only be called when the plugin is deactivated. | |||||
@note: This value is only a hint! | |||||
Hosts might call d_run() with a higher or lower number of frames. | |||||
@see d_getBufferSize() | |||||
*/ | |||||
virtual void d_bufferSizeChanged(uint32_t newBufferSize); | virtual void d_bufferSizeChanged(uint32_t newBufferSize); | ||||
/** | |||||
Optional callback to inform the plugin about a sample rate change. | |||||
This function will only be called when the plugin is deactivated. | |||||
@see d_getSampleRate() | |||||
*/ | |||||
/** | |||||
Optional callback to inform the plugin about a sample rate change. | |||||
This function will only be called when the plugin is deactivated. | |||||
@see d_getSampleRate() | |||||
*/ | |||||
virtual void d_sampleRateChanged(double newSampleRate); | virtual void d_sampleRateChanged(double newSampleRate); | ||||
// ------------------------------------------------------------------- | |||||
// ------------------------------------------------------------------------------------------------------- | |||||
private: | private: | ||||
struct PrivateData; | struct PrivateData; | ||||
@@ -33,75 +33,146 @@ typedef DGL::Widget UIWidget; | |||||
START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
// ----------------------------------------------------------------------- | |||||
// UI | |||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
* DPF UI */ | |||||
/** | |||||
DPF UI class from where UI instances are created. | |||||
TODO. | |||||
you should not have to call setSize during construction, | |||||
that is handled by d_initSize | |||||
if you want to change size later on you should use setSize and then d_setSize to report to host | |||||
*/ | |||||
class UI : public UIWidget | class UI : public UIWidget | ||||
{ | { | ||||
public: | public: | ||||
/** | |||||
UI class constructor. | |||||
*/ | |||||
UI(); | UI(); | ||||
/** | |||||
Destructor. | |||||
*/ | |||||
virtual ~UI(); | virtual ~UI(); | ||||
// ------------------------------------------------------------------- | |||||
// Host DSP State | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Host DSP state */ | |||||
/** | |||||
Get the current sample rate used in plugin processing. | |||||
@see d_sampleRateChanged(double) | |||||
*/ | |||||
double d_getSampleRate() const noexcept; | double d_getSampleRate() const noexcept; | ||||
void d_editParameter(const uint32_t index, const bool started); | |||||
void d_setParameterValue(const uint32_t index, const float value); | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
void d_editParameter(const uint32_t index, const bool started); | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
void d_setParameterValue(const uint32_t index, const float value); | |||||
#if DISTRHO_PLUGIN_WANT_STATE | #if DISTRHO_PLUGIN_WANT_STATE | ||||
void d_setState(const char* const key, const char* const value); | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
void d_setState(const char* const key, const char* const value); | |||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_IS_SYNTH | #if DISTRHO_PLUGIN_IS_SYNTH | ||||
void d_sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity); | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
void d_sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity); | |||||
#endif | #endif | ||||
// ------------------------------------------------------------------- | |||||
// Host UI State | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Host UI state */ | |||||
/** | |||||
TODO: Document this. | |||||
never call this from the constructor | |||||
*/ | |||||
void d_setSize(const uint width, const uint height); | void d_setSize(const uint width, const uint height); | ||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | ||||
// ------------------------------------------------------------------- | |||||
// Direct DSP access - DO NOT USE THIS UNLESS STRICTLY NECESSARY!! | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Direct DSP access - DO NOT USE THIS UNLESS STRICTLY NECESSARY!! */ | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
void* d_getPluginInstancePointer() const noexcept; | void* d_getPluginInstancePointer() const noexcept; | ||||
#endif | #endif | ||||
protected: | protected: | ||||
// ------------------------------------------------------------------- | |||||
// Basic Information | |||||
virtual const char* d_getName() const noexcept { return DISTRHO_PLUGIN_NAME; } | |||||
virtual uint d_getWidth() const noexcept = 0; | |||||
virtual uint d_getHeight() const noexcept = 0; | |||||
// ------------------------------------------------------------------- | |||||
// DSP Callbacks | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* Init */ | |||||
/** | |||||
Set the initial UI size. | |||||
This function will be called once, shortly after the UI is created. | |||||
@see d_setSize(uint,uint) | |||||
*/ | |||||
virtual void d_initSize(uint& width, uint& height) = 0; | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* DSP/Plugin Callbacks */ | |||||
/** | |||||
A parameter has changed on the plugin side. | |||||
This is called by the host to inform the UI about parameter changes. | |||||
*/ | |||||
virtual void d_parameterChanged(uint32_t index, float value) = 0; | virtual void d_parameterChanged(uint32_t index, float value) = 0; | ||||
#if DISTRHO_PLUGIN_WANT_PROGRAMS | #if DISTRHO_PLUGIN_WANT_PROGRAMS | ||||
/** | |||||
The current program has changed on the plugin side. | |||||
This is called by the host to inform the UI about program changes. | |||||
*/ | |||||
virtual void d_programChanged(uint32_t index) = 0; | virtual void d_programChanged(uint32_t index) = 0; | ||||
#endif | #endif | ||||
#if DISTRHO_PLUGIN_WANT_STATE | #if DISTRHO_PLUGIN_WANT_STATE | ||||
/** | |||||
A state has changed on the plugin side. | |||||
This is called by the host to inform the UI about state changes. | |||||
*/ | |||||
virtual void d_stateChanged(const char* key, const char* value) = 0; | virtual void d_stateChanged(const char* key, const char* value) = 0; | ||||
#endif | #endif | ||||
// ------------------------------------------------------------------- | |||||
// DSP Callbacks (optional) | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* DSP/Plugin Callbacks (optional) */ | |||||
/** | |||||
Optional callback to inform the UI about a sample rate change on the plugin side. | |||||
@see d_getSampleRate() | |||||
*/ | |||||
virtual void d_sampleRateChanged(double newSampleRate); | virtual void d_sampleRateChanged(double newSampleRate); | ||||
// ------------------------------------------------------------------- | |||||
// UI Callbacks (optional) | |||||
/* -------------------------------------------------------------------------------------------------------- | |||||
* UI Callbacks (optional) */ | |||||
/** | |||||
TODO: Document this. | |||||
*/ | |||||
virtual void d_uiIdle() {} | virtual void d_uiIdle() {} | ||||
#if ! DISTRHO_UI_USE_NTK | #if ! DISTRHO_UI_USE_NTK | ||||
// updates window openGL state | |||||
virtual void d_uiReshape(int width, int height); | |||||
/** | |||||
OpenGL reshape function, called when the host window is resized. | |||||
You can reimplement this function for a custom OpenGL state. | |||||
@see Window::onReshape(uint,uint) | |||||
*/ | |||||
virtual void d_uiReshape(uint width, uint height); | |||||
#endif | #endif | ||||
// ------------------------------------------------------------------- | |||||
// ------------------------------------------------------------------------------------------------------- | |||||
private: | private: | ||||
struct PrivateData; | struct PrivateData; | ||||
@@ -120,12 +191,15 @@ private: | |||||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UI) | DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UI) | ||||
}; | }; | ||||
// ----------------------------------------------------------------------- | |||||
// Create UI, entry point | |||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
* Create UI, entry point */ | |||||
/** | |||||
TODO. | |||||
*/ | |||||
extern UI* createUI(); | extern UI* createUI(); | ||||
// ----------------------------------------------------------------------- | |||||
// ----------------------------------------------------------------------------------------------------------- | |||||
END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
@@ -107,7 +107,7 @@ public: | |||||
if (const char* const name = jack_get_client_name(fClient)) | if (const char* const name = jack_get_client_name(fClient)) | ||||
fUI.setTitle(name); | fUI.setTitle(name); | ||||
else | else | ||||
fUI.setTitle(DISTRHO_PLUGIN_NAME); | |||||
fUI.setTitle(fPlugin.getName()); | |||||
fUI.exec(this); | fUI.exec(this); | ||||
} | } | ||||
@@ -99,7 +99,7 @@ void UI::d_sampleRateChanged(double) {} | |||||
// UI Callbacks (optional) | // UI Callbacks (optional) | ||||
#if ! DISTRHO_UI_USE_NTK | #if ! DISTRHO_UI_USE_NTK | ||||
void UI::d_uiReshape(int width, int height) | |||||
void UI::d_uiReshape(uint width, uint height) | |||||
{ | { | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
@@ -62,6 +62,10 @@ struct UI::PrivateData { | |||||
void* dspPtr; | void* dspPtr; | ||||
#endif | #endif | ||||
// UI | |||||
uint initialWidth; | |||||
uint initialHeight; | |||||
// Callbacks | // Callbacks | ||||
editParamFunc editParamCallbackFunc; | editParamFunc editParamCallbackFunc; | ||||
setParamFunc setParamCallbackFunc; | setParamFunc setParamCallbackFunc; | ||||
@@ -76,6 +80,8 @@ struct UI::PrivateData { | |||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | ||||
dspPtr(d_lastUiDspPtr), | dspPtr(d_lastUiDspPtr), | ||||
#endif | #endif | ||||
initialWidth(0), | |||||
initialHeight(0), | |||||
editParamCallbackFunc(nullptr), | editParamCallbackFunc(nullptr), | ||||
setParamCallbackFunc(nullptr), | setParamCallbackFunc(nullptr), | ||||
setStateCallbackFunc(nullptr), | setStateCallbackFunc(nullptr), | ||||
@@ -128,6 +134,9 @@ struct UI::PrivateData { | |||||
void setSizeCallback(const uint width, const uint height) | void setSizeCallback(const uint width, const uint height) | ||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(initialWidth != 0,); | |||||
DISTRHO_SAFE_ASSERT_RETURN(initialHeight != 0,); | |||||
if (setSizeCallbackFunc != nullptr) | if (setSizeCallbackFunc != nullptr) | ||||
setSizeCallbackFunc(ptr, width, height); | setSizeCallbackFunc(ptr, width, height); | ||||
} | } | ||||
@@ -157,8 +166,8 @@ public: | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | ||||
const int width = fUI->d_getWidth(); | |||||
const int height = fUI->d_getHeight(); | |||||
uint width = 0, height = 0; | |||||
fUI->d_initSize(width, height); | |||||
// set widget size | // set widget size | ||||
fUI->setSize(width, height); | fUI->setSize(width, height); | ||||
@@ -191,7 +200,7 @@ protected: | |||||
fIsReady = true; | fIsReady = true; | ||||
} | } | ||||
#else | #else | ||||
void onReshape(int width, int height) override | |||||
void onReshape(uint width, uint height) override | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); | ||||
@@ -237,25 +246,14 @@ public: | |||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
const char* getName() const noexcept | |||||
{ | |||||
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, ""); | |||||
return fUI->d_getName(); | |||||
} | |||||
uint getWidth() const noexcept | uint getWidth() const noexcept | ||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, 0); | |||||
return fUI->d_getWidth(); | |||||
return glWindow.getWidth(); | |||||
} | } | ||||
uint getHeight() const noexcept | uint getHeight() const noexcept | ||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, 0); | |||||
return fUI->d_getHeight(); | |||||
return glWindow.getHeight(); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
@@ -91,7 +91,7 @@ public: | |||||
} | } | ||||
if (! hasTitle) | if (! hasTitle) | ||||
fUI.setTitle(fUI.getName()); | |||||
fUI.setTitle(DISTRHO_PLUGIN_NAME); | |||||
} | } | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||