int Slider::valueToMarkerPosition(double value) const { int v; if (getOrientation() == HORIZONTAL) { v = getWidth(); } else { v = getHeight(); } int w = (int)((v - getMarkerLength()) * (value - getScaleStart()) / (getScaleEnd() - getScaleStart())); if (w < 0) { return 0; } if (w > v - getMarkerLength()) { return v - getMarkerLength(); } return w; }
void Slider::mouseDragged(MouseEvent& mouseEvent) { if (getOrientation() == HORIZONTAL) { setValue(markerPositionToValue(mouseEvent.getX() - getMarkerLength() / 2)); } else { setValue(markerPositionToValue(getHeight() - mouseEvent.getY() - getMarkerLength() / 2)); } distributeActionEvent(); mouseEvent.consume(); }
void Slider::mouseMotion(int x, int y) { if (mMouseDrag) { if (getOrientation() == HORIZONTAL) { setValue(markerPositionToValue(x - getMarkerLength() / 2)); } else { setValue(markerPositionToValue(getHeight() - y - getMarkerLength() / 2)); } generateAction(); setDirty(true); } }
void Slider::mousePressed(MouseEvent& mouseEvent) { if (mouseEvent.getButton() == gcn::MouseEvent::LEFT && mouseEvent.getX() >= 0 && mouseEvent.getX() <= getWidth() && mouseEvent.getY() >= 0 && mouseEvent.getY() <= getHeight()) { if (getOrientation() == HORIZONTAL) { setValue(markerPositionToValue(mouseEvent.getX() - getMarkerLength() / 2)); } else { setValue(markerPositionToValue(getHeight() - mouseEvent.getY() - getMarkerLength() / 2)); } distributeActionEvent(); } }
void Slider::mousePress(int x, int y, int button) { if (button == gcn::MouseInput::LEFT && x >= 0 && x <= getWidth() && y >= 0 && y <= getHeight()) { if (getOrientation() == HORIZONTAL) { setValue(markerPositionToValue(x - getMarkerLength() / 2)); } else { setValue(markerPositionToValue(getHeight() - y - getMarkerLength() / 2)); } mMouseDrag = true; generateAction(); } else { mMouseDrag = false; } }
double Slider::markerPositionToValue(int v) const { int w; if (getOrientation() == HORIZONTAL) { w = getWidth(); } else { w = getHeight(); } double pos = v / ((double)w - getMarkerLength()); return (1.0 - pos) * getScaleStart() + pos * getScaleEnd(); }
void Slider::drawMarker(gcn::Graphics* graphics) { gcn::Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int alpha = getBaseColor().a; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; graphics->setColor(faceColor); if (getOrientation() == HORIZONTAL) { int v = getMarkerPosition(); graphics->fillRectangle(gcn::Rectangle(v + 1, 1, getMarkerLength() - 2, getHeight() - 2)); graphics->setColor(highlightColor); graphics->drawLine(v, 0, v + getMarkerLength() - 1,0); graphics->drawLine(v, 0, v, getHeight() - 1); graphics->setColor(shadowColor); graphics->drawLine(v + getMarkerLength() - 1, 1, v + getMarkerLength() - 1, getHeight() - 1); graphics->drawLine(v + 1, getHeight() - 1, v + getMarkerLength() - 1, getHeight() - 1); if (isFocused()) { graphics->setColor(getForegroundColor()); graphics->drawRectangle(Rectangle(v + 2, 2, getMarkerLength() - 4, getHeight() - 4)); } } else { int v = (getHeight() - getMarkerLength()) - getMarkerPosition(); graphics->fillRectangle(gcn::Rectangle(1, v + 1, getWidth() - 2, getMarkerLength() - 2)); graphics->setColor(highlightColor); graphics->drawLine(0, v, 0, v + getMarkerLength() - 1); graphics->drawLine(0, v, getWidth() - 1, v); graphics->setColor(shadowColor); graphics->drawLine(1, v + getMarkerLength() - 1, getWidth() - 1, v + getMarkerLength() - 1); graphics->drawLine(getWidth() - 1, v + 1, getWidth() - 1, v + getMarkerLength() - 1); if (isFocused()) { graphics->setColor(getForegroundColor()); graphics->drawRectangle(Rectangle(2, v + 2, getWidth() - 4, getMarkerLength() - 4)); } } }