/* ============================================================================== ScaleComponent.cpp Created: 27 Aug 2021 1:26:08pm Author: discoDSP ============================================================================== */ #include "../PluginProcessor.h" #include "ScaleComponent.h" //============================================================================== ScalableComponent::ScalableComponent(ObxdAudioProcessor* owner_) : scaleFactor(0.0f), isHighResolutionDisplay(false), processor(owner_) { setScaleFactor(1.0f, false); } ScalableComponent::~ScalableComponent() { } void ScalableComponent::setScaleFactor(float newScaleFactor, bool newIsHighResolutionDisplay) { // until we get a freely scalable editor !!! jassert(newScaleFactor == 1.0f || newScaleFactor == 1.5f || newScaleFactor == 2.0f); if (scaleFactor != newScaleFactor || isHighResolutionDisplay != newIsHighResolutionDisplay) { scaleFactor = newScaleFactor; isHighResolutionDisplay = newIsHighResolutionDisplay; scaleFactorChanged(); } } float ScalableComponent::getScaleImage(){ float scale = 1.0; if (!isHighResolutionDisplay) { if (getScaleFactor() == 1.5f) { scale= 0.75f; } else if (getScaleFactor() == 2.0f) { scale= 0.5f; } } else { if (getScaleFactor() == 1.0f) //2x image { scale= 0.5f; } else if (getScaleFactor() == 1.5f) //4x images =>150% { scale= (0.25f + 0.125f); } else if (getScaleFactor() == 2.0f) //4x images =>200x { scale= 0.5f; } } return scale; }; float ScalableComponent::getScaleFactor() const { return scaleFactor; } bool ScalableComponent::getIsHighResolutionDisplay() const { return isHighResolutionDisplay; } int ScalableComponent::getScaleInt(){ int scaleFactorInt = 1; if (scaleFactor == 1.5f) scaleFactorInt = 2; if (scaleFactor == 2.0f) scaleFactorInt = 4; if (isHighResolutionDisplay){ scaleFactorInt *= 2; } if (scaleFactorInt> 4){ scaleFactorInt=4; } return scaleFactorInt; } Image ScalableComponent::getScaledImageFromCache(const String& imageName, float scaleFactor, bool isHighResolutionDisplay) { jassert(scaleFactor == 1.0f || scaleFactor == 1.5f || scaleFactor == 2.0f); this->isHighResolutionDisplay = isHighResolutionDisplay; int scaleFactorInt = getScaleInt(); const String resourceName = imageName + String::formatted("_png", scaleFactorInt); int size = 0; File skin; if (processor){ File f(processor->getCurrentSkinFolder()); if (f.isDirectory()){ skin=f; } } const char* data = nullptr; String image_file = imageName; if (scaleFactorInt ==1) image_file += ".png"; else image_file += String::formatted("@%dx.png", scaleFactorInt); DBG(" Loaf image: " << image_file); File file = skin.getChildFile(image_file); if (file.exists()){ return ImageCache::getFromFile(file); } else { data = BinaryData::getNamedResource((const char*)resourceName.toUTF8(), size); return ImageCache::getFromMemory(data, size); } } void ScalableComponent::scaleFactorChanged() { }