void interface_clickHeld(int x, int y)
{
	slider_t *slider;

	if (!_curObject || _curObject->gen_component.type != COMP_SLIDER)
	{
		return;
	}

	slider = _curObject->gen_component.object.slider;
	slider->percentage = (x - _curObject->position.screenPos.x) / (float) _curObject->position.screenPos.w;

	if (slider->percentage < 0)
		slider->percentage = 0;
	if (slider->percentage > 1)
		slider->percentage = 1;

	updateSliderValue(slider);
}
void MainEditorWindow::updateAllSliderValues()
{
    updateSliderValue (delaySlider);
}
bool interface_clickDown(int x, int y)
{ // Returns true if the event was intercepted by the interface, false otherwise
	uint i;

	if (renameString)
	{ // Cancel it FIXME: Don't do that if we clicked on the object?
		if (_curObject->gen_component.type == COMP_TEXTFIELD)
		{
			textField_t *field = _curObject->gen_component.object.textField;
			_dropFocus();
			if (field->onDeselected) field->onDeselected(true);
		}
		else
		{
			_dropFocus();
		}
		return true;
	}
	
	// Check for interactions with components (in opposite order compared to render)
	i = _interface.nbComponents;
	while (i > 0)
	{
		component_t *object = _interface.allComponents[--i];
		staticPlacement_t *objectPos = &object->position.screenPos;
		int left = objectPos->x;
		int right = objectPos->x + objectPos->w;
		int top = objectPos->y;
		int bottom = objectPos->y + objectPos->h;

		if (isInRange(left, x, right) && isInRange(top, y, bottom))
		{
			switch (object->gen_component.type)
			{
			case COMP_BUTTON:
				{
					button_t *button = object->gen_component.object.button;
					if (button->onClick)
					{
						button->onClick();
						return true;
					}
				}
				break;
			case COMP_TEXTFIELD:
				{
					textField_t *field = object->gen_component.object.textField;
					if (field->editable)
					{
						_curObject = object;
						renameString = &field->text;
						field->selected = true;
						if (field->onSelected) field->onSelected();
						return true;
					}
				}
				break;
			case COMP_LIST:
				{
					list_t *list = object->gen_component.object.list;
					if (y < top+20)
					{
						if (list->startIndex > 0)
							list->startIndex--;
					}
					else if (y > bottom-20)
					{
						if (list->startIndex+list->maxDisplayedEntries < list->nbEntries)
							list->startIndex++;
					}
					else
					{
						listSelect(list, list->startIndex+(y-top-20)/15);
					}
					return true;
				}
				break;
			case COMP_SLIDER:
				{
					slider_t *slider = object->gen_component.object.slider;
					slider->percentage = (x - objectPos->x) / (float)objectPos->w;
					updateSliderValue(slider);
					_curObject = object;
					return true;
				}
				break;
			case COMP_CHECKBOX:
				{
					checkBox_t *checkBox = object->gen_component.object.checkBox;
					checkBox->value = !checkBox->value;
					if (checkBox->dynValue)
					{
						*checkBox->dynValue = checkBox->value;
					}
					return true;
				}
				break;
			case COMP_RADIOBUTTON:
				{
					radioButton_t *rButton = object->gen_component.object.radioButton;
					if (!rButton->value)
					{
						_unselectRadioGroup(rButton->group);
						rButton->value = true;
						if (rButton->dynValue) *rButton->dynValue = true;
						rButton->group->onSelectionChanged(object->id);
					}
					return true;
				}
				break;
			default:
				break;
			}
		}
	}

	return false;
}