Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
@@ -197,7 +197,7 @@ endif | |||||
ifeq ($(TESTBUILD),true) | ifeq ($(TESTBUILD),true) | ||||
BASE_FLAGS += -Werror -Wcast-qual -Wconversion -Wformat -Wformat-security -Wredundant-decls -Wshadow -Wstrict-overflow -fstrict-overflow -Wundef -Wwrite-strings | 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 | # BASE_FLAGS += -Wfloat-equal | ||||
ifeq ($(CC),clang) | ifeq ($(CC),clang) | ||||
BASE_FLAGS += -Wdocumentation -Wdocumentation-unknown-command | BASE_FLAGS += -Wdocumentation -Wdocumentation-unknown-command | ||||
@@ -106,8 +106,8 @@ public: | |||||
CairoImage& operator=(const CairoImage& image) noexcept; | CairoImage& operator=(const CairoImage& image) noexcept; | ||||
// FIXME this should not be needed | // 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) | inline void draw(const GraphicsContext& context) | ||||
{ drawAt(context, Point<int>(0, 0)); }; | { drawAt(context, Point<int>(0, 0)); }; | ||||
inline void drawAt(const GraphicsContext& context, int x, int y) | inline void drawAt(const GraphicsContext& context, int x, int y) | ||||
@@ -222,8 +222,8 @@ public: | |||||
OpenGLImage& operator=(const OpenGLImage& image) noexcept; | OpenGLImage& operator=(const OpenGLImage& image) noexcept; | ||||
// FIXME this should not be needed | // 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) | inline void draw(const GraphicsContext& context) | ||||
{ drawAt(context, Point<int>(0, 0)); }; | { drawAt(context, Point<int>(0, 0)); }; | ||||
inline void drawAt(const GraphicsContext& context, int x, int y) | inline void drawAt(const GraphicsContext& context, int x, int y) | ||||
@@ -88,8 +88,8 @@ public: | |||||
VulkanImage& operator=(const VulkanImage& image) noexcept; | VulkanImage& operator=(const VulkanImage& image) noexcept; | ||||
// FIXME this should not be needed | // 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) | inline void draw(const GraphicsContext& context) | ||||
{ drawAt(context, Point<int>(0, 0)); }; | { drawAt(context, Point<int>(0, 0)); }; | ||||
inline void drawAt(const GraphicsContext& context, int x, int y) | inline void drawAt(const GraphicsContext& context, int x, int y) | ||||
@@ -326,22 +326,22 @@ CairoImage::CairoImage() | |||||
surfacedata(nullptr), | surfacedata(nullptr), | ||||
datarefcount(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), | surface(nullptr), | ||||
surfacedata(nullptr), | surfacedata(nullptr), | ||||
datarefcount(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), | surface(nullptr), | ||||
surfacedata(nullptr), | surfacedata(nullptr), | ||||
datarefcount(nullptr) | datarefcount(nullptr) | ||||
{ | { | ||||
loadFromMemory(rawData, size, format); | |||||
loadFromMemory(rdata, s, fmt); | |||||
} | } | ||||
CairoImage::CairoImage(const CairoImage& image) | 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 | void CairoImage::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept | ||||
{ | { | ||||
const cairo_format_t cairoformat = asCairoImageFormat(fmt); | 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,); | DISTRHO_SAFE_ASSERT_RETURN(newdata != nullptr,); | ||||
cairo_surface_t* const newsurface = cairo_image_surface_create_for_data(newdata, cairoformat, width, height, stride); | 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; | break; | ||||
case kImageFormatBGR: | case kImageFormatBGR: | ||||
// BGR8 to CAIRO_FORMAT_RGB24 | // 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; | 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: | case kImageFormatBGRA: | ||||
// BGRA8 to CAIRO_FORMAT_ARGB32 | // BGRA8 to CAIRO_FORMAT_ARGB32 | ||||
// FIXME something is wrong here... | // 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) | 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 | 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); | cairo_surface_t* const newsurface = cairo_image_surface_create_from_png_stream(PngReaderData::read, &readerData); | ||||
DISTRHO_SAFE_ASSERT_RETURN(newsurface != nullptr,); | 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); | cairo_surface_destroy(surface); | ||||
if (datarefcount != nullptr && --(*datarefcount) == 0) | if (datarefcount != nullptr && --(*datarefcount) == 0) | ||||
@@ -489,7 +494,7 @@ void CairoImage::loadFromPNG(const char* const pngData, const uint pngSize) noex | |||||
rawData = nullptr; | rawData = nullptr; | ||||
format = kImageFormatNull; // asCairoImageFormat(cairo_image_surface_get_format(newsurface)); | 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) | 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. | Get the pixel size in bytes. | ||||
@return pixel size, or 0 if the format is unknown, or pixels are not aligned to 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) | 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 cairo_format_t format = cairo_image_surface_get_format(origsurface); | ||||
const uint bpp = getBytesPerPixel(format); | |||||
const int bpp = getBytesPerPixel(format); | |||||
if (bpp == 0) | if (bpp == 0) | ||||
return nullptr; | 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); | uchar* const fullData = cairo_image_surface_get_data(origsurface); | ||||
x = (x < fullWidth) ? x : fullWidth; | 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); | width = (x + width < fullWidth) ? width : (fullWidth - x); | ||||
height = (x + height < fullHeight) ? height : (fullHeight - 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); | return cairo_image_surface_create_for_data(data, format, width, height, stride); | ||||
} | } | ||||
@@ -644,22 +649,22 @@ void ImageBaseKnob<CairoImage>::onDisplay() | |||||
{ | { | ||||
const GraphicsContext& context(getGraphicsContext()); | const GraphicsContext& context(getGraphicsContext()); | ||||
cairo_t* const handle = ((const CairoGraphicsContext&)context).handle; | 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); | / (pData->maximum - pData->minimum); | ||||
cairo_surface_t* surface = (cairo_surface_t*)pData->cairoSurface; | cairo_surface_t* surface = (cairo_surface_t*)pData->cairoSurface; | ||||
if (! pData->isReady) | 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) | 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; | cairo_surface_t* newsurface; | ||||
@@ -672,8 +677,8 @@ void ImageBaseKnob<CairoImage>::onDisplay() | |||||
newsurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, layerW, layerH); | newsurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, layerW, layerH); | ||||
cairo_t* const cr = cairo_create(newsurface); | cairo_t* const cr = cairo_create(newsurface); | ||||
cairo_translate(cr, 0.5 * layerW, 0.5 * layerH); | 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_paint(cr); | ||||
cairo_destroy(cr); | cairo_destroy(cr); | ||||
} | } | ||||
@@ -75,7 +75,7 @@ struct ButtonImpl { | |||||
// button was pressed, wait for release | // button was pressed, wait for release | ||||
if (ev.press && self->contains(ev.pos)) | if (ev.press && self->contains(ev.pos)) | ||||
{ | { | ||||
button = ev.button; | |||||
button = static_cast<int>(ev.button); | |||||
state = kStateDown; | state = kStateDown; | ||||
self->repaint(); | self->repaint(); | ||||
return true; | return true; | ||||
@@ -135,8 +135,8 @@ struct ImageBaseKnob<ImageType>::PrivateData { | |||||
int rotationAngle; | int rotationAngle; | ||||
bool dragging; | bool dragging; | ||||
int lastX; | |||||
int lastY; | |||||
double lastX; | |||||
double lastY; | |||||
Callback* callback; | Callback* callback; | ||||
@@ -164,18 +164,18 @@ struct ImageBaseKnob<ImageType>::PrivateData { | |||||
void init(); | void init(); | ||||
void cleanup(); | 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 b = std::log(maximum/minimum)/(maximum-minimum); | ||||
const float a = maximum/std::exp(maximum*b); | 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 b = std::log(maximum/minimum)/(maximum-minimum); | ||||
const float a = maximum/std::exp(maximum*b); | 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) | DISTRHO_DECLARE_NON_COPYABLE(PrivateData) | ||||
@@ -249,7 +249,22 @@ bool Size<T>::isInvalid() const noexcept | |||||
template<typename T> | template<typename T> | ||||
Size<int> Size<T>::toInt() const noexcept | 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> | 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) {} | pos3(x3, y3) {} | ||||
template<typename T> | 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> | template<typename T> | ||||
Triangle<T>::Triangle(const Triangle<T>& tri) noexcept | Triangle<T>::Triangle(const Triangle<T>& tri) noexcept | ||||
@@ -710,24 +725,24 @@ Rectangle<T>::Rectangle() noexcept | |||||
size(0, 0) {} | size(0, 0) {} | ||||
template<typename T> | 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), | : pos(x, y), | ||||
size(width, height) {} | |||||
size(w, h) {} | |||||
template<typename T> | 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), | : pos(x, y), | ||||
size(size) {} | |||||
size(s) {} | |||||
template<typename T> | 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> | 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> | template<typename T> | ||||
Rectangle<T>::Rectangle(const Rectangle<T>& rect) noexcept | 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> | 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> | template<typename T> | ||||
@@ -81,12 +81,12 @@ ImageFormat ImageBase::getFormat() const noexcept | |||||
return format; | 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 | void ImageBase::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept | ||||
@@ -201,8 +201,8 @@ ImageBaseKnob<ImageType>::PrivateData::PrivateData(const ImageType& img, const O | |||||
orientation(o), | orientation(o), | ||||
rotationAngle(0), | rotationAngle(0), | ||||
dragging(false), | dragging(false), | ||||
lastX(0), | |||||
lastY(0), | |||||
lastX(0.0), | |||||
lastY(0.0), | |||||
callback(nullptr), | callback(nullptr), | ||||
alwaysRepaint(false), | alwaysRepaint(false), | ||||
isImgVertical(img.getHeight() > img.getWidth()), | isImgVertical(img.getHeight() > img.getWidth()), | ||||
@@ -228,8 +228,8 @@ ImageBaseKnob<ImageType>::PrivateData::PrivateData(PrivateData* const other) | |||||
orientation(other->orientation), | orientation(other->orientation), | ||||
rotationAngle(other->rotationAngle), | rotationAngle(other->rotationAngle), | ||||
dragging(false), | dragging(false), | ||||
lastX(0), | |||||
lastY(0), | |||||
lastX(0.0), | |||||
lastY(0.0), | |||||
callback(other->callback), | callback(other->callback), | ||||
alwaysRepaint(other->alwaysRepaint), | alwaysRepaint(other->alwaysRepaint), | ||||
isImgVertical(other->isImgVertical), | isImgVertical(other->isImgVertical), | ||||
@@ -245,21 +245,21 @@ template <class ImageType> | |||||
void ImageBaseKnob<ImageType>::PrivateData::assignFrom(PrivateData* const other) | void ImageBaseKnob<ImageType>::PrivateData::assignFrom(PrivateData* const other) | ||||
{ | { | ||||
cleanup(); | 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; | alwaysRepaint = other->alwaysRepaint; | ||||
isImgVertical = other->isImgVertical; | isImgVertical = other->isImgVertical; | ||||
imgLayerWidth = other->imgLayerWidth; | imgLayerWidth = other->imgLayerWidth; | ||||
@@ -476,7 +476,7 @@ bool ImageBaseKnob<ImageType>::onMotion(const MotionEvent& ev) | |||||
if (pData->orientation == ImageBaseKnob<ImageType>::Horizontal) | 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; | 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)); | 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) | 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; | 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)); | 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; | return false; | ||||
const float d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f; | 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) | if (pData->usingLog) | ||||
value = pData->logscale(value); | value = pData->logscale(value); | ||||
@@ -569,8 +570,8 @@ struct ImageBaseSlider<ImageType>::PrivateData { | |||||
bool dragging; | bool dragging; | ||||
bool inverted; | bool inverted; | ||||
bool valueIsSet; | bool valueIsSet; | ||||
int startedX; | |||||
int startedY; | |||||
double startedX; | |||||
double startedY; | |||||
Callback* callback; | Callback* callback; | ||||
@@ -590,8 +591,8 @@ struct ImageBaseSlider<ImageType>::PrivateData { | |||||
dragging(false), | dragging(false), | ||||
inverted(false), | inverted(false), | ||||
valueIsSet(false), | valueIsSet(false), | ||||
startedX(0), | |||||
startedY(0), | |||||
startedX(0.0), | |||||
startedY(0.0), | |||||
callback(nullptr), | callback(nullptr), | ||||
startPos(), | startPos(), | ||||
endPos(), | endPos(), | ||||
@@ -814,8 +815,8 @@ bool ImageBaseSlider<ImageType>::onMouse(const MouseEvent& ev) | |||||
} | } | ||||
float vper; | 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()) | if (pData->startPos.getY() == pData->endPos.getY()) | ||||
{ | { | ||||
@@ -880,8 +881,8 @@ bool ImageBaseSlider<ImageType>::onMotion(const MotionEvent& ev) | |||||
return false; | return false; | ||||
const bool horizontal = pData->startPos.getY() == pData->endPos.getY(); | 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)) | if ((horizontal && pData->sliderArea.containsX(x)) || (pData->sliderArea.containsY(y) && ! horizontal)) | ||||
{ | { | ||||
@@ -60,7 +60,7 @@ void Line<T>::draw(const GraphicsContext&, const T width) | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(width != 0,); | DISTRHO_SAFE_ASSERT_RETURN(width != 0,); | ||||
glLineWidth(width); | |||||
glLineWidth(static_cast<GLfloat>(width)); | |||||
drawLine<T>(posStart, posEnd); | drawLine<T>(posStart, posEnd); | ||||
} | } | ||||
@@ -120,7 +120,7 @@ void Circle<T>::drawOutline(const GraphicsContext&, const T lineWidth) | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); | DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); | ||||
glLineWidth(lineWidth); | |||||
glLineWidth(static_cast<GLfloat>(lineWidth)); | |||||
drawCircle<T>(fPos, fNumSegments, fSize, fSin, fCos, true); | 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,); | DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); | ||||
glLineWidth(lineWidth); | |||||
glLineWidth(static_cast<GLfloat>(lineWidth)); | |||||
drawTriangle<T>(pos1, pos2, pos3, true); | 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,); | DISTRHO_SAFE_ASSERT_RETURN(lineWidth != 0,); | ||||
glLineWidth(lineWidth); | |||||
glLineWidth(static_cast<GLfloat>(lineWidth)); | |||||
drawRectangle<T>(*this, true); | drawRectangle<T>(*this, true); | ||||
} | } | ||||
@@ -348,8 +348,8 @@ OpenGLImage::OpenGLImage() | |||||
DISTRHO_SAFE_ASSERT(textureId != 0); | 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), | textureId(0), | ||||
setupCalled(false) | setupCalled(false) | ||||
{ | { | ||||
@@ -357,8 +357,8 @@ OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint | |||||
DISTRHO_SAFE_ASSERT(textureId != 0); | 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), | textureId(0), | ||||
setupCalled(false) | setupCalled(false) | ||||
{ | { | ||||
@@ -402,8 +402,8 @@ OpenGLImage& OpenGLImage::operator=(const OpenGLImage& image) noexcept | |||||
} | } | ||||
// deprecated calls | // 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), | textureId(0), | ||||
setupCalled(false) | setupCalled(false) | ||||
{ | { | ||||
@@ -411,8 +411,8 @@ OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint | |||||
DISTRHO_SAFE_ASSERT(textureId != 0); | 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), | textureId(0), | ||||
setupCalled(false) | setupCalled(false) | ||||
{ | { | ||||
@@ -568,31 +568,33 @@ void SubWidget::PrivateData::display(const uint width, const uint height, const | |||||
{ | { | ||||
// full viewport size | // full viewport size | ||||
glViewport(0, | 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) | else if (needsViewportScaling) | ||||
{ | { | ||||
// limit viewport to widget bounds | // limit viewport to widget bounds | ||||
glViewport(absolutePos.getX(), | 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 | else | ||||
{ | { | ||||
// set viewport pos | // 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 | // 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); | glEnable(GL_SCISSOR_TEST); | ||||
needsDisableScissor = true; | needsDisableScissor = true; | ||||
@@ -622,9 +624,16 @@ void TopLevelWidget::PrivateData::display() | |||||
// full viewport size | // full viewport size | ||||
if (window.pData->autoScaling) | 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 | else | ||||
glViewport(0, 0, width, height); | |||||
{ | |||||
glViewport(0, 0, static_cast<int>(width), static_cast<int>(height)); | |||||
} | |||||
// main widget drawing | // main widget drawing | ||||
self->onDisplay(); | self->onDisplay(); | ||||
@@ -64,8 +64,8 @@ Rectangle<int> SubWidget::getAbsoluteArea() const noexcept | |||||
Rectangle<uint> SubWidget::getConstrainedAbsoluteArea() 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()); | getSize()); | ||||
} | } | ||||
@@ -170,11 +170,11 @@ template class Rectangle<ushort>; | |||||
VulkanImage::VulkanImage() | VulkanImage::VulkanImage() | ||||
: ImageBase() {} | : 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) | VulkanImage::VulkanImage(const VulkanImage& image) | ||||
: ImageBase(image.rawData, image.size, image.format) {} | : ImageBase(image.rawData, image.size, image.format) {} | ||||
@@ -93,18 +93,25 @@ void Window::setResizable(const bool resizable) | |||||
uint Window::getWidth() const noexcept | 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 | 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 | Size<uint> Window::getSize() const noexcept | ||||
{ | { | ||||
const PuglRect rect = puglGetFrame(pData->view); | 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) | 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 | // FIXME add default and min props for this | ||||
if (pData->minWidth == 0 && pData->minHeight == 0) | 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); | puglSetWindowSize(pData->view, width, height); | ||||
} | } | ||||
@@ -237,16 +244,16 @@ void Window::setGeometryConstraints(const uint minimumWidth, | |||||
const double scaleFactor = pData->scaleFactor; | const double scaleFactor = pData->scaleFactor; | ||||
puglSetGeometryConstraints(pData->view, | puglSetGeometryConstraints(pData->view, | ||||
minimumWidth * scaleFactor, | |||||
minimumHeight * scaleFactor, | |||||
static_cast<uint>(minimumWidth * scaleFactor + 0.5), | |||||
static_cast<uint>(minimumHeight * scaleFactor + 0.5), | |||||
keepAspectRatio); | keepAspectRatio); | ||||
if (scaleFactor != 1.0) | if (scaleFactor != 1.0) | ||||
{ | { | ||||
const Size<uint> size(getSize()); | 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)); | |||||
} | } | ||||
} | } | ||||
@@ -146,7 +146,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, | |||||
{ | { | ||||
if (isEmbed) | if (isEmbed) | ||||
{ | { | ||||
puglSetDefaultSize(view, width, height); | |||||
puglSetDefaultSize(view, static_cast<int>(width), static_cast<int>(height)); | |||||
puglSetParentWindow(view, parentWindowHandle); | puglSetParentWindow(view, parentWindowHandle); | ||||
} | } | ||||
@@ -246,8 +246,8 @@ void Window::PrivateData::show() | |||||
// FIXME | // FIXME | ||||
PuglRect rect = puglGetFrame(view); | 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 | #ifdef DISTRHO_OS_WINDOWS | ||||
puglWin32ShowWindowCentered(view); | puglWin32ShowWindowCentered(view); | ||||
@@ -395,7 +395,7 @@ void Window::PrivateData::startModal() | |||||
// FIXME? | // FIXME? | ||||
PuglRect rect = puglGetFrame(view); | 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 | // make sure both parent and ourselves are visible | ||||
modal.parent->show(); | modal.parent->show(); | ||||
@@ -464,7 +464,7 @@ void Window::PrivateData::runAsModal(const bool blockWait) | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// pugl events | // 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,); | 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) | 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; | 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 | #ifndef DPF_TEST_WINDOW_CPP | ||||
if (topLevelWidget != nullptr) | if (topLevelWidget != nullptr) | ||||
topLevelWidget->setSize(width, height); | |||||
topLevelWidget->setSize(uwidth, uheight); | |||||
#endif | #endif | ||||
// always repaint after a resize | // always repaint after a resize | ||||
@@ -91,6 +91,9 @@ struct Window::PrivateData : IdleCallback { | |||||
{ | { | ||||
DISTRHO_SAFE_ASSERT(! enabled); | DISTRHO_SAFE_ASSERT(! enabled); | ||||
} | } | ||||
DISTRHO_DECLARE_NON_COPYABLE(Modal) | |||||
DISTRHO_PREVENT_HEAP_ALLOCATION | |||||
} modal; | } modal; | ||||
/** Constructor for a regular, standalone window. */ | /** Constructor for a regular, standalone window. */ | ||||
@@ -144,7 +147,7 @@ struct Window::PrivateData : IdleCallback { | |||||
void runAsModal(bool blockWait); | void runAsModal(bool blockWait); | ||||
// pugl events | // pugl events | ||||
void onPuglConfigure(int width, int height); | |||||
void onPuglConfigure(double width, double height); | |||||
void onPuglExpose(); | void onPuglExpose(); | ||||
void onPuglClose(); | void onPuglClose(); | ||||
void onPuglFocus(bool focus, CrossingMode mode); | void onPuglFocus(bool focus, CrossingMode mode); | ||||
@@ -194,14 +194,14 @@ void puglSetMatchingBackendForCurrentBuild(PuglView* const view) | |||||
PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, const uint height, const bool aspect) | 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) { | 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) | #if defined(DISTRHO_OS_HAIKU) | ||||