com.jidesoft.swing.CornerScroller Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* Copyright (c) 2007 Davide Raccagni. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Davide Raccagni nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jidesoft.swing;
import javax.swing.*;
import javax.swing.plaf.UIResource;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.GeneralPath;
import java.io.Serializable;
/*
* @author Davide Raccagni
* @author JIDE Software
*/
@SuppressWarnings("serial")
public class CornerScroller extends JideButton {
protected ScrollPaneOverview _scrollPaneBidule;
public CornerScroller(JScrollPane scrollPane) {
_scrollPaneBidule = createScrollPaneOverview(scrollPane);
setFocusPainted(false);
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
_scrollPaneBidule.display();
}
});
setBorderPainted(false);
setIcon(new ScrollerIcon());
setPreferredSize(new Dimension(16, 16));
}
/**
* Create the overview popup window.
*
* @param scrollPane the scroll pane to display
* @return the overview popup window.
*/
protected ScrollPaneOverview createScrollPaneOverview(JScrollPane scrollPane) {
return new ScrollPaneOverview(scrollPane, this);
}
public void setSelectionBorderColor(Color selectionBorder) {
if (_scrollPaneBidule != null) {
_scrollPaneBidule.setSelectionBorderColor(selectionBorder);
}
}
private static class ScrollerIcon implements Icon, UIResource, Serializable {
public int getIconHeight() {
return 16;
}
public int getIconWidth() {
return 16;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2d = (Graphics2D) g;
Object oldrenderinghint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
GeneralPath path = new GeneralPath();
int mx = x + getIconWidth() / 2;
int my = y + getIconHeight() / 2;
int gap = 4;
path.moveTo(mx - gap, my - 2);
path.lineTo(mx - gap - 2, my);
path.lineTo(mx - gap, my + 2);
path.moveTo(mx - 2, my - gap);
path.lineTo(mx, my - gap - 2);
path.lineTo(mx + 2, my - gap);
path.moveTo(mx + gap, my - 2);
path.lineTo(mx + gap + 2, my);
path.lineTo(mx + gap, my + 2);
path.moveTo(mx - 2, my + gap);
path.lineTo(mx, my + gap + 2);
path.lineTo(mx + 2, my + gap);
g.setColor(Color.GRAY);
g2d.draw(path);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldrenderinghint);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy