2
0
Fork 0
OB-Xd/Source/Components/ScaleComponent.cpp
George Reales 5d736e72cc Fixes
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.
2021-09-04 22:16:50 +02:00

139 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()
{
}