void CabbageEnvelopeHandleComponent::mouseDrag (const MouseEvent& e) { CabbageEnvelopeHandleComponent* previousHandle = getPreviousHandle(); CabbageEnvelopeHandleComponent* nextHandle = getNextHandle(); bool fixed = this->getProperties().getWithDefault("fixedPos", false); int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX()+1; int rightLimit = nextHandle == 0 ? getParentWidth()-previousHandle->getHeight() : nextHandle->getX()-1; int topLimit = previousHandle == 0 ? 0 : previousHandle->getX()+1; int bottomLimit = nextHandle == 0 ? getParentWidth()-previousHandle->getHeight() : nextHandle->getX()-1; int dragX = x+e.getDistanceFromDragStartX(); int dragY = y+e.getDistanceFromDragStartY(); //dragger.dragComponent(this, e, &resizeLimits); if(dragX < leftLimit) dragX = leftLimit; if(dragX > rightLimit) dragX = rightLimit; if(dragY< 0) dragY = 0; if(dragY > height-5) dragY = height-5; if(fixed) dragX = x; this->setTopLeftPosition(dragX, dragY); getParentComponent()->repaint(); }
void EnvelopeHandleComponent::mouseDown(const MouseEvent& e) { #ifdef MYDEBUG printf("MyEnvelopeHandleComponent::mouseDown (%d, %d)\n", e.x, e.y); #endif setMouseCursor(MouseCursor::NoCursor); if(e.mods.isShiftDown()) { if(!shouldLockTime && !shouldLockValue) { 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); } getParentComponent()->sendStartDrag(); }
double EnvelopeHandleComponent::constrainDomain(double domainToConstrain) const { EnvelopeHandleComponent* previousHandle = getPreviousHandle(); EnvelopeHandleComponent* nextHandle = getNextHandle(); int leftLimit = previousHandle == 0 ? 0 : previousHandle->getX(); int rightLimit = nextHandle == 0 ? getParentWidth()-HANDLESIZE : nextHandle->getX(); double left = getParentComponent()->convertPixelsToDomain(leftLimit); double right = getParentComponent()->convertPixelsToDomain(rightLimit); if(previousHandle != 0) left += FINETUNE; if(nextHandle != 0) right -= FINETUNE; return jlimit(left, right, shouldLockTime ? time : domainToConstrain); }