void SFMLColorPalette::updateColorMagnify()
{
	sf::Vector2f localMouseFloat(getLocalPoint(sf::Mouse::getPosition(m_window)));
	sf::Vector2i localMouse(getLocalPoint(sf::Mouse::getPosition(m_window)));
	if(!getLocalBounds().contains(localMouseFloat)) //SFML BUG: SOMETIMES MOUSE IS NOT IN BOUNDS
		return;
	m_colorMagnify.setPosition(localMouseFloat.x - m_colorMagnify.getLocalBounds().width - 5.0f, 
		localMouseFloat.y - m_colorMagnify.getLocalBounds().height - 5.0f);
	m_colorMagnify.setFillColor(m_colorImage->getPixel(localMouse.x, localMouse.y) * 
		sf::Color(static_cast<sf::Uint8>(m_brightness*255),static_cast<sf::Uint8>(m_brightness*255),static_cast<sf::Uint8>(m_brightness*255), 255));
}
void MidiKeyboardComponent::timerCallback()
{
    if (shouldCheckState)
    {
        shouldCheckState = false;

        for (int i = rangeStart; i <= rangeEnd; ++i)
        {
            bool isOn = state.isNoteOnForChannels (midiInChannelMask, i);

            if (keysCurrentlyDrawnDown[i] != isOn)
            {
                keysCurrentlyDrawnDown.setBit (i, isOn);
                repaintNote (i);
            }
        }
    }

    if (shouldCheckMousePos)
    {
        for (auto& ms : Desktop::getInstance().getMouseSources())
            if (ms.getComponentUnderMouse() == this || isParentOf (ms.getComponentUnderMouse()))
                updateNoteUnderMouse (getLocalPoint (nullptr, ms.getScreenPosition()), ms.isDragging(), ms.getIndex());
    }
}
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 CommandHistoryWindow::moveIndexToMouse()
{
	sf::Vector2f localMouseFloat(getLocalPoint(sf::Mouse::getPosition(m_window)));
	if(!getLocalBounds().contains(localMouseFloat)) //SFML BUG: SOMETIMES MOUSE IS NOT IN BOUNDS
		return;
	int clickedIndex = static_cast<int>(localMouseFloat.y / m_entrySize.y);
	moveIndex(clickedIndex - std::distance(m_commandList.begin(), m_iterator));
}
void SFMLColorPalette::selectColorAtMouse()
{
	sf::Vector2i localMouse(getLocalPoint(sf::Mouse::getPosition(m_window)));
	m_selectedColor = m_colorImage->getPixel(localMouse.x, localMouse.y);
	m_brightnessQuad[0].color = m_selectedColor;
	m_brightnessQuad[1].color = m_selectedColor;

}
void SFMLColorPalette::selectBrightnessAtMouse()
{
	sf::Vector2i localMouse(getLocalPoint(sf::Mouse::getPosition(m_window)));
	m_brightness = 1 - localMouse.y/m_brightnessRect.getLocalBounds().height;
	
	m_brightnessSlider.setPosition(m_brightnessRect.getGlobalBounds().left + m_brightnessRect.getOutlineThickness(),
		static_cast<float>(localMouse.y));
	m_brightnessSlider.setFillColor(sf::Color(static_cast<sf::Uint8>((1.0f-m_brightness)*255),
		static_cast<sf::Uint8>((1.0f-m_brightness)*255),static_cast<sf::Uint8>((1.0f-m_brightness)*255), 255));
}