int height = Math.max(convert(myTrackBounds.height, extent, range), 2 * getThickness()); if (myTrackBounds.height <= height) { myThumbBounds.setBounds(0, 0, 0, 0); value = getValue(); int maxY = myTrackBounds.y + myTrackBounds.height - height; int y = (value < max - extent) ? convert(myTrackBounds.height - height, value - min, range - extent) : maxY; myThumbBounds.setBounds(myTrackBounds.x, adjust(y, myTrackBounds.y, maxY), myTrackBounds.width, height); if (myOldValue != value) onThumbMove(); int width = Math.max(convert(myTrackBounds.width, extent, range), 2 * getThickness()); if (myTrackBounds.width <= width) { myThumbBounds.setBounds(0, 0, 0, 0); value = getValue(); int maxX = myTrackBounds.x + myTrackBounds.width - width; int x = (value < max - extent) ? convert(myTrackBounds.width - width, value - min, range - extent) : maxX; if (!myScrollBar.getComponentOrientation().isLeftToRight()) x = myTrackBounds.x - x + maxX; myThumbBounds.setBounds(adjust(x, myTrackBounds.x, maxX), myTrackBounds.y, width, myTrackBounds.height); if (myOldValue != value) onThumbMove();
void paint(RegionPainter<Float> p, Graphics2D g, int x, int y, int width, int height, JComponent c, float value, boolean small) { if (!c.isOpaque()) { Alignment alignment = Alignment.get(c); if (alignment == Alignment.LEFT || alignment == Alignment.RIGHT) { int offset = getTrackOffset(width - getMinimalThickness()); if (offset > 0) { width -= offset; if (alignment == Alignment.RIGHT) x += offset; } } else { int offset = getTrackOffset(height - getMinimalThickness()); if (offset > 0) { height -= offset; if (alignment == Alignment.BOTTOM) y += offset; } } } else if (small) { x += 1; y += 1; width -= 2; height -= 2; } p.paint(g, x, y, width, height, value); }
if (parent instanceof JScrollPane) { Color foreground = c.getForeground(); if (foreground != null && !foreground.equals(background) && isBorderNeeded(c)) { g.setColor(foreground); switch (alignment) { paintTrack((Graphics2D)g, bounds.x, bounds.y, bounds.width, bounds.height, c); updateThumbBounds(); paintThumb((Graphics2D)g, myThumbBounds.x, myThumbBounds.y, myThumbBounds.width, myThumbBounds.height, c);
if (isThumbContains(myMouseX, myMouseY)) { else if (isTrackContains(myMouseX, myMouseY)) { if (isAbsolutePositioning(event)) { myOffset = (vertical ? myThumbBounds.height : myThumbBounds.width) / 2; isDragging = true;
@Override public Dimension getPreferredSize(JComponent c) { int thickness = getThickness(); Alignment alignment = Alignment.get(c); return alignment == Alignment.LEFT || alignment == Alignment.RIGHT ? new Dimension(thickness, thickness * 2) : new Dimension(thickness * 2, thickness); }
@Override public void installUI(JComponent c) { super.installUI(c); updateStyle(Style.CURRENT.get()); processReferences(this, null, null); AWTEventListener listener = MOVEMENT_LISTENER.getAndSet(null); // add only one movement listener if (listener != null) Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.MOUSE_MOTION_EVENT_MASK); }
/** * Returns a new instance of {@link ScrollBarUI}. * Do not share it between different scroll bars. * * @param c a target component for this UI * @return a new instance of {@link ScrollBarUI} */ @SuppressWarnings("UnusedParameters") public static ScrollBarUI createUI(JComponent c) { if (Registry.is("ide.scroll.new.layout")) { if (!SystemInfo.isMac) return new DefaultScrollBarUI(); if (Registry.is("mac.scroll.new.ui")) return new MacScrollBarUI(); } return ButtonlessScrollBarUI.createNormal(); } }