void MidiKeyboardComponent::timerCallback() { if (shouldCheckState) { shouldCheckState = false; for (int i = rangeStart; i <= rangeEnd; ++i) { if (keysCurrentlyDrawnDown[i] != state.isNoteOnForChannels (midiInChannelMask, i)) { keysCurrentlyDrawnDown.setBit (i, state.isNoteOnForChannels (midiInChannelMask, i)); repaintNote (i); } } } if (shouldCheckMousePos) { Desktop& desktop = Desktop::getInstance(); for (int i = desktop.getNumMouseSources(); --i >= 0;) { MouseInputSource* source = desktop.getMouseSource (i); jassert (source != nullptr); updateNoteUnderMouse (getLocalPoint (nullptr, source->getScreenPosition()), source->isDragging(), source->getIndex()); } } }
void TooltipWindow::timerCallback() { Desktop& desktop = Desktop::getInstance(); const MouseInputSource mouseSource (desktop.getMainMouseSource()); const unsigned int now = Time::getApproximateMillisecondCounter(); Component* const newComp = mouseSource.isMouse() ? mouseSource.getComponentUnderMouse() : nullptr; const String newTip (getTipFor (newComp)); const bool tipChanged = (newTip != lastTipUnderMouse || newComp != lastComponentUnderMouse); lastComponentUnderMouse = newComp; lastTipUnderMouse = newTip; const int clickCount = desktop.getMouseButtonClickCounter(); const int wheelCount = desktop.getMouseWheelMoveCounter(); const bool mouseWasClicked = (clickCount > mouseClicks || wheelCount > mouseWheelMoves); mouseClicks = clickCount; mouseWheelMoves = wheelCount; const Point<float> mousePos (mouseSource.getScreenPosition()); const bool mouseMovedQuickly = mousePos.getDistanceFrom (lastMousePos) > 12; lastMousePos = mousePos; if (tipChanged || mouseWasClicked || mouseMovedQuickly) lastCompChangeTime = now; if (isVisible() || now < lastHideTime + 500) { // if a tip is currently visible (or has just disappeared), update to a new one // immediately if needed.. if (newComp == nullptr || mouseWasClicked || newTip.isEmpty()) { if (isVisible()) { lastHideTime = now; hideTip(); } } else if (tipChanged) { displayTip (mousePos.roundToInt(), newTip); } } else { // if there isn't currently a tip, but one is needed, only let it // appear after a timeout.. if (newTip.isNotEmpty() && newTip != tipShowing && now > lastCompChangeTime + (unsigned int) millisecondsBeforeTipAppears) { displayTip (mousePos.roundToInt(), newTip); } } }