Change design of envelope component

pull/170/head
James Ball 2023-12-18 15:06:34 +00:00
rodzic 3eb8bbae5a
commit f9b9e09a53
3 zmienionych plików z 122 dodań i 92 usunięć

Wyświetl plik

@ -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);

Wyświetl plik

@ -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))
{ {

Wyświetl plik

@ -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 };