kopia lustrzana https://github.com/jameshball/osci-render
Change design of envelope component
rodzic
3eb8bbae5a
commit
f9b9e09a53
|
@ -54,9 +54,10 @@ OscirenderLookAndFeel::OscirenderLookAndFeel() {
|
||||||
setColour(juce::CodeEditorComponent::highlightColourId, Colours::grey);
|
setColour(juce::CodeEditorComponent::highlightColourId, Colours::grey);
|
||||||
|
|
||||||
// envelope
|
// envelope
|
||||||
setColour(EnvelopeComponent::Node, Colours::accentColor);
|
setColour(EnvelopeComponent::Node, Colours::veryDark);
|
||||||
setColour(EnvelopeComponent::ReleaseNode, Colours::accentColor);
|
setColour(EnvelopeComponent::ReleaseNode, Colours::veryDark);
|
||||||
setColour(EnvelopeComponent::LoopNode, Colours::accentColor);
|
setColour(EnvelopeComponent::LoopNode, Colours::veryDark);
|
||||||
|
setColour(EnvelopeComponent::NodeOutline, juce::Colours::white);
|
||||||
setColour(EnvelopeComponent::Line, juce::Colours::white);
|
setColour(EnvelopeComponent::Line, juce::Colours::white);
|
||||||
setColour(EnvelopeComponent::LoopLine, juce::Colours::white);
|
setColour(EnvelopeComponent::LoopLine, juce::Colours::white);
|
||||||
setColour(EnvelopeComponent::Background, Colours::veryDark);
|
setColour(EnvelopeComponent::Background, Colours::veryDark);
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
UGEN++ can be redistributed and/or modified under the terms of the
|
UGEN++ can be redistributed and/or modified under the terms of the
|
||||||
GNU General Public License, as published by the Free Software Foundation;
|
GNU General Public License, as published by the Free Software Foundation;
|
||||||
either version 2 of the License, or (at your option) any later version.
|
either version 2 of the License, or (at your option) any later version.
|
||||||
|
either version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
UGEN++ is distributed in the hope that it will be useful,
|
UGEN++ is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
@ -88,15 +89,19 @@ void EnvelopeHandleComponentConstrainer::setAdjacentHandleLimits(int setLeftLimi
|
||||||
}
|
}
|
||||||
|
|
||||||
EnvelopeHandleComponent::EnvelopeHandleComponent()
|
EnvelopeHandleComponent::EnvelopeHandleComponent()
|
||||||
: dontUpdateTimeAndValue(false),
|
: dontUpdateTimeAndValue(false),
|
||||||
lastX(-1),
|
lastX(-1),
|
||||||
lastY(-1),
|
lastY(-1),
|
||||||
resizeLimits(this),
|
resizeLimits(this),
|
||||||
shouldLockTime(false),
|
shouldLockTime(false),
|
||||||
shouldLockValue(false),
|
shouldLockValue(false),
|
||||||
ignoreDrag(false)
|
shouldDraw(!shouldLockTime || !shouldLockValue),
|
||||||
|
ignoreDrag(false)
|
||||||
{
|
{
|
||||||
setMouseCursor(juce::MouseCursor::CrosshairCursor);
|
|
||||||
|
if (shouldDraw) {
|
||||||
|
setMouseCursor(juce::MouseCursor::CrosshairCursor);
|
||||||
|
}
|
||||||
resetOffsets();
|
resetOffsets();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,28 +196,32 @@ void EnvelopeHandleComponent::updateLegend()
|
||||||
|
|
||||||
void EnvelopeHandleComponent::paint(juce::Graphics& g)
|
void EnvelopeHandleComponent::paint(juce::Graphics& g)
|
||||||
{
|
{
|
||||||
EnvelopeComponent *env = getParentComponent();
|
if (shouldDraw) {
|
||||||
juce::Colour handleColour;
|
EnvelopeComponent *env = getParentComponent();
|
||||||
|
juce::Colour handleColour;
|
||||||
if(env == 0)
|
|
||||||
{
|
if(env == 0)
|
||||||
handleColour = juce::Colour(0xFF69B4FF);
|
{
|
||||||
|
handleColour = juce::Colour(0xFF69B4FF);
|
||||||
|
}
|
||||||
|
else if(env->isReleaseNode(this))
|
||||||
|
{
|
||||||
|
handleColour = findColour(EnvelopeComponent::ReleaseNode);
|
||||||
|
}
|
||||||
|
else if(env->isLoopNode(this))
|
||||||
|
{
|
||||||
|
handleColour = findColour(EnvelopeComponent::LoopNode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handleColour = findColour(EnvelopeComponent::Node);
|
||||||
|
}
|
||||||
|
|
||||||
|
g.setColour(handleColour);
|
||||||
|
g.fillEllipse(1, 1, getWidth() - 2, getHeight() - 2);
|
||||||
|
g.setColour(findColour(EnvelopeComponent::NodeOutline));
|
||||||
|
g.drawEllipse(1, 1, getWidth() - 2, getHeight() - 2, 1.0f);
|
||||||
}
|
}
|
||||||
else if(env->isReleaseNode(this))
|
|
||||||
{
|
|
||||||
handleColour = findColour(EnvelopeComponent::ReleaseNode);
|
|
||||||
}
|
|
||||||
else if(env->isLoopNode(this))
|
|
||||||
{
|
|
||||||
handleColour = findColour(EnvelopeComponent::LoopNode);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
handleColour = findColour(EnvelopeComponent::Node);
|
|
||||||
}
|
|
||||||
|
|
||||||
g.setColour(handleColour);
|
|
||||||
g.fillRect(1, 1, getWidth()-2, getHeight()-2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::moved()
|
void EnvelopeHandleComponent::moved()
|
||||||
|
@ -236,8 +245,12 @@ void EnvelopeHandleComponent::mouseEnter(const juce::MouseEvent& e)
|
||||||
printf("MyEnvelopeHandleComponent::mouseEnter\n");
|
printf("MyEnvelopeHandleComponent::mouseEnter\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setMouseCursor(juce::MouseCursor::CrosshairCursor);
|
if (shouldDraw) {
|
||||||
updateLegend();
|
setMouseCursor(juce::MouseCursor::CrosshairCursor);
|
||||||
|
updateLegend();
|
||||||
|
} else {
|
||||||
|
setMouseCursor(juce::MouseCursor::NormalCursor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::mouseExit(const juce::MouseEvent& e)
|
void EnvelopeHandleComponent::mouseExit(const juce::MouseEvent& e)
|
||||||
|
@ -256,60 +269,62 @@ void EnvelopeHandleComponent::mouseDown(const juce::MouseEvent& e)
|
||||||
printf("MyEnvelopeHandleComponent::mouseDown (%d, %d)\n", e.x, e.y);
|
printf("MyEnvelopeHandleComponent::mouseDown (%d, %d)\n", e.x, e.y);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setMouseCursor(juce::MouseCursor::NoCursor);
|
if (shouldDraw) {
|
||||||
|
setMouseCursor(juce::MouseCursor::NoCursor);
|
||||||
if(e.mods.isShiftDown()) {
|
|
||||||
|
if(e.mods.isShiftDown()) {
|
||||||
if(!shouldLockTime && !shouldLockValue)
|
|
||||||
{
|
if(!shouldLockTime && !shouldLockValue)
|
||||||
getParentComponent()->setLegendTextToDefault();
|
{
|
||||||
removeThisHandle();
|
getParentComponent()->setLegendTextToDefault();
|
||||||
|
removeThisHandle();
|
||||||
|
}
|
||||||
|
|
||||||
|
return; // dont send drag msg
|
||||||
|
|
||||||
|
}
|
||||||
|
//else if(e.mods.isCtrlDown())
|
||||||
|
//{
|
||||||
|
// if(getParentComponent()->getAllowNodeEditing())
|
||||||
|
// {
|
||||||
|
// ignoreDrag = true;
|
||||||
|
//
|
||||||
|
// if(PopupComponent::getActivePopups() < 1)
|
||||||
|
// {
|
||||||
|
// EnvelopeNodePopup::create(this, getScreenX()+e.x, getScreenY()+e.y);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
offsetX = e.x;
|
||||||
|
offsetY = e.y;
|
||||||
|
|
||||||
|
resizeLimits.setMinimumOnscreenAmounts(HANDLESIZE,HANDLESIZE,HANDLESIZE,HANDLESIZE);
|
||||||
|
|
||||||
|
EnvelopeHandleComponent* previousHandle = getPreviousHandle();
|
||||||
|
EnvelopeHandleComponent* nextHandle = getNextHandle();
|
||||||
|
|
||||||
|
int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX()+2;
|
||||||
|
int rightLimit = nextHandle == 0 ? getParentWidth()-HANDLESIZE : nextHandle->getX()-2;
|
||||||
|
// int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX();
|
||||||
|
// int rightLimit = nextHandle == 0 ? getParentWidth()-HANDLESIZE : nextHandle->getX();
|
||||||
|
|
||||||
|
|
||||||
|
resizeLimits.setAdjacentHandleLimits(leftLimit, rightLimit);
|
||||||
|
|
||||||
|
dragger.startDraggingComponent(this, e);//&resizeLimits);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return; // dont send drag msg
|
|
||||||
|
|
||||||
}
|
|
||||||
//else if(e.mods.isCtrlDown())
|
|
||||||
//{
|
|
||||||
// if(getParentComponent()->getAllowNodeEditing())
|
|
||||||
// {
|
|
||||||
// ignoreDrag = true;
|
|
||||||
//
|
|
||||||
// if(PopupComponent::getActivePopups() < 1)
|
|
||||||
// {
|
|
||||||
// EnvelopeNodePopup::create(this, getScreenX()+e.x, getScreenY()+e.y);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
offsetX = e.x;
|
|
||||||
offsetY = e.y;
|
|
||||||
|
|
||||||
resizeLimits.setMinimumOnscreenAmounts(HANDLESIZE,HANDLESIZE,HANDLESIZE,HANDLESIZE);
|
|
||||||
|
|
||||||
EnvelopeHandleComponent* previousHandle = getPreviousHandle();
|
|
||||||
EnvelopeHandleComponent* nextHandle = getNextHandle();
|
|
||||||
|
|
||||||
int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX()+2;
|
|
||||||
int rightLimit = nextHandle == 0 ? getParentWidth()-HANDLESIZE : nextHandle->getX()-2;
|
|
||||||
// int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX();
|
|
||||||
// int rightLimit = nextHandle == 0 ? getParentWidth()-HANDLESIZE : nextHandle->getX();
|
|
||||||
|
|
||||||
|
getParentComponent()->sendStartDrag();
|
||||||
resizeLimits.setAdjacentHandleLimits(leftLimit, rightLimit);
|
|
||||||
|
|
||||||
dragger.startDraggingComponent(this, e);//&resizeLimits);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getParentComponent()->sendStartDrag();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::mouseDrag(const juce::MouseEvent& e)
|
void EnvelopeHandleComponent::mouseDrag(const juce::MouseEvent& e)
|
||||||
{
|
{
|
||||||
if(ignoreDrag == true) return;
|
if(ignoreDrag || !shouldDraw) return;
|
||||||
|
|
||||||
dragger.dragComponent(this, e, &resizeLimits);
|
dragger.dragComponent(this, e, &resizeLimits);
|
||||||
|
|
||||||
|
@ -350,7 +365,11 @@ void EnvelopeHandleComponent::mouseUp(const juce::MouseEvent& e)
|
||||||
printf("MyEnvelopeHandleComponent::mouseUp\n");
|
printf("MyEnvelopeHandleComponent::mouseUp\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(ignoreDrag == true)
|
if (!shouldDraw) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ignoreDrag)
|
||||||
{
|
{
|
||||||
ignoreDrag = false;
|
ignoreDrag = false;
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -504,22 +523,26 @@ void EnvelopeHandleComponent::lockTime(double timeToLock)
|
||||||
{
|
{
|
||||||
setTime(timeToLock);
|
setTime(timeToLock);
|
||||||
shouldLockTime = true;
|
shouldLockTime = true;
|
||||||
|
recalculateShouldDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::lockValue(double valueToLock)
|
void EnvelopeHandleComponent::lockValue(double valueToLock)
|
||||||
{
|
{
|
||||||
setValue(valueToLock);
|
setValue(valueToLock);
|
||||||
shouldLockValue = true;
|
shouldLockValue = true;
|
||||||
|
recalculateShouldDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::unlockTime()
|
void EnvelopeHandleComponent::unlockTime()
|
||||||
{
|
{
|
||||||
shouldLockTime = false;
|
shouldLockTime = false;
|
||||||
|
recalculateShouldDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::unlockValue()
|
void EnvelopeHandleComponent::unlockValue()
|
||||||
{
|
{
|
||||||
shouldLockValue = false;
|
shouldLockValue = false;
|
||||||
|
recalculateShouldDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnvelopeHandleComponent::recalculatePosition()
|
void EnvelopeHandleComponent::recalculatePosition()
|
||||||
|
@ -532,6 +555,10 @@ void EnvelopeHandleComponent::recalculatePosition()
|
||||||
getParentComponent()->repaint();
|
getParentComponent()->repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnvelopeHandleComponent::recalculateShouldDraw() {
|
||||||
|
shouldDraw = !shouldLockTime || !shouldLockValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EnvelopeComponent::EnvelopeComponent()
|
EnvelopeComponent::EnvelopeComponent()
|
||||||
: minNumHandles(0),
|
: minNumHandles(0),
|
||||||
|
@ -710,7 +737,7 @@ void EnvelopeComponent::paint(juce::Graphics& g)
|
||||||
}
|
}
|
||||||
|
|
||||||
g.setColour(findColour(Line));
|
g.setColour(findColour(Line));
|
||||||
g.strokePath (path, juce::PathStrokeType(1.0f));
|
g.strokePath (path, juce::PathStrokeType(2.0f));
|
||||||
|
|
||||||
if((loopNode >= 0) && (releaseNode >= 0) && (releaseNode > loopNode))
|
if((loopNode >= 0) && (releaseNode >= 0) && (releaseNode > loopNode))
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "EnvCurve.h"
|
#include "EnvCurve.h"
|
||||||
|
|
||||||
|
|
||||||
#define HANDLESIZE 7
|
#define HANDLESIZE 11
|
||||||
#define FINETUNE 0.001
|
#define FINETUNE 0.001
|
||||||
|
|
||||||
//#define MYDEBUG 1 // get rid of this later
|
//#define MYDEBUG 1 // get rid of this later
|
||||||
|
@ -121,6 +121,7 @@ public:
|
||||||
private:
|
private:
|
||||||
bool dontUpdateTimeAndValue;
|
bool dontUpdateTimeAndValue;
|
||||||
void recalculatePosition();
|
void recalculatePosition();
|
||||||
|
void recalculateShouldDraw();
|
||||||
|
|
||||||
juce::ComponentDragger dragger;
|
juce::ComponentDragger dragger;
|
||||||
int lastX, lastY;
|
int lastX, lastY;
|
||||||
|
@ -128,7 +129,7 @@ private:
|
||||||
EnvelopeHandleComponentConstrainer resizeLimits;
|
EnvelopeHandleComponentConstrainer resizeLimits;
|
||||||
|
|
||||||
double time, value;
|
double time, value;
|
||||||
bool shouldLockTime, shouldLockValue;
|
bool shouldLockTime, shouldLockValue, shouldDraw;
|
||||||
EnvCurve curve;
|
EnvCurve curve;
|
||||||
bool ignoreDrag;
|
bool ignoreDrag;
|
||||||
};
|
};
|
||||||
|
@ -241,13 +242,14 @@ public:
|
||||||
Node = COLOUR_OFFSET,
|
Node = COLOUR_OFFSET,
|
||||||
ReleaseNode = COLOUR_OFFSET + 1,
|
ReleaseNode = COLOUR_OFFSET + 1,
|
||||||
LoopNode = COLOUR_OFFSET + 2,
|
LoopNode = COLOUR_OFFSET + 2,
|
||||||
Line = COLOUR_OFFSET + 3,
|
NodeOutline = COLOUR_OFFSET + 3,
|
||||||
LoopLine = COLOUR_OFFSET + 4,
|
Line = COLOUR_OFFSET + 4,
|
||||||
Background = COLOUR_OFFSET + 5,
|
LoopLine = COLOUR_OFFSET + 5,
|
||||||
GridLine = COLOUR_OFFSET + 6,
|
Background = COLOUR_OFFSET + 6,
|
||||||
LegendText = COLOUR_OFFSET + 7,
|
GridLine = COLOUR_OFFSET + 7,
|
||||||
LegendBackground = COLOUR_OFFSET + 8,
|
LegendText = COLOUR_OFFSET + 8,
|
||||||
NumEnvColours = 9,
|
LegendBackground = COLOUR_OFFSET + 9,
|
||||||
|
NumEnvColours = 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MoveMode { MoveClip, MoveSlide, NumMoveModes };
|
enum MoveMode { MoveClip, MoveSlide, NumMoveModes };
|
||||||
|
|
Ładowanie…
Reference in New Issue