diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-02-17 11:59:35 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-02-17 11:59:35 +1100 |
commit | 78883fa7f7ea9d85477a27ed3c569a899ee305fb (patch) | |
tree | f1add63ce6f3af86340d7e4c93092776b5479b14 /libs/dgl/src/ImageKnob.cpp | |
parent | af7a094a0c0e8b658736d77361a2d8d2f99b0006 (diff) | |
parent | 8da011deb152227714196f61eab26e1af37a2890 (diff) |
Merge pull request #24 from falkTX/master
Update DPF, inital file-browser for ZamSFZ
Diffstat (limited to 'libs/dgl/src/ImageKnob.cpp')
-rw-r--r-- | libs/dgl/src/ImageKnob.cpp | 60 |
1 files changed, 25 insertions, 35 deletions
diff --git a/libs/dgl/src/ImageKnob.cpp b/libs/dgl/src/ImageKnob.cpp index 0fc8c69..57dae6a 100644 --- a/libs/dgl/src/ImageKnob.cpp +++ b/libs/dgl/src/ImageKnob.cpp @@ -22,10 +22,9 @@ START_NAMESPACE_DGL // ----------------------------------------------------------------------- -ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation, int id) noexcept +ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation) noexcept : Widget(parent), fImage(image), - fId(id), fMinimum(0.0f), fMaximum(1.0f), fStep(0.0f), @@ -43,19 +42,17 @@ ImageKnob::ImageKnob(Window& parent, const Image& image, Orientation orientation fIsImgVertical(image.getHeight() > image.getWidth()), fImgLayerSize(fIsImgVertical ? image.getWidth() : image.getHeight()), fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerSize : image.getWidth()/fImgLayerSize), - fKnobArea(0, 0, fImgLayerSize, fImgLayerSize), - fTextureId(0), fIsReady(false), + fTextureId(0), leakDetector_ImageKnob() { glGenTextures(1, &fTextureId); setSize(fImgLayerSize, fImgLayerSize); } -ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation, int id) noexcept +ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation) noexcept : Widget(widget->getParentWindow()), fImage(image), - fId(id), fMinimum(0.0f), fMaximum(1.0f), fStep(0.0f), @@ -73,9 +70,8 @@ ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation fIsImgVertical(image.getHeight() > image.getWidth()), fImgLayerSize(fIsImgVertical ? image.getWidth() : image.getHeight()), fImgLayerCount(fIsImgVertical ? image.getHeight()/fImgLayerSize : image.getWidth()/fImgLayerSize), - fKnobArea(0, 0, fImgLayerSize, fImgLayerSize), - fTextureId(0), fIsReady(false), + fTextureId(0), leakDetector_ImageKnob() { glGenTextures(1, &fTextureId); @@ -85,7 +81,6 @@ ImageKnob::ImageKnob(Widget* widget, const Image& image, Orientation orientation ImageKnob::ImageKnob(const ImageKnob& imageKnob) : Widget(imageKnob.getParentWindow()), fImage(imageKnob.fImage), - fId(imageKnob.fId), fMinimum(imageKnob.fMinimum), fMaximum(imageKnob.fMaximum), fStep(imageKnob.fStep), @@ -103,9 +98,8 @@ ImageKnob::ImageKnob(const ImageKnob& imageKnob) fIsImgVertical(imageKnob.fIsImgVertical), fImgLayerSize(imageKnob.fImgLayerSize), fImgLayerCount(imageKnob.fImgLayerCount), - fKnobArea(imageKnob.fKnobArea), - fTextureId(0), fIsReady(false), + fTextureId(0), leakDetector_ImageKnob() { glGenTextures(1, &fTextureId); @@ -115,7 +109,6 @@ ImageKnob::ImageKnob(const ImageKnob& imageKnob) ImageKnob& ImageKnob::operator=(const ImageKnob& imageKnob) { fImage = imageKnob.fImage; - fId = imageKnob.fId; fMinimum = imageKnob.fMinimum; fMaximum = imageKnob.fMaximum; fStep = imageKnob.fStep; @@ -133,7 +126,6 @@ ImageKnob& ImageKnob::operator=(const ImageKnob& imageKnob) fIsImgVertical = imageKnob.fIsImgVertical; fImgLayerSize = imageKnob.fImgLayerSize; fImgLayerCount = imageKnob.fImgLayerCount; - fKnobArea = imageKnob.fKnobArea; fIsReady = false; if (fTextureId != 0) @@ -157,16 +149,6 @@ ImageKnob::~ImageKnob() } } -int ImageKnob::getId() const noexcept -{ - return fId; -} - -void ImageKnob::setId(int id) noexcept -{ - fId = id; -} - float ImageKnob::getValue() const noexcept { return fValue; @@ -220,12 +202,12 @@ void ImageKnob::setStep(float step) noexcept // NOTE: value is assumed to be scaled if using log void ImageKnob::setValue(float value, bool sendCallback) noexcept { - if (fValue == value) + if (d_isEqual(fValue, value)) return; fValue = value; - if (fStep == 0.0f) + if (d_isZero(fStep)) fValueTmp = value; if (fRotationAngle == 0) @@ -288,36 +270,44 @@ void ImageKnob::onDisplay() glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - int imageDataOffset = 0; + uint imageDataOffset = 0; if (fRotationAngle == 0) { - int layerDataSize = fImgLayerSize * fImgLayerSize * ((fImage.getFormat() == GL_BGRA || fImage.getFormat() == GL_RGBA) ? 4 : 3); - imageDataOffset = layerDataSize * int(normValue * float(fImgLayerCount-1)); + DISTRHO_SAFE_ASSERT_RETURN(fImgLayerCount > 0,); + DISTRHO_SAFE_ASSERT_RETURN(normValue >= 0.0f,); + + const uint layerDataSize = fImgLayerSize * fImgLayerSize * ((fImage.getFormat() == GL_BGRA || fImage.getFormat() == GL_RGBA) ? 4 : 3); + /* */ imageDataOffset = layerDataSize * uint(normValue * float(fImgLayerCount-1)); } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, getWidth(), getHeight(), 0, fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, + static_cast<GLsizei>(getWidth()), static_cast<GLsizei>(getHeight()), 0, + fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset); fIsReady = true; } + const int w = static_cast<int>(getWidth()); + const int h = static_cast<int>(getHeight()); + if (fRotationAngle != 0) { glPushMatrix(); - const GLint w2 = getWidth()/2; - const GLint h2 = getHeight()/2; + const int w2 = w/2; + const int h2 = h/2; glTranslatef(static_cast<float>(w2), static_cast<float>(h2), 0.0f); glRotatef(normValue*static_cast<float>(fRotationAngle), 0.0f, 0.0f, 1.0f); - Rectangle<int>(-w2, -h2, getWidth(), getHeight()).draw(); + Rectangle<int>(-w2, -h2, w, h).draw(); glPopMatrix(); } else { - Rectangle<int>(0, 0, getWidth(), getHeight()).draw(); + Rectangle<int>(0, 0, w, h).draw(); } glBindTexture(GL_TEXTURE_2D, 0); @@ -403,7 +393,7 @@ bool ImageKnob::onMotion(const MotionEvent& ev) { fValueTmp = value = fMaximum; } - else if (fStep != 0.0f) + else if (d_isNotZero(fStep)) { fValueTmp = value; const float rest = std::fmod(value, fStep); @@ -437,7 +427,7 @@ bool ImageKnob::onScroll(const ScrollEvent& ev) { fValueTmp = value = fMaximum; } - else if (fStep != 0.0f) + else if (d_isNotZero(fStep)) { fValueTmp = value; const float rest = std::fmod(value, fStep); |