DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit d592c24dc2112a6dee45983ae8e859afc6fa6d78
parent c4be63627713c10b13ca43d8e4d118f9c5e9414c
Author: falkTX <falktx@falktx.com>
Date:   Sat, 22 May 2021 14:20:18 +0100

Fix some strict compiler warnings

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
MMakefile.base.mk | 2+-
Mdgl/Cairo.hpp | 4++--
Mdgl/OpenGL.hpp | 4++--
Mdgl/Vulkan.hpp | 4++--
Mdgl/src/Cairo.cpp | 81++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mdgl/src/Common.hpp | 14+++++++-------
Mdgl/src/Geometry.cpp | 49++++++++++++++++++++++++++++++++-----------------
Mdgl/src/ImageBase.cpp | 10+++++-----
Mdgl/src/ImageBaseWidgets.cpp | 61+++++++++++++++++++++++++++++++------------------------------
Mdgl/src/OpenGL.cpp | 65+++++++++++++++++++++++++++++++++++++----------------------------
Mdgl/src/SubWidget.cpp | 4++--
Mdgl/src/Vulkan.cpp | 8++++----
Mdgl/src/Window.cpp | 23+++++++++++++++--------
Mdgl/src/WindowPrivateData.cpp | 20+++++++++++---------
Mdgl/src/WindowPrivateData.hpp | 5++++-
Mdgl/src/pugl.cpp | 12++++++------
16 files changed, 204 insertions(+), 162 deletions(-)

