//------------------------------------------------------------------------ void MultiKick::mouse (CDrawContext *pContext, CPoint &where) { if (!bMouseEnabled) { buttondown = 0; return; } long button = pContext->getMouseButtons (); if (!(button & kLButton)) { buttondown = 0; return; } /* save old value in case the mouse is dragged off while the button is still held down. */ int entrystate = actualstate; if (pContext->getMouseButtons ()) { // begin of edit parameter getParent ()->beginEdit (tag); do { if (where.h >= size.left && where.v >= size.top && where.h <= size.right && where.v <= size.bottom) { actualstate = entrystate + 1; actualstate %= numstates; buttondown = 1 /* 1 */; } else { actualstate = entrystate; buttondown = 0; } if (isDirty ()) { listener->valueChanged (pContext, this); } pContext->getMouseLocation (where); doIdleStuff (); draw(pContext); } while (pContext->getMouseButtons ()); setDirty(true); // end of edit parameter getParent ()->endEdit (tag); } else { actualstate ++; actualstate %= numstates; } draw(pContext); buttondown = 0; listener->valueChanged (pContext, this); }
//------------------------------------------------------------------------ void CMultiStateButton::mouse (CDrawContext *pContext, CPoint &where) { if (!bMouseEnabled) return; long button = pContext->getMouseButtons (); if (!(button & kLButton)) return; value = (float)(value + 1.0 / (double)(nStates)); if(value >= 1.0) value = 0.0; //draw (pContext); doIdleStuff (); if (listener) listener->valueChanged (pContext, this); }
//------------------------------------------------------------------------ void cSyncButton::mouse (CDrawContext *pContext, CPoint &where, long button) { if (!bMouseEnabled) return; if (button == -1) button = pContext->getMouseButtons (); if (!(button & kLButton)) return; if (listener && button & (kAlt | kShift | kControl | kApple)) { if (listener->controlModifierClicked (pContext, this, button) != 0) return; } if (button & (kAlt | kShift)) { value = floor(value * statesCount - 1.0f) / (float)statesCount; if (value < 0.0f) value = (float)(statesCount-1) / (float)statesCount ; } else { value = floor(value * statesCount + 1.0f) / (float)statesCount; if (value >= 1.0f) value = 0.f; } if (listener && style == kPostListenerUpdate) { beginEdit (); listener->valueChanged (pContext, this); endEdit (); } doIdleStuff (); if (listener && style == kPreListenerUpdate) { beginEdit (); listener->valueChanged (pContext, this); endEdit (); } }