| @@ -542,6 +542,23 @@ public: | |||
| /**@}*/ | |||
| // --------------------------------------------------------------------------------------------------------------------- | |||
| // -Weffc++ compat ext widget | |||
| extern "C" { | |||
| typedef struct _NativeInlineDisplayImageSurfaceCompat { | |||
| unsigned char* data; | |||
| int width, height, stride; | |||
| size_t dataSize; | |||
| _NativeInlineDisplayImageSurfaceCompat() noexcept | |||
| : data(nullptr), width(0), height(0), stride(0), dataSize(0) {} | |||
| } NativeInlineDisplayImageSurfaceCompat; | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| #define PluginClassEND(ClassName) \ | |||
| @@ -237,14 +237,14 @@ protected: | |||
| const size_t dataSize = stride * height; | |||
| const uint pxToMove = fInlineDisplay.writtenValues; | |||
| uchar* data = fInlineDisplay.idisp.data; | |||
| uchar* data = fInlineDisplay.data; | |||
| if (fInlineDisplay.dataSize != dataSize || data == nullptr) | |||
| { | |||
| delete[] data; | |||
| data = new uchar[dataSize]; | |||
| std::memset(data, 0, dataSize); | |||
| fInlineDisplay.idisp.data = data; | |||
| fInlineDisplay.data = data; | |||
| fInlineDisplay.dataSize = dataSize; | |||
| } | |||
| else if (pxToMove != 0) | |||
| @@ -255,9 +255,9 @@ protected: | |||
| std::memmove(&data[h * stride + w * 4], &data[h * stride + (w+pxToMove) * 4], 4); | |||
| } | |||
| fInlineDisplay.idisp.width = static_cast<int>(width); | |||
| fInlineDisplay.idisp.height = static_cast<int>(height); | |||
| fInlineDisplay.idisp.stride = static_cast<int>(stride); | |||
| fInlineDisplay.width = static_cast<int>(width); | |||
| fInlineDisplay.height = static_cast<int>(height); | |||
| fInlineDisplay.stride = static_cast<int>(stride); | |||
| const uint h2 = height / 2; | |||
| @@ -329,7 +329,7 @@ protected: | |||
| fInlineDisplay.writtenValues = 0; | |||
| fInlineDisplay.pending = false; | |||
| return &fInlineDisplay.idisp; | |||
| return (NativeInlineDisplayImageSurface*)(NativeInlineDisplayImageSurfaceCompat*)&fInlineDisplay; | |||
| } | |||
| // ------------------------------------------------------------------- | |||
| @@ -344,17 +344,14 @@ private: | |||
| AudioFilePool fPool; | |||
| AudioFileThread fThread; | |||
| struct InlineDisplay { | |||
| NativeInlineDisplayImageSurface idisp; | |||
| size_t dataSize; | |||
| struct InlineDisplay : NativeInlineDisplayImageSurfaceCompat { | |||
| float lastValuesL[32]; | |||
| float lastValuesR[32]; | |||
| volatile uint8_t writtenValues; | |||
| volatile bool pending; | |||
| InlineDisplay() | |||
| : idisp{}, | |||
| dataSize(0), | |||
| : NativeInlineDisplayImageSurfaceCompat(), | |||
| lastValuesL{0.0f}, | |||
| lastValuesR{0.0f}, | |||
| writtenValues(0), | |||
| @@ -362,10 +359,10 @@ private: | |||
| ~InlineDisplay() | |||
| { | |||
| if (idisp.data != nullptr) | |||
| if (data != nullptr) | |||
| { | |||
| delete[] idisp.data; | |||
| idisp.data = nullptr; | |||
| delete[] data; | |||
| data = nullptr; | |||
| } | |||
| } | |||
| @@ -193,22 +193,22 @@ protected: | |||
| const size_t stride = width * 4; | |||
| const size_t dataSize = stride * height; | |||
| uchar* data = fInlineDisplay.idisp.data; | |||
| uchar* data = fInlineDisplay.data; | |||
| if (fInlineDisplay.dataSize < dataSize || data == nullptr) | |||
| { | |||
| delete[] data; | |||
| data = new uchar[dataSize]; | |||
| std::memset(data, 0, dataSize); | |||
| fInlineDisplay.idisp.data = data; | |||
| fInlineDisplay.data = data; | |||
| fInlineDisplay.dataSize = dataSize; | |||
| } | |||
| std::memset(data, 0, dataSize); | |||
| fInlineDisplay.idisp.width = static_cast<int>(width); | |||
| fInlineDisplay.idisp.height = static_cast<int>(height); | |||
| fInlineDisplay.idisp.stride = static_cast<int>(stride); | |||
| fInlineDisplay.width = static_cast<int>(width); | |||
| fInlineDisplay.height = static_cast<int>(height); | |||
| fInlineDisplay.stride = static_cast<int>(stride); | |||
| const uint heightValueLeft = static_cast<uint>(fInlineDisplay.lastLeft * static_cast<float>(height)); | |||
| const uint heightValueRight = static_cast<uint>(fInlineDisplay.lastRight * static_cast<float>(height)); | |||
| @@ -283,33 +283,30 @@ protected: | |||
| } | |||
| fInlineDisplay.pending = false; | |||
| return &fInlineDisplay.idisp; | |||
| return (NativeInlineDisplayImageSurface*)(NativeInlineDisplayImageSurfaceCompat*)&fInlineDisplay; | |||
| } | |||
| private: | |||
| int fColor, fStyle; | |||
| float fOutLeft, fOutRight; | |||
| struct InlineDisplay { | |||
| NativeInlineDisplayImageSurface idisp; | |||
| size_t dataSize; | |||
| struct InlineDisplay : NativeInlineDisplayImageSurfaceCompat { | |||
| float lastLeft; | |||
| float lastRight; | |||
| volatile bool pending; | |||
| InlineDisplay() | |||
| : idisp{}, | |||
| dataSize(0), | |||
| : NativeInlineDisplayImageSurfaceCompat(), | |||
| lastLeft(0.0f), | |||
| lastRight(0.0f), | |||
| pending(false) {} | |||
| ~InlineDisplay() | |||
| { | |||
| if (idisp.data != nullptr) | |||
| if (data != nullptr) | |||
| { | |||
| delete[] idisp.data; | |||
| idisp.data = nullptr; | |||
| delete[] data; | |||
| data = nullptr; | |||
| } | |||
| } | |||