diff --git a/Makefile.base.mk b/Makefile.base.mk @@ -197,7 +197,7 @@ endif ifeq ($(TESTBUILD),true) BASE_FLAGS += -Werror -Wcast-qual -Wconversion -Wformat -Wformat-security -Wredundant-decls -Wshadow -Wstrict-overflow -fstrict-overflow -Wundef -Wwrite-strings -BASE_FLAGS += -Wpointer-arith -Wabi -Winit-self -Wuninitialized -Wstrict-overflow=5 +BASE_FLAGS += -Wpointer-arith -Wabi=98 -Winit-self -Wuninitialized -Wstrict-overflow=5 # BASE_FLAGS += -Wfloat-equal ifeq ($(CC),clang) BASE_FLAGS += -Wdocumentation -Wdocumentation-unknown-command diff --git a/dgl/Cairo.hpp b/dgl/Cairo.hpp @@ -106,8 +106,8 @@ public: CairoImage& operator=(const CairoImage& image) noexcept; // FIXME this should not be needed - inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format = kImageFormatBGRA) - { loadFromMemory(rawData, Size<uint>(w, h), format); }; + inline void loadFromMemory(const char* rdata, uint w, uint h, ImageFormat fmt = kImageFormatBGRA) + { loadFromMemory(rdata, Size<uint>(w, h), fmt); }; inline void draw(const GraphicsContext& context) { drawAt(context, Point<int>(0, 0)); }; inline void drawAt(const GraphicsContext& context, int x, int y) diff --git a/dgl/OpenGL.hpp b/dgl/OpenGL.hpp @@ -222,8 +222,8 @@ public: OpenGLImage& operator=(const OpenGLImage& image) noexcept; // FIXME this should not be needed - inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format = kImageFormatBGRA) - { loadFromMemory(rawData, Size<uint>(w, h), format); }; + inline void loadFromMemory(const char* rdata, uint w, uint h, ImageFormat fmt = kImageFormatBGRA) + { loadFromMemory(rdata, Size<uint>(w, h), fmt); }; inline void draw(const GraphicsContext& context) { drawAt(context, Point<int>(0, 0)); }; inline void drawAt(const GraphicsContext& context, int x, int y) diff --git a/dgl/Vulkan.hpp b/dgl/Vulkan.hpp @@ -88,8 +88,8 @@ public: VulkanImage& operator=(const VulkanImage& image) noexcept; // FIXME this should not be needed - inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format = kImageFormatBGRA) - { loadFromMemory(rawData, Size<uint>(w, h), format); }; + inline void loadFromMemory(const char* rdata, uint w, uint h, ImageFormat fmt = kImageFormatBGRA) + { loadFromMemory(rdata, Size<uint>(w, h), fmt); }; inline void draw(const GraphicsContext& context) { drawAt(context, Point<int>(0, 0)); }; inline void drawAt(const GraphicsContext& context, int x, int y) diff --git a/dgl/src/Cairo.cpp b/dgl/src/Cairo.cpp @@ -326,22 +326,22 @@ CairoImage::CairoImage() surfacedata(nullptr), datarefcount(nullptr) {} -CairoImage::CairoImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) - : ImageBase(rawData, width, height, format), +CairoImage::CairoImage(const char* const rdata, const uint w, const uint h, const ImageFormat fmt) + : ImageBase(rdata, w, h, fmt), surface(nullptr), surfacedata(nullptr), datarefcount(nullptr) { - loadFromMemory(rawData, width, height, format); + loadFromMemory(rdata, w, h, fmt); } -CairoImage::CairoImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) - : ImageBase(rawData, size, format), +CairoImage::CairoImage(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) + : ImageBase(rdata, s, fmt), surface(nullptr), surfacedata(nullptr), datarefcount(nullptr) { - loadFromMemory(rawData, size, format); + loadFromMemory(rdata, s, fmt); } CairoImage::CairoImage(const CairoImage& image) @@ -368,11 +368,11 @@ CairoImage::~CairoImage() void CairoImage::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept { const cairo_format_t cairoformat = asCairoImageFormat(fmt); - const uint width = s.getWidth(); - const uint height = s.getHeight(); - const int stride = cairo_format_stride_for_width(cairoformat, width); + const int width = static_cast<int>(s.getWidth()); + const int height = static_cast<int>(s.getHeight()); + const int stride = cairo_format_stride_for_width(cairoformat, width); - uchar* const newdata = (uchar*)std::malloc(width * height * stride * 4); + uchar* const newdata = (uchar*)std::malloc(static_cast<size_t>(width * height * stride * 4)); DISTRHO_SAFE_ASSERT_RETURN(newdata != nullptr,); cairo_surface_t* const newsurface = cairo_image_surface_create_for_data(newdata, cairoformat, width, height, stride); @@ -401,13 +401,13 @@ void CairoImage::loadFromMemory(const char* const rdata, const Size<uint>& s, co break; case kImageFormatBGR: // BGR8 to CAIRO_FORMAT_RGB24 - for (uint h = 0; h < height; ++h) + for (int h = 0; h < height; ++h) { - for (uint w = 0; w < width; ++w) + for (int w = 0; w < width; ++w) { - newdata[h*width*4+w*4+0] = rdata[h*width*3+w*3+0]; - newdata[h*width*4+w*4+1] = rdata[h*width*3+w*3+1]; - newdata[h*width*4+w*4+2] = rdata[h*width*3+w*3+2]; + newdata[h*width*4+w*4+0] = static_cast<uchar>(rdata[h*width*3+w*3+0]); + newdata[h*width*4+w*4+1] = static_cast<uchar>(rdata[h*width*3+w*3+1]); + newdata[h*width*4+w*4+2] = static_cast<uchar>(rdata[h*width*3+w*3+2]); newdata[h*width*4+w*4+3] = 0; } } @@ -415,16 +415,16 @@ void CairoImage::loadFromMemory(const char* const rdata, const Size<uint>& s, co case kImageFormatBGRA: // BGRA8 to CAIRO_FORMAT_ARGB32 // FIXME something is wrong here... - for (uint h = 0, t; h < height; ++h) + for (int h = 0, t; h < height; ++h) { - for (uint w = 0; w < width; ++w) + for (int w = 0; w < width; ++w) { if ((t = rdata[h*width*4+w*4+3]) != 0) { - newdata[h*width*4+w*4+0] = rdata[h*width*4+w*4+0]; - newdata[h*width*4+w*4+1] = rdata[h*width*4+w*4+1]; - newdata[h*width*4+w*4+2] = rdata[h*width*4+w*4+2]; - newdata[h*width*4+w*4+3] = t; + newdata[h*width*4+w*4+0] = static_cast<uchar>(rdata[h*width*4+w*4+0]); + newdata[h*width*4+w*4+1] = static_cast<uchar>(rdata[h*width*4+w*4+1]); + newdata[h*width*4+w*4+2] = static_cast<uchar>(rdata[h*width*4+w*4+2]); + newdata[h*width*4+w*4+3] = static_cast<uchar>(t); } else { @@ -476,6 +476,11 @@ void CairoImage::loadFromPNG(const char* const pngData, const uint pngSize) noex cairo_surface_t* const newsurface = cairo_image_surface_create_from_png_stream(PngReaderData::read, &readerData); DISTRHO_SAFE_ASSERT_RETURN(newsurface != nullptr,); + const int newwidth = cairo_image_surface_get_width(newsurface); + const int newheight = cairo_image_surface_get_height(newsurface); + DISTRHO_SAFE_ASSERT_INT_RETURN(newwidth > 0, newwidth,); + DISTRHO_SAFE_ASSERT_INT_RETURN(newheight > 0, newheight,); + cairo_surface_destroy(surface); if (datarefcount != nullptr && --(*datarefcount) == 0) @@ -489,7 +494,7 @@ void CairoImage::loadFromPNG(const char* const pngData, const uint pngSize) noex rawData = nullptr; format = kImageFormatNull; // asCairoImageFormat(cairo_image_surface_get_format(newsurface)); - size = Size<uint>(cairo_image_surface_get_width(newsurface), cairo_image_surface_get_height(newsurface)); + size = Size<uint>(static_cast<uint>(newwidth), static_cast<uint>(newheight)); } void CairoImage::drawAt(const GraphicsContext& context, const Point<int>& pos) @@ -597,7 +602,7 @@ void ImageBaseKnob<CairoImage>::PrivateData::cleanup() Get the pixel size in bytes. @return pixel size, or 0 if the format is unknown, or pixels are not aligned to bytes. */ -static uint getBytesPerPixel(cairo_format_t format) noexcept +static int getBytesPerPixel(const cairo_format_t format) noexcept { switch (format) { @@ -617,17 +622,17 @@ static uint getBytesPerPixel(cairo_format_t format) noexcept } } -static cairo_surface_t* getRegion(cairo_surface_t* origsurface, uint x, uint y, uint width, uint height) noexcept +static cairo_surface_t* getRegion(cairo_surface_t* origsurface, int x, int y, int width, int height) noexcept { const cairo_format_t format = cairo_image_surface_get_format(origsurface); - const uint bpp = getBytesPerPixel(format); + const int bpp = getBytesPerPixel(format); if (bpp == 0) return nullptr; - const uint fullWidth = cairo_image_surface_get_width(origsurface); - const uint fullHeight = cairo_image_surface_get_height(origsurface); - const uint stride = cairo_image_surface_get_stride(origsurface); + const int fullWidth = cairo_image_surface_get_width(origsurface); + const int fullHeight = cairo_image_surface_get_height(origsurface); + const int stride = cairo_image_surface_get_stride(origsurface); uchar* const fullData = cairo_image_surface_get_data(origsurface); x = (x < fullWidth) ? x : fullWidth; @@ -635,7 +640,7 @@ static cairo_surface_t* getRegion(cairo_surface_t* origsurface, uint x, uint y, width = (x + width < fullWidth) ? width : (fullWidth - x); height = (x + height < fullHeight) ? height : (fullHeight - x); - uchar* const data = fullData + x * bpp + y * stride; + uchar* const data = fullData + (x * bpp + y * stride); return cairo_image_surface_create_for_data(data, format, width, height, stride); } @@ -644,22 +649,22 @@ void ImageBaseKnob<CairoImage>::onDisplay() { const GraphicsContext& context(getGraphicsContext()); cairo_t* const handle = ((const CairoGraphicsContext&)context).handle; - const float normValue = ((pData->usingLog ? pData->invlogscale(pData->value) : pData->value) - pData->minimum) + const double normValue = ((pData->usingLog ? pData->invlogscale(pData->value) : pData->value) - pData->minimum) / (pData->maximum - pData->minimum); cairo_surface_t* surface = (cairo_surface_t*)pData->cairoSurface; if (! pData->isReady) { - const uint layerW = pData->imgLayerWidth; - const uint layerH = pData->imgLayerHeight; - uint layerNum = 0; + const int layerW = static_cast<int>(pData->imgLayerWidth); + const int layerH = static_cast<int>(pData->imgLayerHeight); + int layerNum = 0; if (pData->rotationAngle == 0) - layerNum = uint(normValue * float(pData->imgLayerCount-1)); + layerNum = static_cast<int>(normValue * static_cast<double>(pData->imgLayerCount - 1) + 0.5); - const uint layerX = pData->isImgVertical ? 0 : layerNum * layerW; - const uint layerY = !pData->isImgVertical ? 0 : layerNum * layerH; + const int layerX = pData->isImgVertical ? 0 : layerNum * layerW; + const int layerY = !pData->isImgVertical ? 0 : layerNum * layerH; cairo_surface_t* newsurface; @@ -672,8 +677,8 @@ void ImageBaseKnob<CairoImage>::onDisplay() newsurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, layerW, layerH); cairo_t* const cr = cairo_create(newsurface); cairo_translate(cr, 0.5 * layerW, 0.5 * layerH); - cairo_rotate(cr, normValue * pData->rotationAngle * (float)(M_PI / 180)); - cairo_set_source_surface(cr, pData->image.getSurface(), -0.5f * layerW, -0.5f * layerH); + cairo_rotate(cr, normValue * pData->rotationAngle * (M_PI / 180)); + cairo_set_source_surface(cr, pData->image.getSurface(), -0.5 * layerW, -0.5 * layerH); cairo_paint(cr); cairo_destroy(cr); } diff --git a/dgl/src/Common.hpp b/dgl/src/Common.hpp @@ -75,7 +75,7 @@ struct ButtonImpl { // button was pressed, wait for release if (ev.press && self->contains(ev.pos)) { - button = ev.button; + button = static_cast<int>(ev.button); state = kStateDown; self->repaint(); return true; @@ -135,8 +135,8 @@ struct ImageBaseKnob<ImageType>::PrivateData { int rotationAngle; bool dragging; - int lastX; - int lastY; + double lastX; + double lastY; Callback* callback; @@ -164,18 +164,18 @@ struct ImageBaseKnob<ImageType>::PrivateData { void init(); void cleanup(); - inline float logscale(float value) const + inline float logscale(const float v) const { const float b = std::log(maximum/minimum)/(maximum-minimum); const float a = maximum/std::exp(maximum*b); - return a * std::exp(b*value); + return a * std::exp(b*v); } - inline float invlogscale(float value) const + inline float invlogscale(const float v) const { const float b = std::log(maximum/minimum)/(maximum-minimum); const float a = maximum/std::exp(maximum*b); - return std::log(value/a)/b; + return std::log(v/a)/b; } DISTRHO_DECLARE_NON_COPYABLE(PrivateData) diff --git a/dgl/src/Geometry.cpp b/dgl/src/Geometry.cpp @@ -249,7 +249,22 @@ bool Size<T>::isInvalid() const noexcept template<typename T> Size<int> Size<T>::toInt() const noexcept { - return Size<int>(fWidth, fHeight); + return Size<int>(static_cast<int>(fWidth), + static_cast<int>(fHeight)); +} + +template<> +Size<int> Size<double>::toInt() const noexcept +{ + return Size<int>(static_cast<int>(fWidth + 0.5), + static_cast<int>(fHeight + 0.5)); +} + +template<> +Size<int> Size<float>::toInt() const noexcept +{ + return Size<int>(static_cast<int>(fWidth + 0.5f), + static_cast<int>(fHeight + 0.5f)); } template<typename T> @@ -645,10 +660,10 @@ Triangle<T>::Triangle(const T& x1, const T& y1, const T& x2, const T& y2, const pos3(x3, y3) {} template<typename T> -Triangle<T>::Triangle(const Point<T>& pos1, const Point<T>& pos2, const Point<T>& pos3) noexcept - : pos1(pos1), - pos2(pos2), - pos3(pos3) {} +Triangle<T>::Triangle(const Point<T>& p1, const Point<T>& p2, const Point<T>& p3) noexcept + : pos1(p1), + pos2(p2), + pos3(p3) {} template<typename T> Triangle<T>::Triangle(const Triangle<T>& tri) noexcept @@ -710,24 +725,24 @@ Rectangle<T>::Rectangle() noexcept size(0, 0) {} template<typename T> -Rectangle<T>::Rectangle(const T& x, const T& y, const T& width, const T& height) noexcept +Rectangle<T>::Rectangle(const T& x, const T& y, const T& w, const T& h) noexcept : pos(x, y), - size(width, height) {} + size(w, h) {} template<typename T> -Rectangle<T>::Rectangle(const T& x, const T& y, const Size<T>& size) noexcept +Rectangle<T>::Rectangle(const T& x, const T& y, const Size<T>& s) noexcept : pos(x, y), - size(size) {} + size(s) {} template<typename T> -Rectangle<T>::Rectangle(const Point<T>& pos, const T& width, const T& height) noexcept - : pos(pos), - size(width, height) {} +Rectangle<T>::Rectangle(const Point<T>& p, const T& w, const T& h) noexcept + : pos(p), + size(w, h) {} template<typename T> -Rectangle<T>::Rectangle(const Point<T>& pos, const Size<T>& size) noexcept - : pos(pos), - size(size) {} +Rectangle<T>::Rectangle(const Point<T>& p, const Size<T>& s) noexcept + : pos(p), + size(s) {} template<typename T> Rectangle<T>::Rectangle(const Rectangle<T>& rect) noexcept @@ -865,9 +880,9 @@ bool Rectangle<T>::contains(const T& x, const T& y) const noexcept } template<typename T> -bool Rectangle<T>::contains(const Point<T>& pos) const noexcept +bool Rectangle<T>::contains(const Point<T>& p) const noexcept { - return contains(pos.x, pos.y); + return contains(p.x, p.y); } template<typename T> diff --git a/dgl/src/ImageBase.cpp b/dgl/src/ImageBase.cpp @@ -81,12 +81,12 @@ ImageFormat ImageBase::getFormat() const noexcept return format; } -void ImageBase::loadFromMemory(const char* const rawData, - const uint width, - const uint height, - const ImageFormat format) noexcept +void ImageBase::loadFromMemory(const char* const rdata, + const uint width, + const uint height, + const ImageFormat fmt) noexcept { - loadFromMemory(rawData, Size<uint>(width, height), format); + loadFromMemory(rdata, Size<uint>(width, height), fmt); } void ImageBase::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept diff --git a/dgl/src/ImageBaseWidgets.cpp b/dgl/src/ImageBaseWidgets.cpp @@ -201,8 +201,8 @@ ImageBaseKnob<ImageType>::PrivateData::PrivateData(const ImageType& img, const O orientation(o), rotationAngle(0), dragging(false), - lastX(0), - lastY(0), + lastX(0.0), + lastY(0.0), callback(nullptr), alwaysRepaint(false), isImgVertical(img.getHeight() > img.getWidth()), @@ -228,8 +228,8 @@ ImageBaseKnob<ImageType>::PrivateData::PrivateData(PrivateData* const other) orientation(other->orientation), rotationAngle(other->rotationAngle), dragging(false), - lastX(0), - lastY(0), + lastX(0.0), + lastY(0.0), callback(other->callback), alwaysRepaint(other->alwaysRepaint), isImgVertical(other->isImgVertical), @@ -245,21 +245,21 @@ template <class ImageType> void ImageBaseKnob<ImageType>::PrivateData::assignFrom(PrivateData* const other) { cleanup(); - image = other->image; - minimum = other->minimum; - maximum = other->maximum; - step = other->step; - value = other->value; - valueDef = other->valueDef; - valueTmp = value; - usingDefault = other->usingDefault; - usingLog = other->usingLog; - orientation = other->orientation; - rotationAngle = other->rotationAngle; - dragging = false; - lastX = 0; - lastY = 0; - callback = other->callback; + image = other->image; + minimum = other->minimum; + maximum = other->maximum; + step = other->step; + value = other->value; + valueDef = other->valueDef; + valueTmp = value; + usingDefault = other->usingDefault; + usingLog = other->usingLog; + orientation = other->orientation; + rotationAngle = other->rotationAngle; + dragging = false; + lastX = 0.0; + lastY = 0.0; + callback = other->callback; alwaysRepaint = other->alwaysRepaint; isImgVertical = other->isImgVertical; imgLayerWidth = other->imgLayerWidth; @@ -476,7 +476,7 @@ bool ImageBaseKnob<ImageType>::onMotion(const MotionEvent& ev) if (pData->orientation == ImageBaseKnob<ImageType>::Horizontal) { - if (const int movX = ev.pos.getX() - pData->lastX) + if (const double movX = ev.pos.getX() - pData->lastX) { d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; value = (pData->usingLog ? pData->invlogscale(pData->valueTmp) : pData->valueTmp) + (float(pData->maximum - pData->minimum) / d * float(movX)); @@ -485,7 +485,7 @@ bool ImageBaseKnob<ImageType>::onMotion(const MotionEvent& ev) } else if (pData->orientation == ImageBaseKnob<ImageType>::Vertical) { - if (const int movY = pData->lastY - ev.pos.getY()) + if (const double movY = pData->lastY - ev.pos.getY()) { d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; value = (pData->usingLog ? pData->invlogscale(pData->valueTmp) : pData->valueTmp) + (float(pData->maximum - pData->minimum) / d * float(movY)); @@ -529,7 +529,8 @@ bool ImageBaseKnob<ImageType>::onScroll(const ScrollEvent& ev) return false; const float d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; - float value = (pData->usingLog ? pData->invlogscale(pData->valueTmp) : pData->valueTmp) + (float(pData->maximum - pData->minimum) / d * 10.f * ev.delta.getY()); + float value = (pData->usingLog ? pData->invlogscale(pData->valueTmp) : pData->valueTmp) + + ((pData->maximum - pData->minimum) / d * 10.f * static_cast<float>(ev.delta.getY())); if (pData->usingLog) value = pData->logscale(value); @@ -569,8 +570,8 @@ struct ImageBaseSlider<ImageType>::PrivateData { bool dragging; bool inverted; bool valueIsSet; - int startedX; - int startedY; + double startedX; + double startedY; Callback* callback; @@ -590,8 +591,8 @@ struct ImageBaseSlider<ImageType>::PrivateData { dragging(false), inverted(false), valueIsSet(false), - startedX(0), - startedY(0), + startedX(0.0), + startedY(0.0), callback(nullptr), startPos(), endPos(), @@ -814,8 +815,8 @@ bool ImageBaseSlider<ImageType>::onMouse(const MouseEvent& ev) } float vper; - const int x = ev.pos.getX(); - const int y = ev.pos.getY(); + const double x = ev.pos.getX(); + const double y = ev.pos.getY(); if (pData->startPos.getY() == pData->endPos.getY()) { @@ -880,8 +881,8 @@ bool ImageBaseSlider<ImageType>::onMotion(const MotionEvent& ev) return false; const bool horizontal = pData->startPos.getY() == pData->endPos.getY(); - const int x = ev.pos.getX(); - const int y = ev.pos.getY(); + const double x = ev.pos.getX(); + const double y = ev.pos.getY(); if ((horizontal && pData->sliderArea.containsX(x)) || (pData->sliderArea.containsY(y) && ! horizontal)) { diff --git a/dgl/src/OpenGL.cpp b/dgl/src/OpenGL.cpp @@ -60,7 +60,7 @@ void Line<T>::draw(const GraphicsContext&, const T width) { DISTRHO_SAFE_ASSERT_RETURN(width != 0,); - glLineWidth(width); + glLineWidth(static_cast<GLfloat>(width)); drawLine<T>(posStart, posEnd); } @@ -120,7 +120,7 @@ void Circle<T>::drawOutline(const GraphicsContext&, const T lineWidth) { DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); - glLineWidth(lineWidth); + glLineWidth(static_cast<GLfloat>(lineWidth)); drawCircle<T>(fPos, fNumSegments, fSize, fSin, fCos, true); } @@ -177,7 +177,7 @@ void Triangle<T>::drawOutline(const GraphicsContext&, const T lineWidth) { DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); - glLineWidth(lineWidth); + glLineWidth(static_cast<GLfloat>(lineWidth)); drawTriangle<T>(pos1, pos2, pos3, true); } @@ -244,7 +244,7 @@ void Rectangle<T>::drawOutline(const GraphicsContext&, const T lineWidth) { DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); - glLineWidth(lineWidth); + glLineWidth(static_cast<GLfloat>(lineWidth)); drawRectangle<T>(*this, true); } @@ -348,8 +348,8 @@ OpenGLImage::OpenGLImage() DISTRHO_SAFE_ASSERT(textureId != 0); } -OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) - : ImageBase(rawData, width, height, format), +OpenGLImage::OpenGLImage(const char* const rdata, const uint w, const uint h, const ImageFormat fmt) + : ImageBase(rdata, w, h, fmt), textureId(0), setupCalled(false) { @@ -357,8 +357,8 @@ OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint DISTRHO_SAFE_ASSERT(textureId != 0); } -OpenGLImage::OpenGLImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) - : ImageBase(rawData, size, format), +OpenGLImage::OpenGLImage(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) + : ImageBase(rdata, s, fmt), textureId(0), setupCalled(false) { @@ -402,8 +402,8 @@ OpenGLImage& OpenGLImage::operator=(const OpenGLImage& image) noexcept } // deprecated calls -OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint height, const GLenum format) - : ImageBase(rawData, width, height, asDISTRHOImageFormat(format)), +OpenGLImage::OpenGLImage(const char* const rdata, const uint w, const uint h, const GLenum fmt) + : ImageBase(rdata, w, h, asDISTRHOImageFormat(fmt)), textureId(0), setupCalled(false) { @@ -411,8 +411,8 @@ OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint DISTRHO_SAFE_ASSERT(textureId != 0); } -OpenGLImage::OpenGLImage(const char* const rawData, const Size<uint>& size, const GLenum format) - : ImageBase(rawData, size, asDISTRHOImageFormat(format)), +OpenGLImage::OpenGLImage(const char* const rdata, const Size<uint>& s, const GLenum fmt) + : ImageBase(rdata, s, asDISTRHOImageFormat(fmt)), textureId(0), setupCalled(false) { @@ -568,31 +568,33 @@ void SubWidget::PrivateData::display(const uint width, const uint height, const { // full viewport size glViewport(0, - -(height * autoScaleFactor - height), - width * autoScaleFactor, - height * autoScaleFactor); + -static_cast<int>(height * autoScaleFactor - height + 0.5), + static_cast<int>(width * autoScaleFactor + 0.5), + static_cast<int>(height * autoScaleFactor + 0.5)); } else if (needsViewportScaling) { // limit viewport to widget bounds glViewport(absolutePos.getX(), - height - self->getHeight() - absolutePos.getY(), - self->getWidth(), - self->getHeight()); + static_cast<int>(height - self->getHeight()) - absolutePos.getY(), + static_cast<int>(self->getWidth()), + static_cast<int>(self->getHeight())); } else { // set viewport pos - glViewport(absolutePos.getX() * autoScaleFactor, - -std::round((height * autoScaleFactor - height) + (absolutePos.getY() * autoScaleFactor)), - std::round(width * autoScaleFactor), - std::round(height * autoScaleFactor)); + glViewport(static_cast<int>(absolutePos.getX() * autoScaleFactor + 0.5), + -static_cast<int>(std::round((height * autoScaleFactor - height) + + (absolutePos.getY() * autoScaleFactor))), + static_cast<int>(std::round(width * autoScaleFactor)), + static_cast<int>(std::round(height * autoScaleFactor))); // then cut the outer bounds - glScissor(absolutePos.getX() * autoScaleFactor, - height - std::round((self->getHeight() + absolutePos.getY()) * autoScaleFactor), - std::round(self->getWidth() * autoScaleFactor), - std::round(self->getHeight() * autoScaleFactor)); + glScissor(static_cast<int>(absolutePos.getX() * autoScaleFactor + 0.5), + static_cast<int>(height - std::round((static_cast<int>(self->getHeight()) + absolutePos.getY()) + * autoScaleFactor)), + static_cast<int>(std::round(self->getWidth() * autoScaleFactor)), + static_cast<int>(std::round(self->getHeight() * autoScaleFactor))); glEnable(GL_SCISSOR_TEST); needsDisableScissor = true; @@ -622,9 +624,16 @@ void TopLevelWidget::PrivateData::display() // full viewport size if (window.pData->autoScaling) - glViewport(0, -(height * autoScaleFactor - height), width * autoScaleFactor, height * autoScaleFactor); + { + glViewport(0, + -static_cast<int>(height * autoScaleFactor - height), + static_cast<int>(width * autoScaleFactor), + static_cast<int>(height * autoScaleFactor)); + } else - glViewport(0, 0, width, height); + { + glViewport(0, 0, static_cast<int>(width), static_cast<int>(height)); + } // main widget drawing self->onDisplay(); diff --git a/dgl/src/SubWidget.cpp b/dgl/src/SubWidget.cpp @@ -64,8 +64,8 @@ Rectangle<int> SubWidget::getAbsoluteArea() const noexcept Rectangle<uint> SubWidget::getConstrainedAbsoluteArea() const noexcept { - return Rectangle<uint>(std::max(0, getAbsoluteX()), - std::max(0, getAbsoluteY()), + return Rectangle<uint>(static_cast<uint>(std::max(0, getAbsoluteX())), + static_cast<uint>(std::max(0, getAbsoluteY())), getSize()); } diff --git a/dgl/src/Vulkan.cpp b/dgl/src/Vulkan.cpp @@ -170,11 +170,11 @@ template class Rectangle<ushort>; VulkanImage::VulkanImage() : ImageBase() {} -VulkanImage::VulkanImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) - : ImageBase(rawData, width, height, format) {} +VulkanImage::VulkanImage(const char* const rdata, const uint w, const uint h, const ImageFormat fmt) + : ImageBase(rdata, w, h, fmt) {} -VulkanImage::VulkanImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) - : ImageBase(rawData, size, format) {} +VulkanImage::VulkanImage(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) + : ImageBase(rdata, s, fmt) {} VulkanImage::VulkanImage(const VulkanImage& image) : ImageBase(image.rawData, image.size, image.format) {} diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp @@ -93,18 +93,25 @@ void Window::setResizable(const bool resizable) uint Window::getWidth() const noexcept { - return puglGetFrame(pData->view).width; + const double width = puglGetFrame(pData->view).width; + DISTRHO_SAFE_ASSERT_RETURN(width >= 0.0, 0); + return static_cast<uint>(width + 0.5); } uint Window::getHeight() const noexcept { - return puglGetFrame(pData->view).height; + const double height = puglGetFrame(pData->view).height; + DISTRHO_SAFE_ASSERT_RETURN(height >= 0.0, 0); + return static_cast<uint>(height + 0.5); } Size<uint> Window::getSize() const noexcept { const PuglRect rect = puglGetFrame(pData->view); - return Size<uint>(rect.width, rect.height); + DISTRHO_SAFE_ASSERT_RETURN(rect.width >= 0.0, Size<uint>()); + DISTRHO_SAFE_ASSERT_RETURN(rect.height >= 0.0, Size<uint>()); + return Size<uint>(static_cast<uint>(rect.width + 0.5), + static_cast<uint>(rect.height + 0.5)); } void Window::setWidth(const uint width) @@ -123,7 +130,7 @@ void Window::setSize(const uint width, const uint height) // FIXME add default and min props for this if (pData->minWidth == 0 && pData->minHeight == 0) - puglSetDefaultSize(pData->view, width, height); + puglSetDefaultSize(pData->view, static_cast<int>(width), static_cast<int>(height)); puglSetWindowSize(pData->view, width, height); } @@ -237,16 +244,16 @@ void Window::setGeometryConstraints(const uint minimumWidth, const double scaleFactor = pData->scaleFactor; puglSetGeometryConstraints(pData->view, - minimumWidth * scaleFactor, - minimumHeight * scaleFactor, + static_cast<uint>(minimumWidth * scaleFactor + 0.5), + static_cast<uint>(minimumHeight * scaleFactor + 0.5), keepAspectRatio); if (scaleFactor != 1.0) { const Size<uint> size(getSize()); - setSize(size.getWidth() * scaleFactor, - size.getHeight() * scaleFactor); + setSize(static_cast<uint>(size.getWidth() * scaleFactor + 0.5), + static_cast<uint>(size.getHeight() * scaleFactor + 0.5)); } } diff --git a/dgl/src/WindowPrivateData.cpp b/dgl/src/WindowPrivateData.cpp @@ -146,7 +146,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, { if (isEmbed) { - puglSetDefaultSize(view, width, height); + puglSetDefaultSize(view, static_cast<int>(width), static_cast<int>(height)); puglSetParentWindow(view, parentWindowHandle); } @@ -246,8 +246,8 @@ void Window::PrivateData::show() // FIXME PuglRect rect = puglGetFrame(view); - puglSetDefaultSize(view, rect.width, rect.height); - puglSetWindowSize(view, rect.width, rect.height); + puglSetDefaultSize(view, static_cast<int>(rect.width), static_cast<int>(rect.height)); + puglSetWindowSize(view, static_cast<uint>(rect.width), static_cast<uint>(rect.height)); #ifdef DISTRHO_OS_WINDOWS puglWin32ShowWindowCentered(view); @@ -395,7 +395,7 @@ void Window::PrivateData::startModal() // FIXME? PuglRect rect = puglGetFrame(view); - puglSetDefaultSize(view, rect.width, rect.height); + puglSetDefaultSize(view, static_cast<int>(rect.width), static_cast<int>(rect.height)); // make sure both parent and ourselves are visible modal.parent->show(); @@ -464,7 +464,7 @@ void Window::PrivateData::runAsModal(const bool blockWait) // ----------------------------------------------------------------------- // pugl events -void Window::PrivateData::onPuglConfigure(const int width, const int height) +void Window::PrivateData::onPuglConfigure(const double width, const double height) { DISTRHO_SAFE_ASSERT_INT2_RETURN(width > 1 && height > 1, width, height,); @@ -472,16 +472,18 @@ void Window::PrivateData::onPuglConfigure(const int width, const int height) if (autoScaling) { - const double scaleHorizontal = static_cast<double>(width) / static_cast<double>(minWidth); - const double scaleVertical = static_cast<double>(height) / static_cast<double>(minHeight); + const double scaleHorizontal = width / static_cast<double>(minWidth); + const double scaleVertical = height / static_cast<double>(minHeight); autoScaleFactor = scaleHorizontal < scaleVertical ? scaleHorizontal : scaleVertical; } - self->onReshape(width, height); + const uint uwidth = static_cast<uint>(width + 0.5); + const uint uheight = static_cast<uint>(height + 0.5); + self->onReshape(uwidth, uheight); #ifndef DPF_TEST_WINDOW_CPP if (topLevelWidget != nullptr) - topLevelWidget->setSize(width, height); + topLevelWidget->setSize(uwidth, uheight); #endif // always repaint after a resize diff --git a/dgl/src/WindowPrivateData.hpp b/dgl/src/WindowPrivateData.hpp @@ -91,6 +91,9 @@ struct Window::PrivateData : IdleCallback { { DISTRHO_SAFE_ASSERT(! enabled); } + + DISTRHO_DECLARE_NON_COPYABLE(Modal) + DISTRHO_PREVENT_HEAP_ALLOCATION } modal; /** Constructor for a regular, standalone window. */ @@ -144,7 +147,7 @@ struct Window::PrivateData : IdleCallback { void runAsModal(bool blockWait); // pugl events - void onPuglConfigure(int width, int height); + void onPuglConfigure(double width, double height); void onPuglExpose(); void onPuglClose(); void onPuglFocus(bool focus, CrossingMode mode); diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp @@ -194,14 +194,14 @@ void puglSetMatchingBackendForCurrentBuild(PuglView* const view) PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, const uint height, const bool aspect) { - view->minWidth = width; - view->minHeight = height; + view->minWidth = (int)width; + view->minHeight = (int)height; if (aspect) { - view->minAspectX = width; - view->minAspectY = height; - view->maxAspectX = width; - view->maxAspectY = height; + view->minAspectX = (int)width; + view->minAspectY = (int)height; + view->maxAspectX = (int)width; + view->maxAspectY = (int)height; } #if defined(DISTRHO_OS_HAIKU)