5d736e72cc
Preliminary Themes XML fixing knob sizes and alignments. Fixed Preset Bar drop down menu screen misplacement. Fixed screen flickr on preset change on Windows OS. Updated themes folder error dialog and window size. Fixed Menu > Manual not loading or found.
138 lines
3.5 KiB
C++
138 lines
3.5 KiB
C++
/*
|
|
==============================================================================
|
|
|
|
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();
|
|
String resourceName = imageName + "_png";
|
|
if (scaleFactorInt != 1){
|
|
resourceName = imageName + String::formatted("%dx_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);
|
|
DBG(" Image: " << resourceName);
|
|
return ImageCache::getFromMemory(data, size);
|
|
}
|
|
}
|
|
|
|
void ScalableComponent::scaleFactorChanged()
|
|
{
|
|
}
|