* @param e
* Mouse event.
*/
private void setValueFrom(MouseEvent e) {
boolean active = SubstanceScrollBarUI.this.isThumbRollover();
BoundedRangeModel model = SubstanceScrollBarUI.this.scrollbar
.getModel();
Rectangle thumbR = SubstanceScrollBarUI.this.getThumbBounds();
int thumbMin = 0, thumbMax = 0, thumbPos;
ScrollPaneButtonPolicyKind buttonPolicy = SubstanceCoreUtilities
.getScrollPaneButtonsPolicyKind(SubstanceScrollBarUI.this.scrollbar);
if (SubstanceScrollBarUI.this.scrollbar.getOrientation() == JScrollBar.VERTICAL) {
switch (buttonPolicy) {
case OPPOSITE:
thumbMin = SubstanceScrollBarUI.this.decrButton.getY()
+ SubstanceScrollBarUI.this.decrButton.getHeight();
thumbMax = SubstanceScrollBarUI.this.incrButton.getY()
- thumbR.height;
break;
case ADJACENT:
thumbMin = 0;
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getY()
- thumbR.height;
break;
case NONE:
thumbMin = 0;
thumbMax = SubstanceScrollBarUI.this.scrollbar.getSize().height
- SubstanceScrollBarUI.this.scrollbar.getInsets().bottom
- thumbR.height;
break;
case MULTIPLE:
thumbMin = SubstanceScrollBarUI.this.decrButton.getY()
+ SubstanceScrollBarUI.this.decrButton.getHeight();
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getY()
- thumbR.height;
break;
case MULTIPLE_BOTH:
thumbMin = SubstanceScrollBarUI.this.mySecondIncreaseButton
.getY()
+ SubstanceScrollBarUI.this.mySecondIncreaseButton
.getHeight();
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getY()
- thumbR.height;
break;
}
thumbPos = Math.min(thumbMax, Math.max(thumbMin,
(e.getY() - this.offset)));
SubstanceScrollBarUI.this.setThumbBounds(thumbR.x, thumbPos,
thumbR.width, thumbR.height);
} else {
if (SubstanceScrollBarUI.this.scrollbar
.getComponentOrientation().isLeftToRight()) {
switch (buttonPolicy) {
case OPPOSITE:
thumbMin = SubstanceScrollBarUI.this.decrButton.getX()
+ SubstanceScrollBarUI.this.decrButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.incrButton.getX()
- thumbR.width;
break;
case ADJACENT:
thumbMin = 0;
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
- thumbR.width;
break;
case MULTIPLE:
thumbMin = SubstanceScrollBarUI.this.decrButton.getX()
+ SubstanceScrollBarUI.this.decrButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
- thumbR.width;
break;
case MULTIPLE_BOTH:
thumbMin = SubstanceScrollBarUI.this.mySecondIncreaseButton
.getX()
+ SubstanceScrollBarUI.this.mySecondIncreaseButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
- thumbR.width;
break;
case NONE:
thumbMin = 0;
thumbMax = SubstanceScrollBarUI.this.scrollbar
.getSize().width
- SubstanceScrollBarUI.this.scrollbar
.getInsets().right - thumbR.width;
break;
}
} else {
switch (buttonPolicy) {
case OPPOSITE:
thumbMin = SubstanceScrollBarUI.this.incrButton.getX()
+ SubstanceScrollBarUI.this.incrButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.decrButton.getX()
- thumbR.width;
break;
case ADJACENT:
thumbMin = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
+ SubstanceScrollBarUI.this.mySecondDecreaseButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.scrollbar
.getSize().width
- SubstanceScrollBarUI.this.scrollbar
.getInsets().right - thumbR.width;
break;
case MULTIPLE:
thumbMin = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
+ SubstanceScrollBarUI.this.mySecondDecreaseButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.decrButton.getX()
- thumbR.width;
break;
case MULTIPLE_BOTH:
thumbMin = SubstanceScrollBarUI.this.mySecondDecreaseButton
.getX()
+ SubstanceScrollBarUI.this.mySecondDecreaseButton
.getWidth();
thumbMax = SubstanceScrollBarUI.this.mySecondIncreaseButton
.getX()
- thumbR.width;
break;
case NONE:
thumbMin = 0;
thumbMax = SubstanceScrollBarUI.this.scrollbar
.getSize().width
- SubstanceScrollBarUI.this.scrollbar
.getInsets().right - thumbR.width;
break;
}
}
// System.out.println(thumbMin + " : " + thumbMax + " : "
// + (e.getX() - offset));
thumbPos = Math.min(thumbMax, Math.max(thumbMin,
(e.getX() - this.offset)));
SubstanceScrollBarUI.this.setThumbBounds(thumbPos, thumbR.y,
thumbR.width, thumbR.height);
}
/*
* Set the scrollbars value. If the thumb has reached the end of the
* scrollbar, then just set the value to its maximum. Otherwise
* compute the value as accurately as possible.
*/
if (thumbPos == thumbMax) {
if (SubstanceScrollBarUI.this.scrollbar.getOrientation() == JScrollBar.VERTICAL
|| SubstanceScrollBarUI.this.scrollbar
.getComponentOrientation().isLeftToRight()) {
SubstanceScrollBarUI.this.scrollbar.setValue(model
.getMaximum()
- model.getExtent());
} else {
SubstanceScrollBarUI.this.scrollbar.setValue(model
.getMinimum());
}
} else {
float valueMax = model.getMaximum() - model.getExtent();
float valueRange = valueMax - model.getMinimum();
float thumbValue = thumbPos - thumbMin;
float thumbRange = thumbMax - thumbMin;
int value;
if (SubstanceScrollBarUI.this.scrollbar.getOrientation() == JScrollBar.VERTICAL
|| SubstanceScrollBarUI.this.scrollbar
.getComponentOrientation().isLeftToRight()) {
value = (int) (0.5 + ((thumbValue / thumbRange) * valueRange));
} else {
value = (int) (0.5 + (((thumbMax - thumbPos) / thumbRange) * valueRange));
}
SubstanceScrollBarUI.this.scrollbar.setValue(value
+ model.getMinimum());
}
SubstanceScrollBarUI.this.setThumbRollover(active);
}